HomeBlogBlender Blog – microdisplacement & adaptive subsurf

Blender Blog – microdisplacement & adaptive subsurf

La communauté Blender s’est pas mal emballée  pour deux nouveautés de la 2.78: le microdisplacement et l’adaptive subsurf. Les deux en sont d’ailleurs toujours au stade expérimental mais buildée dans Blender Cycles. Une panel de nouvelles possibilités s’offre en terme de modélisation rapide à partir de texture avec le microdisplacement et de complexité adaptative de géométrie du maillage avec l’adaptive subsurf.

blende microdisplacement adaptive subsurf
Ma version du package heightmap-diffuse map distribué par Gleb Alexandrov, cool !

J’avais bookmarké il y quelques temps les tutos et vidéos qui sont sorties sur le sujet, notamment celles de Blenderguru et de CreativeShrimp. Celle de Gleb m’a particulièrement plu, d’autant plus qu’il fournit un package pour faire quelques tests de génération de terrain dont vous trouvez un rendu ci-dessus. Plutôt convaincant non ? Un excellent exemple d’utilisation des deux nouvelles fonctionnalités qui contrecarre la vielle manière de faire avec le modifier displacement + texture, du subsurf classique et du bumpmap, méthode ultra gourmande en ressources (calcul et mémoire).

Heightmap

La heightmap (ou champ de hauteur, c’est pas beau le français quand même) c’est une image en nuance de gris donnant les informations de hauteur au displacement. Noir tout en bas, blanc tout en haut. Combinée à une géométrie complexe (un mesh composé d’un max de polygone), Blender peut déformer un simple plan pour reproduire le terrain. On parle d’une vraie déformation et pas d’un bumpmap classique.

blender microdisplacement adaptive subsurf heightmap
La heightmap à gauche, le terrain à droite.

C’est là qu’intervient l’adaptive subsurf qui permet de réduire ou accentuer la complexité du maillage. Plus l’objet est proche de la caméra, plus il sera subsurfé. Plus il est loin, moins il le sera. Et tout ça automatiquement. Ultime puisque c’est à l’avant-plan qu’on a besoin de détails!

Blender Cycles adaptive subsurf
Blender Cycles adaptive subsurf

Je m’étais mis en tête de trouver ma propre heightmap pour générer un terrain mais je me suis vite fatigué. Il y a une contrainte non négligable: celle de trouver une image de très bonne qualité (un PNG ou TIFF 16 bits 4K) sans quoi on n’obtient pas la finesse de détail qui fait toute la différence sur le terrain. Pour du réalisme, il faut aussi accompagner tout ça d’une texture diffuse pour couvrir le terrain de neige, rocher, végétation, plan d’eau, etc. Bref, mission impossible. Swisstopo (office topographique suisse) fournit des données de grandes précisions (résolution 2m !) notamment en terme d’élévation du terrain à partir de SwissALTI3D mais bon…ça coute les yeux de la tête et ça s’adresse visiblement aux professionnels de la géomatique plutôt qu’aux artistes 3D en herbe…

J’ai cependant mis la main sur une heightmap mais sans diffuse pour coloriser le tout à cette adresse. De la bonne grosse image de top qualité sans perte du à la compression (notamment le fameux PNG alors qu’avec les JPGs qu’on trouve en ligne, les défauts et carrés de compression sont modélisés par le microdisplacement…moche!) qui donne ça:

blender microdisplacement adaptive-subsurf heightmap in viewport
Pas mal, il y du détails mais il manque le diffuse. Et la colorisation en fonction de la hauteur du terrain ne me convainc pas… ça n’est jamais juste vert en bas et blanc en haut, la nature est plus complexe que ça 🙂

Pour s’offrir un mode réaliste gratuit j’ai trouvé terrain.party. Super intéressant, le site permet de produire des heightmaps auxquelles on pourrait mixer une image satellite pour coloriser le tout. Problème : ça sort des images basse résolution…intéressant pour couvrir une large zone sans doute mais pour un close-up, pas de détails au rendez-vous.

Reste donc à se tourner vers les générateurs de terrain comme WorldMachine ou Terragen. Là encore on se confronte rapidement au problème du prix du logiciel (très bons pour générer de la texture de haute qualité, heightmap et diffuse) mais en mode gratuit/trial version 30 jours on est limité évidemment…

Blender Cycles 2.78 Experimental

Il faut retenir que le microdisplacement et l’adaptive subsurf s’utilise en mode Cycles experimental pour le moment.

blender microdisplacement adaptive subsurf Experimental

Microdisplacement

Le microdisplacement s’active dans le panneau du material > Settings. Il faudra lui attacher une texture de type heightmap. Le paramètre displacement est par défaut réglé sur Bump (le bump classique qui ne déforme pas le maillage), il faut le passer à True.

blender microdisplacement adaptive subsurf material panel

Adaptive subsurf

L’adaptive subsurf se paramètre au niveau du panneau des modifiers. Après avoir ajouté un modifier subsurf dont le level peut être à 0, il suffit de cocher la case Adaptive et le subsurf sera automatiquement ajusté en fonction de la proximité de la caméra et de son champ de vision, magique !!! Le paramètre Dicing Scale permet d’ajuster la finesse du détail du subsurf. Utile pour réduire le niveau de détail quand le rendu plante par manque de ressources…

blender adaptive subsurf panel

Une setting globale permet d’influencer le taux de subdivision dans le panneau du rendu > Geometry. Le Subdivision Rate peut être modifié ici pour le rendu et la preview. Utile pour optimiser l’utilisation des ressources en fonction de sa carte graphique par exemple.

blender microdisplacement adaptive subsurf render panel

Material node

La matériau n’est pas bien sorcier. La heightmap est injectée dans l’input displacement du Material Output node. Un node Math > Substract à 0.5 permet de maintenir le plan en place car sa hauteur à tendance à monter descendre en fonction du noeud suivant (multiply). Un node Math > Multiply permet d’accentuer ou réduire l’influence du displacement. La heightmap est aussi utilisée à travers un node Bump sur le shader Diffuse pour donner du crisp à l’ensemble et augmenter le rendu de détails et la sensation de réalisme. La texture en couleur est basiquement utilisée dans l’input color d’un shader diffuse. A noter que par défaut Blender Cycles utilise les coordonnées UV pour mapper les textures sur le maillage. Un unwrap du mesh est donc opportun pour la placer correctement.

Blender microdisplacement adaptive subsurf Material Node
Le matériau pour générer le terrain avec le microdisplacement et l’adaptive subsurf, merci Gleb !

Les tutoriels de la crevette créative

Gleb Alexandrov alias CreativeShrimp a posté en marge de son fameux et excellent tuto Space VFX deux vidéos dédiés à des utilisations très créatives (dont la génération de terrain) de ces nouvelles fonctionnalités. Je vous recommande vivement ces deux vidéos auxquelles je me suis intéressé sur le tard mais qui m’ont vraiment inspirées.

Pour conclure

L’utilisation du microdisplacement et du subsurf pour la génération de terrain me séduit bien ! Le gain en performance est exceptionnelle et la facilité d’utilisation enfantine. J’espère explorer d’autres utilisations de ces nouveautés prochainement et me réjouis de les voir évoluer et intégrées un jour dans un mode non-expérimental. Il y a encore des défauts à régler comme  la collision ou le suivi précis du terrain par un générateur de particule pour faire de l’herbe par exemple.

Si vous avez des pistes ou ressources heightmap/diffuse à partager je suis preneur !

Bons blends à vous.

4 Comments

  1. chabane
    avril 8, 2017 at 22:18 — Répondre

    merci pour cette article, oui (c’est beau le français quand même), puisqu’il nous permet d’avancer dans blender , et merci aussi a blenderlounge qui a signaler le sujet

    • avril 9, 2017 at 17:30 — Répondre

      Merci pour le message chabane, de temps en temps j’essaie de me faire plaisir avec la langue de Molière 🙂 En Suisse on a tendance à mixer nos 4 langues nationales et à souvent se réunir autour de l’anglais… anglicisme quand tu nous tiens !

  2. […] L’article traite du sujet avec des exemples et screenshots […]

  3. avril 5, 2017 at 14:36 — Répondre

    Joli travail, vraiment bien expliqué ! Merci beaucoup !

Leave a reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *