Les vrmesh (ou proxy)

C'est quoi?

Pour faire très brièvement: Vous connaissez le principe du tiling des textures? (Non? Hop! Hop! Hop! Et plus vite que ça! :nannan: ) Et bien le principe est le même, mais pour de la géométrie: Les vrmesh sont des mesh "prêt à être raycasté". La géométrie y est stocké dans une grille (voxel).

Ainsi, vous ne chargerez que "la boite" nécessaire au rendu. Votre vrmesh peut faire une taille astronomique, seul les éléments nécessaire au calcul seront chargé/déchargé à la volé. Au même titre que les maps tilé, ceci a pour effet d'augmenter les IO sur vos disques mais vous donne une énorme flexibilité.

N'ayez donc pas peur de la taille, les vrmesh sont fait pour! :D

Pratique

On va faire simple, voici une scène avec deux cycle d'animation de 24 frames:

user_attr_vray_001.png

Ça ne se voit pas mais ces deux bonhommes marchent! :onSeFendLaPoire:

A cette étape, le principe est d'assigner à chaque "groupe de shader", un shader quelconque. C'est le nom qui importe car c'est ce nom là qui sera stocké dans le vrmesh:

user_attr_vray_002.png

"lambert5" ça aurait dû être "bras" mais je suis complètement passé à coté. :baffed:

Même si ce n'est pas obligatoire, essayez de garder une cohérence dans les noms entre tous vos objets. Ainsi, si vous avez des personnages de foule à exporter. Assignez leur à tous les shaders "bras", "corp", "tete", "cheuveux", "tenuHaut", "tenuBas", etc... Avec un peut de script, vous gagnerez du temps plus tard.

Sélectionnez le groupe de mesh que vous souhaitez exporter:

user_attr_vray_003.png

Puis allez dans Create/V-Ray/Create proxy:

user_attr_vray_004.png

Vous arrivez devant une interface horrible sobre:

user_attr_vray_005.png

Cochez Export animation. Si votre mesh est animé et que vous envisagez d'utiliser du motion blur sur votre rendu final, cochez aussi Export velocity. Les deux valeurs vont créer l’intervalle qui permettra de calculer le vecteur de direction à stocker dans les vertex. C'est à partir de ça que VRay calculera le motion blur de la géométrie. Soyez vigilant sur cet intervalle. On peu avoir des (mauvaises) surprises. Si vous ne comptez pas rendre avec du motion blur, décochez cette options, se sera des informations en moins à stocker dans la géométrie.

Dans mon cas j'ai aussi coché Use playback range mais avisez en fonction. :reflechi:

Avec Face in preview, Chaos Group nous gratifie une fois de plus d'une petite feature à priori anodine mais très intéressante en pratique: Le principe est de sauver les index de n face qui seront affiché dans le viewport plus tard.

Quand on fait des proxy, principalement pour alléger sa scène, on se retrouve souvent à devoir gérer des grosses bouding box à la place. Si le pipeline le permet, vous aurez peut être même un proxy fait par un autre département (on ne compte même pas de temps nécessaire). La, les bonhommes de Chaos Group ont eux la réflexion très intéressante: "Pourquoi pas faire un proxy sympa, qui correspond à quelque chose mais vraiment allégé?". Le pari est entièrement réussi, vous verrez ça plus tard. :)

Si vous souhaitez réimporter directement le proxy nouvellement créé, vous pouvez, si vous le voulez cliquer sur Automatically create proxies.

Pour le reste, je vous conseil vivement de regarder la doc.

Une fois que c'est fait, on clique sur Create Proxy!

Faites ça pour tout les personnages que vous avez à exporter.

:longBar:

Pour importer tout ça:

user_attr_vray_006.png

user_attr_vray_007.png

Tadaaaa:

user_attr_vray_008.png

user_attr_vray_009.png

Et voilà nos 100 faces par objet. Ça claque hein? :aupoil:

Plus sérieusement, vous pouvez en mettre des centaines, votre viewport ne bronchera pas. De plus, ces proxys correspondent au modèle final. L'approximation vous gênera beaucoup moins qu'un model low ou pire, une bounding box.

Mais allons zyeuter les options:

user_attr_vray_010.png

Si on coche Bounding box:

user_attr_vray_011.png

Pour les nostalgiques. :trollface:

Si vous n'êtes pas satisfait de l'approximation, Chaos Group a pensé à vous: Show whole mesh:

user_attr_vray_012.png

Les autres options sont plus spécifique. Je ne rentre pas plus dans les détails. Si ça vous intéresse: :RTFM:.

Notez juste que la vitesse de l'animation est configurable (animable aussi! :gniarkgniark: ) et que dans notre cas (et la plupart des cas) elle est cyclique (Loop).

Allez dans les onglets plus à droite. VRay nous a déjà connecté un shader et...

user_attr_vray_013.png

Oh miracle! Nos slots sont là! :laClasse:

Vous n'aurez plus qu'a drag and droper les shaders à utiliser.

Notez qu'à trop vouloir être gentil, VRay nous créé un shader pour chaque vrmesh importé. Sauf que si vous importez deux fois le même vrmesh, vous aurez deux shaders qui font là même chose. N'hésitez pas à en virer un et à appliquer un seul shader par type de vrmesh.

Maintenant passons aux choses sérieuses! :enerve:

Les User Attributes

Sélectionnez le node de transform d'un des vrmesh et ajoutez y des User attributes:

user_attr_vray_014.png

Dans ces User attributes (paumé tout en bas de votre Attribute Editor) ajoutez la chose suivante:

casquetteColor=1,1,0;

user_attr_vray_015.png

Là normalement vous commencez à comprendre. :siffle:

Sur le second, créez une valeur similaire:

user_attr_vray_016.png

Maintenant créez un shader, un blinn dans mon exemple (Oui, je sais, c'est mal). Donnez lui un nom clair (ça va vite devenir le foutoir dans vos connections donc c'est vous qui voyez :redface: ):

user_attr_vray_017.png

Ajoutez un node VRayUserColor et entrez la valeur de votre attribut:

user_attr_vray_018.png

user_attr_vray_019.png

Mettez la couleur par défaut qui vous convient. Ce sera la couleur utilisé si le User Attribute n'est pas présent/valide.

Vous avez des exemples de syntax juste en dessous du node (encore une bonne idée).

Connectez ce node à la color de votre shader (dommage que Maya n'utilise pas la default color dans l'hypershade, ça serait toujours plus sympa qu'un truc tout noir.

user_attr_vray_020.png

Connectez votre shader aux deux VRayMeshMaterial, dans le slot... "casquette":

user_attr_vray_022.png

user_attr_vray_021.png

Puis rendez:

user_attr_vray_023.png

La musique de victoire (à écouter avec :smileFou: )

Faîtes pareil pour tous les shaders (sauf le corp qu'on se garde pour après :jdicajdirien: ):

user_attr_vray_024.png

user_attr_vray_025.png

Bon, voilà pour les couleurs. Vous pouvez faire de même avec les VRayUserScalar et les attributs à virgule.

Maintenant attaquons nous au corp:

user_attr_vray_026.png

Juste un node de file.

Imaginons que vous ayez quatre textures:

  • checker_default.png
  • checker_four.png
  • checker_etc.png

La seule variable dans votre texture se situe à la fin (et, pourquoi pas, dans le chemin).

Mettez donc ça dans votre chemin de fichier:

user_attr_vray_027.png

Et appliquez la variable à vos différents User Attributes:

user_attr_vray_028.png

user_attr_vray_029.png

Rendez!

user_attr_vray_030.png

On se la remet?

Et si on s'enflamme un peu: user_attr_vray_031.png

user_attr_vray_032.png

Si vous êtes amené à faire souvent (ou pas) des foules, vous devriez serieusement envisager cette solution.

Petites notes

Mine de rien, et comme les User Data de mental ray, c'est un peu laborieux à mettre en place. Mais si vous ou un collègue savez scripter, il n'est pas trop difficile de mettre ça en place sur une production.

On me souffle à l'oeillette qu'il se peut (c'est non confirmé donc à prendre avec des pincettes) que Deex (que je remercie pour m'avoir fait découvrir VRay) intègre ça à Arsenal. On peut donc espérer un truc simple (mais soyez pas trop pressé :sourit: ).

Conclusion

J’espère que ce tuto assez costaud vous aidera dans vos productions.

A bientot!

Dorian

:marioCours: