Dorian Fevrier's blog - Mot-clé - proxyJe m’appelle FEVRIER Dorian, je suis infographiste 3D passionné par mon métier, l’informatique en général, l’internet, la programmation et l’évolution de tout ce petit monde. Vous trouverez sur ce blog des tutoriaux, mes coups de cœurs, avis, etc.2024-01-02T23:48:05+01:00FEVRIER Dorianurn:md5:695d9c73474c33ce3dab043823509c4bDotclearLes User Attributes de VRayurn:md5:212f5e2b8e46bf1b868a9437b8f0afe42013-02-17T21:36:00+01:002020-12-08T10:29:10+01:00NarannInfographie 3D - Boulotfrmayaproxyuser attributesvrayvrmesh<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_tn.png" alt="user_attr_vray_tn.png" style="float:left; margin: 0 1em 1em 0;" title="user_attr_vray_tn.png, fév. 2013" />Voici un tuto que je voulais faire depuis pas mal de temps. :dentcasse:</p>
<p>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 <a href="https://www.fevrierdorian.com/blog/post/2011/04/16/Mental-ray-3.9-Les-User-Data-Shaders-ou-Shader-Package">vous avais présenté</a> une feature similaire sous mental ray (Les User Data).</p>
<p>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:</p> <h3>Les vrmesh (ou proxy)</h3>
<h4>C’est quoi ?</h4>
<p>Pour faire très brièvement : Vous connaissez le principe du tiling des textures ? (Non ? <a href="https://www.fevrierdorian.com/blog/post/2009/01/14/Le-mappage-en-m%C3%A9moire-des-textures-dans-Mental-Ray-expliqu%C3%A9-%28Memory-mapped-textures%29.">Hop ! Hop ! Hop !</a> 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).</p>
<p>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é.</p>
<p>N’ayez donc pas peur de la taille, les vrmesh sont faits pour ! :D</p>
<h4>Pratique</h4>
<p>On va faire simple, voici une scène avec deux cycles d’animation de 24 frames :</p>
<p><a href="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_001.png" title="user_attr_vray_001.png"><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/.user_attr_vray_001_m.jpg" alt="user_attr_vray_001.png" style="display:table; margin:0 auto;" title="user_attr_vray_001.png, fév. 2013" /></a></p>
<center><i>Ça ne se voit pas mais ces deux bonhommes marchent ! :onSeFendLaPoire:</i></center>
<p>À 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 :</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_002.png" alt="user_attr_vray_002.png" style="display:table; margin:0 auto;" title="user_attr_vray_002.png, fév. 2013" /></p>
<center><i>« lambert5 » ça aurait dû être « bras » mais je suis complètement passé à côté. :baffed:</i></center>
<p>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.</p>
<p>Sélectionnez le groupe de mesh que vous souhaitez exporter :</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_003.png" alt="user_attr_vray_003.png" style="display:table; margin:0 auto;" title="user_attr_vray_003.png, fév. 2013" /></p>
<p>Puis allez dans <em>Create/V-Ray/Create proxy</em>:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_004.png" alt="user_attr_vray_004.png" style="display:table; margin:0 auto;" title="user_attr_vray_004.png, fév. 2013" /></p>
<p>Vous arrivez devant une interface <del>horrible</del> sobre :</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_005.png" alt="user_attr_vray_005.png" style="display:table; margin:0 auto;" title="user_attr_vray_005.png, fév. 2013" /></p>
<p>Cochez <em>Export animation</em>. Si votre mesh est animé et que vous envisagez d’utiliser du motion blur sur votre rendu final, cochez aussi <em>Export velocity</em>. 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.</p>
<p>Dans mon cas j’ai aussi coché <em>Use playback range</em> mais avisez en fonction. :reflechi:</p>
<p>Avec <em>Face in preview</em>, 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 <em>n</em> face qui seront affiché dans le viewport plus tard.</p>
<p>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. :)</p>
<p>Si vous souhaitez réimporter directement le proxy nouvellement créé, vous pouvez, si vous le voulez cliquer sur <em>Automatically create proxies</em>.</p>
<p>Pour le reste, je vous conseille vivement de regarder <a href="http://www.spot3d.com/vray/help/maya/150R1/vrayproxy_params.htm#export_gui" hreflang="en">la doc</a>.</p>
<p>Une fois que c’est fait, on clique sur <em>Create Proxy</em>!</p>
<p>Faites ça pour tous les personnages que vous avez à exporter.</p>
<center>:longBar:</center>
<p>Pour importer tout ça :</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_006.png" alt="user_attr_vray_006.png" style="display:table; margin:0 auto;" title="user_attr_vray_006.png, fév. 2013" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_007.png" alt="user_attr_vray_007.png" style="display:table; margin:0 auto;" title="user_attr_vray_007.png, fév. 2013" /></p>
<p>Tadaaaa:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_008.png" alt="user_attr_vray_008.png" style="display:table; margin:0 auto;" title="user_attr_vray_008.png, fév. 2013" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_009.png" alt="user_attr_vray_009.png" style="display:table; margin:0 auto;" title="user_attr_vray_009.png, fév. 2013" /></p>
<p>Et voilà nos 100 faces par objet. Ça claque hein ? :aupoil:</p>
<p>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.</p>
<p>Mais allons zyeuter les options:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_010.png" alt="user_attr_vray_010.png" style="display:table; margin:0 auto;" title="user_attr_vray_010.png, fév. 2013" /></p>
<p>Si on coche <em>Bounding box</em>:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_011.png" alt="user_attr_vray_011.png" style="display:table; margin:0 auto;" title="user_attr_vray_011.png, fév. 2013" /></p>
<center><i>Pour les nostalgiques. :trollface:</i></center>
<p>Si vous n’êtes pas satisfait de l’approximation, Chaos Group a pensé à vous : <em>Show whole mesh</em>:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_012.png" alt="user_attr_vray_012.png" style="display:table; margin:0 auto;" title="user_attr_vray_012.png, fév. 2013" /></p>
<p>Les autres options sont plus spécifiques. Je ne rentre pas plus dans les détails. Si ça vous intéresse : <a href="http://www.spot3d.com/vray/help/maya/150R1/vrayproxy_params.htm#parameters" hreflang="en">:RTFM:</a>.</p>
<p>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 (<em>Loop</em>).</p>
<p>Allez dans les onglets plus à droite. VRay nous a déjà connecté un shader et…</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_013.png" alt="user_attr_vray_013.png" style="display:table; margin:0 auto;" title="user_attr_vray_013.png, fév. 2013" /></p>
<p>Oh miracle ! Nos slots sont là! :laClasse:</p>
<p>Vous n’aurez plus qu’à drag and droper les shaders à utiliser.</p>
<p>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.</p>
<p>Maintenant passons aux choses sérieuses! :enerve:</p>
<h3>Les User Attributes</h3>
<p>Sélectionnez le node de <em>transform</em> d’un des vrmesh et ajoutez-y des <em>User attributes</em>:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_014.png" alt="user_attr_vray_014.png" style="display:table; margin:0 auto;" title="user_attr_vray_014.png, fév. 2013" /></p>
<p>Dans ces <em>User attributes</em> (paumé tout en bas de votre <em>Attribute Editor</em>) ajoutez la chose suivante :</p>
<pre>[bash]
casquetteColor=1,1,0;
</pre>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_015.png" alt="user_attr_vray_015.png" style="display:table; margin:0 auto;" title="user_attr_vray_015.png, fév. 2013" /></p>
<p>Là normalement vous commencez à comprendre. :siffle:</p>
<p>Sur le second, créez une valeur similaire :</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_016.png" alt="user_attr_vray_016.png" style="display:table; margin:0 auto;" title="user_attr_vray_016.png, fév. 2013" /></p>
<p>Maintenant créez un shader, un <em>blinn</em> 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: ):</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_017.png" alt="user_attr_vray_017.png" style="display:table; margin:0 auto;" title="user_attr_vray_017.png, fév. 2013" /></p>
<p>Ajoutez un node <em>VRayUserColor</em> et entrez la valeur de votre attribut :</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_018.png" alt="user_attr_vray_018.png" style="display:table; margin:0 auto;" title="user_attr_vray_018.png, fév. 2013" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_019.png" alt="user_attr_vray_019.png" style="display:table; margin:0 auto;" title="user_attr_vray_019.png, fév. 2013" /></p>
<p>Mettez la couleur par défaut qui vous convient. Ce sera la couleur utilisée si le <em>User Attribute</em> n’est pas présent/valide.</p>
<p>Vous avez des exemples de syntax juste en dessous du node (encore une bonne idée).</p>
<p>Connectez ce node à la <em>color</em> de votre shader (dommage que Maya n’utilise pas la <em>default color</em> dans l’hypershade, ça serait toujours plus sympa qu’un truc tout noir.</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_020.png" alt="user_attr_vray_020.png" style="display:table; margin:0 auto;" title="user_attr_vray_020.png, fév. 2013" /></p>
<p>Connectez votre shader aux deux <em>VRayMeshMaterial</em>, dans le slot... "casquette":</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_022.png" alt="user_attr_vray_022.png" style="display:table; margin:0 auto;" title="user_attr_vray_022.png, fév. 2013" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_021.png" alt="user_attr_vray_021.png" style="display:table; margin:0 auto;" title="user_attr_vray_021.png, fév. 2013" /></p>
<p>Puis rendez :</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_023.png" alt="user_attr_vray_023.png" style="display:table; margin:0 auto;" title="user_attr_vray_023.png, fév. 2013" /></p>
<center><i><a href="http://www.youtube.com/watch?v=8RLPG88u3lM">La musique de victoire</a> (à écouter avec :smileFou: )</i></center>
<p>Faîtes pareil pour tous les shaders (sauf le corps qu’on se garde pour après :jdicajdirien: ):</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_024.png" alt="user_attr_vray_024.png" style="display:table; margin:0 auto;" title="user_attr_vray_024.png, fév. 2013" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_025.png" alt="user_attr_vray_025.png" style="display:table; margin:0 auto;" title="user_attr_vray_025.png, fév. 2013" /></p>
<p>Bon, voilà pour les couleurs. Vous pouvez faire de même avec les <em>VRayUserScalar</em> et les attributs à virgule.</p>
<p>Maintenant attaquons-nous au corp:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_026.png" alt="user_attr_vray_026.png" style="display:table; margin:0 auto;" title="user_attr_vray_026.png, fév. 2013" /></p>
<center><i>Juste un node de file.</i></center>
<p>Imaginons que vous ayez quatre textures :</p>
<ul>
<li>checker_default.png</li>
<li>checker_four.png</li>
<li>checker_etc.png</li>
</ul>
<p>La seule variable dans votre texture se situe à la fin (et, pourquoi pas, dans le chemin).</p>
<p>Mettez donc ça dans votre chemin de fichier :</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_027.png" alt="user_attr_vray_027.png" style="display:table; margin:0 auto;" title="user_attr_vray_027.png, fév. 2013" /></p>
<p>Et appliquez la variable à vos différents <em>User Attributes</em>:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_028.png" alt="user_attr_vray_028.png" style="display:table; margin:0 auto;" title="user_attr_vray_028.png, fév. 2013" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_029.png" alt="user_attr_vray_029.png" style="display:table; margin:0 auto;" title="user_attr_vray_029.png, fév. 2013" /></p>
<p>Rendez !</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_030.png" alt="user_attr_vray_030.png" style="display:table; margin:0 auto;" title="user_attr_vray_030.png, fév. 2013" /></p>
<center><i><a href="http://www.youtube.com/watch?v=8RLPG88u3lM">On se la remet ?</a></i></center>
<p>Et si on s’enflamme un peu :
<img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_031.png" alt="user_attr_vray_031.png" style="display:table; margin:0 auto;" title="user_attr_vray_031.png, fév. 2013" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2013_02_17_Les_User_Attributes_de_VRay/user_attr_vray_032.png" alt="user_attr_vray_032.png" style="display:table; margin:0 auto;" title="user_attr_vray_032.png, fév. 2013" /></p>
<p>Si vous êtes amené à faire souvent (ou pas) des foules, vous devriez sérieusement envisager cette solution.</p>
<h3>Petites notes</h3>
<p>Mine de rien, et comme les <em>User Data</em> 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.</p>
<p>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 à <a href="http://arsenal.deex.info/" hreflang="en">Arsenal</a>. On peut donc espérer un truc simple (mais soyez pas trop pressé :sourit: ).</p>
<h3>Conclusion</h3>
<p>J’espère que ce tuto assez costaud vous aidera dans vos productions.</p>
<p>A bientôt !</p>
<p>Dorian</p>
<center>:marioCours:</center>