Test cheveux 2.69 !

Posté par Pixelvore le 10/10/2013 15:38:11
[edit] mes excuses, je voulais mettre ça dans la section WIP...


Bonjour le Blender Clan,

Ca faisait un moment que je n'avais pas touché à Blender (depuis les 2.5x) et ces derniers jours je m'y suis remis fiévreusement car j'ai jugé qu'il était temps de me former à Cycles quand même. Et à peine prises en main les dernières fonctionnalités de rendu, je vois arriver la 2.69 RC1 avec les BSDF's de cheveux. Du coup j'ai passé la nuit dernière à faire mumuse pour reproduire un shader complet de cheveux. J'arrive à un truc comme ça sans vraiment chercher l'esthétisme (clic droit -> ouvrir l'image) :



Ils ont pas l'air en bonne santé mais c'est 1) parce que je les ai peignés n'importe comment et 2) parce que j'ai quelques textures pour "randomiser" un peu la couleur et l'angle d'offset donc on est loin de la chevelure lisse et fluide de l'Oréal.

A part ça, le shader est construit pour coller autant que possible au modèle le plus complet / récent qui existe (à ma connaissance) : Light Scattering from Human Hair Fibers (Marschner et al., 2004) http://www.cs.cornell.edu/~srm/publications/sg03-hair-lr.pdf

-> une "hair BSDF" blanche mise en "reflection" pour les reflets principaux (réflexion directe qu'ils appellent lobe "R" dans le paper) avec un angle d'offset autour de 5° (= 2 fois l'inclinaison des cuticules du cheveu).
-> une "hair BSDF" teintée mise en "reflection" pour les reflets secondaires (lobe "TRT" dans le paper pour transmission entrante -> réflexion interne -> transmission sortante qui fait sortir du même côté qu'initialement), avec des paramètres de "roughness" 2 fois plus larges que le lobe R (la réflexion interne étale le cône de réflexion) et un angle d'offset de -1.5 fois celui du lobe R (pour des raisons géométriques encore)
-> une "hair BSDF" teintée mise en "transmission" (lobe "TT" dans le paper pour transmission entrante -> transmission sortante de l'autre côté) avec des paramètres de "roughness" 2 fois plus petits que le lobe R (ça refocalise) et un offset d'angle de -0.5 fois celui du lobe R.
Un peu confus tout ça je sais, mais je vous assure tout s'éclaire avec le premier schéma du paper

Bref, tout ça pour dire que le but de la manoeuvre c'était de partir sur une base "physique", ça donne des valeurs de départ pour les paramètres, après on est libre de sortir de ce cadre strict.

Voilà, si vous voulez je file le .blend, mais je suis prêt à parier que vous êtes déjà arrivés à des résultats similaires sans vous prendre la tête à lire un paper du genre

Allez-y montrez vos tests ça m'intéresse !

Re: Test cheveux 2.69 !

Posté par stefh le 10/10/2013 18:31:56
Citation :

Pixelvore a écrit:
... Light Scattering from Human Hair Fibers (Marschner et al., 2004) http://www.cs.cornell.edu/~srm/publications/sg03-hair-lr.pdf ...

... vous êtes déjà arrivés à des résultats similaires sans vous prendre la tête à lire un paper du genre



Mazette! Non j'ai pas tout lu... mais ça a l'air passionnant. Et d'ailleurs ça me fait penser à un sujet sur lequel j'ai fait quelque succinte recherche cet après-midi: le langage glsl en général, et son utilisation dans blender en particulier.

La réflexion que j'en tire au point où j'en suis c'est que ça a l'air passionnant, mais faut quand même être bien motivé pour s'y mettre (l'apprendre et l'utiliser).


Pas mal ton rendu sinon! Hormis le peignage qui certe laisse à désirer, la texture fait très réaliste.


Edit: glsl tuto -> http://www.lighthouse3d.com/tutorials/glsl-tutorial/

et le site du bousin -> http://www.opengl.org/documentation/glsl/

Re: Test cheveux 2.69 !

Posté par Pixelvore le 10/10/2013 20:09:39
Citation :
La réflexion que j'en tire au point où j'en suis c'est que ça a l'air passionnant, mais faut quand même être bien motivé pour s'y mettre (l'apprendre et l'utiliser).


Je trouve pas le langage en soi difficile (j'ai eu une petite expérience là dessus en stage), ce qui demande de l'investissement c'est tout ce qu'il faut engranger pour savoir précisément ce qu'on fait. L'infographie ça demande 1) d'être à l'aise en "physique de la lumière" pour pouvoir broder et "inventer" de nouveaux shaders, et 2) d'être à l'aise en maths (surtout géométrie) pour ne pas s'y prendre comme un manchot au moment de coder lesdits shaders. Le reste c'est surtout de la syntaxe et du bon sens

Bon sinon petit up, j'ai uploadé la vidéo qui s'est rendue cette nuit

https://vimeo.com/76609109

Assez rapide le rendu finalement, je suis à 10 spp (clamp fireflies à 1.00 quand même) et les 800 x 600 se calculent en 1'30".

Re: Test cheveux 2.69 !

Posté par zeauro le 10/10/2013 20:42:06
Je mettais amusé à faire des tests dans le viewport mais je n'ai rien sauvegardé.
J'ai bien mixé les deux types de shaders mais je n'ai pas cherché à utiliser 2 réflections.
Mais c'est vrai que je trouve excellent le fait d'avoir ce nouveau shader transmission.
Ce n'est pas un lourd SSS qui prend des plombes au rendu.
Et ça donne des rendus, toute suite, plus réalistes avec cette translucence.
En tout cas, quand on cherche plus à tirer vers la fourrure voire vers la peluche, le bénéfice est saisissant.

Re: Test cheveux 2.69 !

Posté par Pixelvore le 10/10/2013 23:47:13
@zeauro : oui la transmission est bien plus rapide que le SSS car elle ne simule pas la "marche aléatoire" du rayon à l'intérieur des fibres (encore heureux), il tape le cheveu et passe avec une seule déviation.
Faut pas être trop dur avec les devs pour le SSS, en Monte Carlo complet faut simuler le zigzag complexe du rayon à l'intérieur du volume, car le rayon change continûment de direction (à notre échelle) donc c'est largement pire que des rebonds d'une surface à l'autre (GI habituelle avec des matériaux opaques et transparents sans diffusion). Après justement, l'approximation diffusion isotrope + dipôles lumineux en surface (le truc codé dans Cycles) permet d'éviter de simuler tous ces rebonds en calculant approximativement pour chaque point de la surface la contribution lumineuse des autres points de la surface (donc plus besoin de regarder volumétriquement ce qui se passe). Tout ça en saupoudrant d'une structure d'accélération du genre Octree pour regrouper ensemble les points lorsque l'erreur est tolérable.
Donc faut bien voir que oui, le SSS de Cycles est lent, mais c'est bien le plus rapide (et basique...) qui soit dans le cadre d'un moteur lancer de rayons. C'est à ma connaissance la méthode la plus populaire pour avoir du SSS pas cher. Si on faisait du Monte Carlo intégral là les temps de calculs se compteraient minimum en heures (rappelez vous quand fallait lancer le calcul pendant la nuit sur Indigo pour une scène bidon avec un peu de SSS...), là c'est en quelques dizaines de minutes au lieu de quelques minutes, ça pourrait être pire. Et faut savoir aussi qu'il existe des raffinements de cette méthode d'intégration du SSS qui permettront dans le futur d'avoir un meilleur SSS dans Cycles sans avoir à changer complètement de "paradigme" (à l'opposé d'autres méthodes du genre approximation par une grille 3D à l'intérieur du volume). Par exemple, pour du SSS multicouche on généralise la méthode avec des "multipôles" et ça fait juste un peu plus de termes dans l'addition pour le calcul des contributions lumineuses, mais le principe reste le même et les résultats sont très supérieurs. Ce qui me rassure c'est que le paper qui décrit ça je l'ai vu (lui et d'autres) dans la liste des papers repérés par Brecht http://wiki.blender.org/index.php/Dev:2.6/Source/Render/Cycles/Papers donc je sais qu'il a ça en tête.
Voilà tout ça pour dire "patience, ça vient"

Et sinon, je me suis fait un rendu high res avec des cheveux mieux peignés, on voit clairement la séparation entre le reflet principal (blanc) et le secondaire (teinté), vraiment essentiel pour tous types de cheveux du coup sauf les bruns évidemment (transmission négligeable car absorption quasi complète à l'intérieur. C'est géré tout seul par le shader de toute façon, une BSDF noire donne juste du noir partout sans aucun reflet.)



(clic droit -> afficher image)

Re: Test cheveux 2.69 !

Posté par zeauro le 11/10/2013 9:11:27
Citation :

Pixelvore a écrit:

Faut pas être trop dur avec les devs pour le SSS


Ce n'est pas mon intention.
Je parlais de façon générale.

Je ne connais pas un seul soft où le SSS ne ralentisse pas notablement le rendu.
C'est pour ça que dans la plupart, il y a un FakeSSS comme celui de l'internal.

Re: Test cheveux 2.69 !

Posté par Pixelvore le 11/10/2013 13:28:15
Citation :
C'est pour ça que dans la plupart, il y a un FakeSSS comme celui de l'internal.


C'est la même méthode qui est utilisée dans Cycles La seule différence c'est que dans Cycles les points échantillonnés sur la surface pour estimer l'irradiance incidente sont mieux répartis dans toutes les directions car les rayons sont susceptibles d'arriver de partout donc faut assurer, alors que dans l'Internal on prend juste les points "vus de face" + ceux "vus de dos" (et on se limite à l'éclairage direct dans le calcul d'irradiance). C'est pour ça que lors du pre-pass on aperçoit l'objet en rendu clay à la fois de face et de derrière. Mais sur le fond c'est pas "fake", c'est juste une approximation dans le sens où ça donne la solution exacte dans certains cas idéaux et en pratique, sur des vrais cas, ça donne une solution approchée. Du SSS "vraiment fake" par exemple c'est la technique de texture space diffusion qui consiste à flouter l'illumination dans l'espace texture ; même en floutant selon de vrais profils de diffusion, c'est faux physiquement même si ça colle à peu près perceptuellement. Mais ça fait du temps réel c'est sûr.

Mais en tout cas, agreed. Quel que soit le soft, le SSS et le rendu volumétrique sont toujours des problèmes épineux et y'aura jamais de méthode miracle.

Cette contribution était de : http://blenderclan.tuxfamily.org/html/newbb/viewtopic.php?forum=19&topic_id=40123