Les pitons sont comme des points de contrôle. Ils sont particulièrement utiles lorsque vous commencez à jouer au jeu.
Plongée approfondie dans l'art technique : Comment Cairn rend les matériaux rocheux spécifiques au gameplay en utilisant des blendmaps 3D

Anthony Beyer de The Game Bakers plonge dans l'art technique de développer des "Surfaces No-Piton" pour leur jeu de simulation d'escalade, Cairn. Découvrez comment ils ont surmonté le défi d'aligner les visuels avec le gameplay en utilisant des blendmaps 3D et des Compute Shaders dans Unity.
Bonjour ! Je suis Anthony Beyer, directeur artistique technique chez The Game Bakers. Je viens à l'origine d'un parcours en design graphique (web, impression). Ma première expérience de jeu vidéo a été sur des jeux mobiles en tant que modeleur 3D en 2010. À ce moment-là, je ne savais rien sur la programmation, mais j'étais très intéressé par le travail avec des graphiques dans un moteur de jeu vidéo, donc j'ai commencé à apprendre JavaScript et à bricoler quelques petits projets Unity pendant mon temps libre. De nos jours, je passe plus de temps à écrire du code qu'à créer des modèles 3D ! Vous pouvez trouver certains de mes travaux sur ma page ArtStation.
J'ai commencé à travailler avec le studio The Game Bakers au tout début du développement de Furi, vers 2014. Après la sortie de Furi en 2016, nous avons travaillé sur Haven (lancé en 2020), et en janvier 2026, nous avons sorti notre nouveau jeu, Cairn, un jeu vidéo de simulation d'escalade.
Qu'est-ce qu'un piton dans Cairn ?
Dans Cairn, vous pouvez grimper sur presque tous les murs, et nous avons implémenté une mécanique d'endurance pour rendre cette expérience plus difficile. Après avoir grimpé pendant un certain temps, Aava (le personnage joueur) finira par se fatiguer. Pour se reposer, elle peut se sécuriser au mur avec des pointes métalliques appelées pitons. (Remarque sur le gameplay : Les pitons sont optionnels, et vous pouvez grimper sans eux, mais cela nécessite une connaissance plus approfondie des contrôles d'escalade de Cairn’s climbing controls).
Pour augmenter la difficulté sur certains murs et forcer des itinéraires en "free solo", nous avons voulu interdire la plantation de pitons dans des zones spécifiques de l'environnement. Dans cet article de blog, je vais expliquer comment nous avons développé cette petite partie technique du jeu que nous appelons No-Piton Surfaces.
Le protagoniste de Cairn, Aava, refusant de planter un piton sur une Surface No-Piton.
Comment ajouter différents types de surfaces à l'environnement
Lorsque vous souhaitez faire des variations sur le terrain, quelle est la première chose qui vous vient à l'esprit ? Vous pouvez…
- ajouter de nouveaux objets et de la géométrie
- ajouter de la "peinture de couleur de sommet"
- Utiliser une "texture de blendmap"
Cairn n'est définitivement pas un terrain "contrôlé par heightmap" typique ; c'est en fait une montagne assemblée (plus d'informations à ce sujet dans ce post ArtStation).

Cela a rendu difficile de faire des variations via des objets/geometry supplémentaires car cela ajoutait plus de contraintes à un processus de conception de niveau déjà complexe (et nous voulions concevoir nos Surfaces No-Piton librement sur la conception de niveau d'escalade réelle).
Blendmap et couleur de sommet sont des techniques similaires, étant toutes deux des masques qui sont échantillonnés dans le shader pour créer des variations de rendu.
Dans notre cas, nous ne pouvions pas utiliser la peinture de couleur de sommet, car :
- Il y avait trop de sommets à peindre.
- Il y avait trop d'instances de géométrie qui se chevauchent (maillages de prise en main projetés sur un terrain assemblé).
- Nos roches modulaires utilisent des LOD, donc la densité des sommets n'est pas cohérente.
carte de mélange 2D
En fin de compte, nous avons décidé d'opter pour une solution de carte de mélange !
Heureusement, nous avions déjà un outil personnalisé utilisé pour l'art de niveau, le TexturePainter. Cet outil nous a permis de peindre des cartes de mélange dans l'éditeur et de les assigner à des groupes de rendus (rendus sélectionnés manuellement ou automatiquement s'ils sont dans les limites de TexturePainter).
Chez The Game Bakers, nous adorons créer des outils personnalisés dans Unity – [ExecuteAlways] est généralement la première ligne que j'ajoute à chaque script !
Nous utilisons principalement TexturePainter pour peindre des couches d'herbe et de neige sur le sol, mais comme nous pouvons tourner librement dans TexturePainter, nous pouvons peindre sur les murs.

Après quelques petits ajustements de shader, nous avons créé notre carte de mélange "Surfaces sans Piton", et avons pu changer dynamiquement notre texturisation/ombrage.
Puisqu'il s'agit d'un Texture2D cuit, il est facile d'échantillonner la valeur d'une texture à une position mondiale donnée pour déterminer si le joueur peut planter un piton ou non.
Le concept a fonctionné ! Mais à ce stade, c'était encore assez limité car il s'agit d'une projection de masque 2D, et nous ne pouvions en avoir qu'une seule pour toute la montagne, donc la précision était faible.
À ce stade, nous n'étions pas sûrs que "Surfaces sans Piton" ferait partie du jeu. Visuellement, elles n'étaient pas attrayantes, et nous devrions faire beaucoup de tests de gameplay/design de niveau pour être sûrs qu'elles ajoutent une valeur significative au jeu.
Mais nous pouvions au moins commencer à itérer sur son apparence.
L'exposition de certains paramètres de rendu nous permet d'essayer différents aspects potentiels pour ce type de surface.
Lorsque votre première solution ne fonctionne pas du tout
Alors que nous essayions d'améliorer le rendu du côté direction artistique, du côté conception de niveau, la limitation de la "projection 2D" devenait de plus en plus problématique. En raison de la nature de notre conception de niveau, nous devions avoir un contrôle 3D sur les surfaces No-Piton suivantes :
- Surfaces No-Piton que l'on peut trouver à l'intérieur de la montagne (dans des grottes)
- Surfaces No-Piton qui peuvent envelopper des murs/architectures concaves/convexes
…
Saut dans le temps
Il y a toujours beaucoup de nouvelles idées et de nouvelles choses à faire dans le développement de jeux. J'aime travailler comme un papillon – chaque fois que je suis bloqué sur quelque chose, j'ignore le problème et vais faire autre chose ailleurs !
…
Trois à six mois plus tard…
Pour d'autres nouvelles fonctionnalités, nous utilisons Texture3D pour la représentation de champ de distance. Nous plaçons de nombreux volumes (boîtes et ellipsoïdes) et générons une texture de champ de distance à partir de cela, chaque pixel contenant la distance au volume le plus proche. Chaque volume peut être additif ou soustractif.
C'est ce que nous appelons la "Vue de Topologie" : un effet d'image en espace écran contrôlé par une Texture3D en espace monde.
Ces textures de champ de distance 3D sont de basse résolution et générées à la demande à l'exécution (elles ne sont également pas pré-calculées dans l'éditeur et ne sont pas lisibles côté CPU).
blendmap 3D
À ce stade, il était temps d'essayer notre solution de blendmap 3D pour les surfaces No-Piton.
Du côté des shaders, il est simple de passer d'une Texture2D à une Texture3D. Il ne restait plus qu'à ajouter un peu de bruit aux coordonnées du monde pour cacher ces texels de basse résolution, et, voilà!
Édition des surfaces No-Piton
Cette solution fonctionnait visuellement, mais tout était cassé en termes de gameplay, car nous ne pouvions pas détecter la position du joueur sur la texture, car la texture n'était pas lisible par le CPU.
L'échantillonnage du champ de distance a été effectué côté CPU en itérant sur chaque volume primitif (boîtes, ellipsoïdes). Cependant, parce que nous avons ajouté du bruit aux coordonnées du monde dans le shader de roche, il y avait un décalage visible aux bords ; clairement, cela manquait de précision.

Synchronisation des visuels avec le gameplay
Pour corriger cela, nous avons utilisé un Compute Shader pour obtenir les mêmes valeurs exactes que celles vues dans le shader de roche.
Lorsque le joueur souhaite planter un piton, nous effectuons un raycast contre le mur pour trouver où le piton va être positionné, et vérifions si le joueur est dans une zone No-Piton. Si tel est le cas, nous envoyons la demande au Compute Shader à la position de plantation du piton. Lorsque le résultat du Compute Shader revient (dans le même cadre ou un cadre plus tard), nous validons ou désactivons la capacité de planter un piton.
Maintenant, nous avons un échantillon parfait de texel : “shader de roche” et “Compute Shader de vérification No-Piton”, partageant tous deux le même code exact.
Il s'est avéré que cette solution était un peu trop précise !
Imaginez que vous êtes au milieu de la roche normale et de la roche No-Piton, et que vous souhaitez planter un piton, mais vous ne pouvez pas parce que le positionnement du monde du jeu a déterminé que vous êtes sur une surface No-Piton. Cela semble très injuste quand vous pouvez planter un piton à seulement deux pouces.
Pour résoudre ce problème, nous déclenchons plusieurs échantillons autour du joueur dans une petite plage pour trouver un emplacement valide si un est disponible.
Ici, vous pouvez voir que la vérification de la ligne verte est sur une roche No-Piton, tandis que la vérification de la ligne bleue supérieure est sur une roche ordinaire ; nous choisirons cette deuxième position pour planter le piton.
Il y a toujours quelque chose à peaufiner
Avec tout ce qui semble bon, il est temps de peaufiner et de polir.
Nous avons mis en œuvre un moyen de charger plusieurs zones sans piton en même temps. Seule la zone la plus proche est la "réelle", tandis que les autres sont rendues comme des décalcomanies LOD. Cette solution est loin d'être parfaite car les décalcomanies sont différées et ne peuvent pas recevoir d'éclairage de la même manière que le shader de roche, mais cela suffisait à nos besoins.
Transition de blendmap 3D sans piton de LOD0 (rendu à l'intérieur du shader de roche) à LOD1 (rendu avec une décalcomanie différée)
C'est tout sur les surfaces sans piton. Si vous jouez à Cairn et que vous trouvez un moyen de planter un piton sur une surface sans piton, veuillez me le dire – il y a toujours quelque chose à corriger !
Merci de votre lecture !
Cairn est maintenant disponible sur PC et PlayStation®5, avec un DLC gratuit "On The Trail" à venir cet été. Explorez plus de jeux Made with Unity sur notre page de Curateur Steam, et découvrez plus d'histoires de développeurs Unity sur le Blog Unity et le Hub de Ressources.
