Les User Attributes de VRay
Par Narann le dimanche, 17 février 2013, 21:36 - Infographie 3D - Boulot - Lien permanent
Voici un tuto que je voulais faire depuis pas mal de temps. :dentcasse:
VRay propose, depuis un bon moment maintenant, d’utiliser des attributs par objet pour contrôler certaines valeurs. Ça peut aller assez loin mais bien souvent, ce sont les shaders qui en profite. L’idée est d’appliquer un seul et unique shader à un grand nombre d’objet, mais que chaque objet ait des attributs « spéciaux » avec une valeur bien particulière qui se verront appliquer sur les attributs du shader. Si vous vous rappelez bien, je vous avais présenté une feature similaire sous mental ray (Les User Data).
Mais avant même de faire ça, ce tuto va vous expliquer comment exporter puis importer des vrmesh et refaire des assignations de shader à l’intérieur des-dits vrmesh ! Bref, un gros programme ! :bravo:
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ée dans une grille (voxel).
Ainsi, vous ne chargerez que « la boite » nécessaire au rendu. Votre vrmesh peut faire une taille astronomique, seuls les éléments nécessaires au calcul seront chargés/déchargés à la volée. 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 faits pour ! :D
Pratique
On va faire simple, voici une scène avec deux cycles d’animation de 24 frames :
À 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 :
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 peu de script, vous gagnerez du temps plus tard.
Sélectionnez le groupe de mesh que vous souhaitez exporter :
Puis allez dans Create/V-Ray/Create proxy:
Vous arrivez devant une interface horrible sobre :
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 peut avoir des (mauvaises) surprises. Si vous ne comptez pas rendre avec du motion blur, décochez cette option, ce 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 conseille vivement de regarder la doc.
Une fois que c’est fait, on clique sur Create Proxy!
Faites ça pour tous les personnages que vous avez à exporter.
Pour importer tout ça :
Tadaaaa:
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:
Si on coche Bounding box:
Si vous n’êtes pas satisfait de l’approximation, Chaos Group a pensé à vous : Show whole mesh:
Les autres options sont plus spécifiques. 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…
Oh miracle ! Nos slots sont là! :laClasse:
Vous n’aurez plus qu’à 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:
Dans ces User attributes (paumé tout en bas de votre Attribute Editor) ajoutez la chose suivante :
[bash] casquetteColor=1,1,0;
Là normalement vous commencez à comprendre. :siffle:
Sur le second, créez une valeur similaire :
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 connexions donc c’est vous qui voyez :redface: ):
Ajoutez un node VRayUserColor et entrez la valeur de votre attribut :
Mettez la couleur par défaut qui vous convient. Ce sera la couleur utilisée 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.
Connectez votre shader aux deux VRayMeshMaterial, dans le slot... "casquette":
Puis rendez :
Faîtes pareil pour tous les shaders (sauf le corps qu’on se garde pour après :jdicajdirien: ):
Bon, voilà pour les couleurs. Vous pouvez faire de même avec les VRayUserScalar et les attributs à virgule.
Maintenant attaquons-nous au corp:
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 :
Et appliquez la variable à vos différents User Attributes:
Rendez !
Et si on s’enflamme un peu :
Si vous êtes amené à faire souvent (ou pas) des foules, vous devriez sérieusement 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 sait scripter, il n’est pas trop difficile de mettre ça en place sur une production.
On me souffle à l’oreillette 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 bientôt !
Dorian
Commentaires
Super explication ! en plus c'est un sujet peu abordé, merci Dorian. :)
Je pense que c'est principalement du fait que c'est indigeste.
Pourtant, un paquet de petits studio pourrait utiliser ça pour gérer des foules facilement sans trop de soucis. Surtout en archi pour faire des bonhommes qui marchent sans plomber sa scène.
Et même, les vrmesh sur de la grosse géométrie (qui a dit des arbres) c'est top!
C'est top les vray mesh!
J'ai fait des forets avec ... 1 millions de poly par arbre et 1000 à l’affichage!
Et si par hasard tu ne l'a pas fais, tu pouvais même les animer sur un mouvement de vent (gauche/droite) mettre leur playback speed a 0.0 et animer le time offset pour avoir une sorte de driving key. :D