J'ai de toutes façons raison. (le blog de Ze_PilOt)
Retour au blog <<

Naissance d'un shader - étape 2 : comprendre la recherche, suivre ses evolutions.

Jeudi 16 octobre 2008 à 13 h 59
Une fois le papier trouvé, il faut encore le lire, mais surtout le comprendre.

D'abord, comment ces gens en sont venu à ce resultat ?

- on les engage en disant "bon les gars, on a besoin d'un modele mathématique pour faire du beau poil sur notre prochain film !".

On les enferme dans une piece et on attend.

Par où on commence ? Ben, logiquement, on regarde déjà à quoi ressemble un poil. Et surtout, on regarde comment il réagit à la lumiere.

Alors j'ai pas trouvé de photo de ce genre d'équipement (parce que je sais déjà pas comme ça s'appelle exactement), mais ça marche comme ça :
- on met un poil dans une chambre noire.
- on met une lumiere qui va tourner et changer d'intensité tout les x degrés.
- on met un capteur qui lui aussi va tourner et choper la lumiere provenant du poil.


Bon evidemment une lumiere fixe et tourner le poil et la camera suffirait, mais comme c'est piti et cassant, c'est plus simple de faire tourner tout le reste.

Ca donne, par exemple, ça :



Bon c'est un exemple simple : les courbes, c'est les mesures de lumières (R G et B).

Le petit soleil noir, c'est la lumiere emise.
le plan, c'est le poil, la racine vers la gauche, la pointe vers la droite.
phiR, c'est l'angle de vue.

Par exemple, sur le tout premier schéma, il faut se placer à +- 35° pour voir un beau speculaire.

Bon bref, ils ont fait des tas et des tas de mesure. Et les resultats leur ont dit quelque chose. Et ils se sont souvenus d'un truc qu'ils ont du étudier vers l'age de 10 ans.

Petite histoire :

vers 1630, un mec un peu poète se passionne pour les arcs-en-ciel. Il essaye de comprendre comment se forme le prisme, et analyse donc un cas simplifié de la goutte d'eau : un cylindre de verre. Il en sort pleins de resultats.
Il se trouve que ces resultats sont tres similaires à ceux obtenus dans nos cheveux.
Il en sort aussi pleins de maths. Et ces maths, on peut les réappliquer facilement.

Le mec, c'est Descartes, les formules je vous laisse chercher si ça vous interesse (tout est dans le pdf de l'article 1), et le resumé, c'est ça :



et son application dans le poil :



Pour un rayon frappant le poil, une partie est reflechie (R pour reflechi), une partie est refractée deux fois et traverse donc le poil (TT pour transmis-transmis), et une partie est refléchie dans le poil pour ressortir ailleurs. (TRT pour transmis-reflechi-transmis - ou SS pour Sub Scattering).

Grace à descartes, on a les formules et simplifications pour calculer le chemin de chaque rayon dans le cylindre (cas simplifié, je vous passe les deltaH et cie), comme le fait qu'on a soit un path ou 3 pour un point d'entrée et un angle donné (ce qui donne un ou deux speculaires selon l'angle), ou comme le fait que les rayons peuvent converger et donner des caustiques dans la poil.

C'est assez efficace : au lieu de faire varier l'angle du rayon incident, on peut plutot faire varier les angles de refractions. Et comme du coup l'angle incident reste fixe, on peut précalculer tout les cas possibles, ce qui accèlere le rendu.
Encore une fois je fais des raccourcis et je simplifie le procédé, mais c'est ça - nvdia utilise ce genre de table de pré-calcul en temps réel sur la demo de nalu). On précalcule tout les cas possibles, on entre un angle de lumiere, un angle de vue, et on a immédiatement le resultat pour chaque point/path possible.

Mais bon, on est pas dans un cylindre parfait, il faut donc rajouter la dessus l'applatissement du cheveux, et surtout les fait qu'il est constitué d'écailles (l'angle alpha du schéma - renvoye R vers la base du poil et le TRT vers la pointe par exemple)

La compréhension est une chose, mettre en pratique les maths derriere, c'est autre chose. Heureusement l'un de mes patrons est une brutasse là dedans et m'a sorti en 4 jours un pseudo-code de ce papier.

Reste l'analyse des papiers sortis après celui là : le dual scattering (on prend en compte le fait que la lumiere qui sort d'un poil va contribuer à éclairer son voisin) et autres "spherical harmonics" très recentes (2007 -plus théorie que pratique- et 2008 - utilisables).

Etape 3, traduire les maths en language compréhensible par le moteur de rendu, et en utilisant les données fournies par le soft de 3d...
par un Anonyme
Jeudi 16 octobre 2008 à 14 h 39
C'est un gonioreflectomètre. Un mot très sympa à placer dans une conversation pour briller en société au repas de famille avec Belle-Maman.
par Sylario
Jeudi 16 octobre 2008 à 14 h 59
Mais les équations de Descarte là, c'est pas les mêmes formules que pour la fibre optique?

Et c'est moi ou ces maths sont pas super compliqués? genre largement du niveau d'un 1ere S ?
Jeudi 16 octobre 2008 à 17 h 24
Je suppose que oui, ca doit etre la meme application dans les fibres optiques.

les maths sont pas extremement complexes, mais si tu mates les pdf y a des tas de parametres à prendre en compte, des cas particuliers,.. dont je parle pas dans l'article (le but n'étant pas d'expliquer comment coder spécifiquement ce shader, mais plutot de comprendre comment on en developpe un).

pour info le R et le TT fonctionnent, me reste le TRT..
par LeGreg
Jeudi 16 octobre 2008 à 17 h 51
@sylario,
ce sont des papiers "computer science", hein, pas maths purs. Ceci dit si en première S effectivement on a appris pas mal des outils de base, la modélisation, la dérivation et l'intégration pour en faire un programme ne sont pas forcément super facile pour un élève de première (sans qu'on lui mâche une grosse partie du travail, genre lui donner la formule finale pour qu'il la programme et qu'il puisse écrire son TIPE).

pps: sinon la formule de Descartes (ou Snell si tu es anglo saxon) est applicable pour tout phénomène ondulatoire (y compris les vagues sur l'eau !) donc c'est normal que tu la retrouves pour les fibres optiques ou les cheveux ou la diffusion des ondes sismiques. Snell-Descartes permet de retrouver l'angle mais pour l'intensité il faut faire appel à Fresnel :
Fresnel et Descartes
par skaven
Jeudi 16 octobre 2008 à 19 h 33
Chouette billet. J'espère que tu nous fera l'honneur d'en faire encore plein dans le même style.
par un Anonyme
Jeudi 16 octobre 2008 à 20 h 02
comme je l'ai dis dans le billet précédent, je bosse en parallèle sur tout un pipe de NPR qui commence à etre sympa (pas inedit mais original)
Jeudi 16 octobre 2008 à 21 h 48
Comme tu évoques les spherical harmonics, j'en profite pour demander si quelqu'un veut bien m'en expliquer dans les grandes lignes le principe et la mise en oeuvre ?

J'ai lu que cette technique était déjà employée pour le temps réel, est-il envisageable de l'appliquer dès à présent à l'intégralité d'une scène de jeu vidéo, ou c'est trop demander à une bécane lambda ?
Vendredi 17 octobre 2008 à 10 h 06
c'est possible, mais à moins d'avoir un seul perso sans ia.. A la limite pour des cinematiques (en plus tu peux precalculer des tas de trucs), mais je vois mal les devs mettre des efforts en plus que pour les cinématiques alors qu'il suffit de faire de la vraie 3D non temps réel pour plus simple :)

pour le principe du truc, j'y reviendrais suremment dans quelques billets
Tout le monde peut publier un commentaire, vous n'avez pas besoin de compte (dans ce cas votre commentaire ne sera publié qu'une fois validé par le propriétaire du blog)

Commenter

Tags autorisés : [b] [/b], [i] [/i], [u] [/u], [code] [/code], [img]Adresse d'une image[/img], [url=Adresse d'un site web] [/url]
Vous pouvez aligner vos images à droite ou à gauche en modifiant le tag [img] comme ceci : [img right] ou [img left].

Pour vos vidéos/animations flash : [video]Adresse d'une animation[/video], pour préciser la largeur et hauteur : [video width=100 height=200]...[/video]