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

Naissance d'un shader - Méthode de debugage

Lundi 20 octobre 2008 à 18 h 28
Petite parenthese concernant le debug, pour Darkstryder :

Il y a des petits trucs qui permettent d'évaluer tout les cas possibles en un minimum de rendu/temps.

pour une image donnée, disons que les pixels vont de 0 à 1 de gauche à droite et de bas en haut.
On a donc (0,0) en haut à gauche et (1,1) en bas à droite.

Il est possible de mapper des parametres sur un plan, qui vont varier à chaque pixel (selon les coordonnées que je viens d'expliquer)




Dans cet exemple, en Y nous faisons varier l'angle phi (le rapport entre la light et la tangente du poil) et X theta_r (l'angle de reflection).

En résumé : on tourne virtuellement la camera et la lampe autour du poil.

en rouge nous avons l'energie de la reflection (R), en vert de la transmission (TT) et en bleu le subscatter (TRT).

Ca nous permet de comparer facilement nos resultats avec ce genre de graphs dispos dans le papier (et qui sont aussi obtenus en faisant tourner de trucs autour d'autres trucs)



Pour la prochaine étape, je posterais un quicktime où l'ont fait varier deux paramètres en X et Y et un 3ème dans le temps, ce qui nous donne tout les resultats possibles dans toutes les conditions possibles.
Lundi 20 octobre 2008 à 19 h 04
Tu l'as un peu modifiée avant de poster une table de lookup à qui n'en veut ? Tu sais que ça vaut des sous ça ? :)

Par contre, là ta table de lookup et les graphs extraits du paper ne sont pas dans la même base, vu que ceux du papers utilisent des coordonnées angulaires.

C'est si facile que ça de comparer deux graphes formulés dans des bases aussi différentes ? Ou alors c'est juste que j'ai pas les mains dans ce cambouis là donc j'ai une fausse impression de difficulté ?

Et bien que cette méthode soit très pratique pour de la 2D, plus chiante mais encore possible de la 3D (comme tu l'as dis, avec une vidéo), j'ai pas connaissance d'une façon de la transporter proprement dans des dimensions supérieurs ( caméra mouvante + écoulement du temps pour de la 4D ? mouais).

Un autre point, les maths des cheveux sont complexes, mais sont documentées... Il y a donc possibilité de comparer ses résultats à un modèle. Tous les problèmes mathématiques existants n'ont pas forcémment de graphe 2D ou 3D disponible pour le plaisir de la comparaison.

On se retrouve à un cas assez général de la méthodologie des tests en fait : on a besoin d'un point de comparaison fiable ( c'est à dire ou bien créé par quelqu'un d'autre en qui on a "confiance", ou bien un exemple fait et vérifié et revérifié à la main par de multiples personnes ( et encore, ça suffit pas toujours) ).
Lundi 20 octobre 2008 à 20 h 29
sauf qu'avec ces tables là, le mec ira pas très loin : il y a une erreur de calcul dedans :)

Apres tu peux tester avec des variables fixées si t'en a plus que 3.. Pas tres dur à lire : tu "lis" vers quel angle lumiere/tangente tu as tel intensité et tu compares au graph. Les données sont representées autrement mais meme moi qui suis pas un grand matheux j'arrive à décoder (evidemment c'est plus simple quand on l'a fait soi meme).

S'il n'y a pas de doc qui décrit tout les cas et les maths correctes, c'est plus un travail de physicien/mathematicien que d'infographiste :) On fait qu'appliquer "betement" des formules déjà trouvées.
par divide
Lundi 20 octobre 2008 à 20 h 47
Je plussoie complètement ta méthode de débuggage, puisque c'est malheureusement la seule qui existe pour débugger des shaders. Et quand les variables ne peuvent pas être mappés intelligiblement en couleurs, obligation de rajouter des tests (if variable>valeur attendu, afficher une couleur rouge/bleu/vert...). Ya pas de break ou de tests pas à pas possibles :/
Mais l'avantage des shaders gpu, c'est que tu as zero temps d'attente pour voir le résultat...
Tu fais des shaders pour quel moteur au fait, Ze_PilOt ? Mental Ray ?
Lundi 20 octobre 2008 à 21 h 01
j'en ai fais pour mental ray mais là je suis sur renderman. compiler/rendre prend 2 sec entre chaque test, c'est pas du temps réel mais c'est largement gérable :)
Lundi 20 octobre 2008 à 21 h 26
Ah les shaders GPU...

Microsoft intégrait un débugger de shader dans Visual Studio 2003, et qui marchait plutôt pas mal du tout. Certes ça impliquait de passer le rendu en software et 2-3 trucs du genre, mais j'avais trouvé ça bien géré et ça m'avait sorti plus d'une fois de problèmes en apparence mystique.

Puis Microsoft a sorti PIX, et a *retiré* le debugger de shader de VS 2005 pour ne pas faire d'ombre à PIX. Pourtant, PIX en lui même n'est pas un debugger, et propose d'autres services non-équivalent.

Pendant une période, j'ai tenté d'avoir simultanément une version 2003 et 2005 de mes projets pour conserver le debugger, mais au bout d'un moment ça devient lourd...

En tout cas, une autre alternative est CUDA : il est possible de débugger des kernels cuda via le debugger de Visual Studio ( j'étais soufflé : ça marche vraiment comme si c'était du code C++, simplement en mode debug il les exécute logiciellement). Le truc c'est qu'adopter CUDA c'est dire au revoir à ATI, et qu'il manque encore 2-3 trucs pour que CUDA remplace totalement la pipeline graphique ( par exemple pour rasterizer des triangles en pixels, faut le faire soi même, ce qui est pas le plus top du top).

M'enfin je confirme ce que dit Divide, en l'état j'ai pas mieux que ces foutus tests "si problème, afficher du bleu", etc.. C'est vraiment l'âge de pierre.

Ze_Pilot, pour ce que tu dit à propos des physiciens / mathématiciens, je ne confirme qu'à moitié : c'est vrai si tu cherches à implémenter les vraies équations qui modélisent la physique. Par contre, dés que tu tape dans le code "artistique" ( comme celui que tu utilisais jusqu'à maintenant pour tes cheveux), plus ou moins inconsciemment tu pars d'un modèle que tu as en tête, tu le formalises bien qu'il n'ai aucune base physique, et tu le codes.

Ces modèles sont souvent bien plus simples que leurs versions physiquement exacte, mais tu peux arriver à des trucs assez complexes malgré tout, tout en restant dans le non-physiquement correct. Dans ces cas là t'es un peu seul là où personne ne t'entends crier...
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]