Naissance d'un shader - étape 4 : Ca marche pas ! + Ca marche !
Mercredi 22 octobre 2008 à 15 h 09
Plus on teste un shader, plus on est à l'aide avec ses paramètres et son fonctionnement interne.
On sait à l'avance ce qu'on doit avoir comme résultat, et on sait plus ou moins d'où vient l'erreur..
Apres avoir adapté quasiment à la perfection les maths du papier de Marschner, nous nous sommes retrouvés avec des resultats bien, mais pas comme ceux à quoi on s'attendait. Ca se joue à pas grand chose : trop peu de subs, de la refraction là où il faut pas,...
Après des tonnes de vérifs, on est arrivé à la conclusion que le Marschner, il s'était gouré en recopiant ses notes. Deux (grosses) erreurs, que je vais donner ici pour éviter l'arrachage de cheveux aux codeurs qui tomberont sur ce blog en cherchant le code de ce type de shader :
- Problème lors du calcul du fresnel
Qui determine si un rayon est renvoyé ou tranmis dans le poil, et en quelle quantité.
- Problème lors du calcul de l'absorption :
Le calcul de la longueur du trajet dans le poil est incorrecte.
Une fois ces calculs corrigés, nous voilà avec un prototype fonctionnel. Petit rajout d'une composante de diffusion - pour simuler la lumiere qui rebondit entre les poils, ou celle qui traverse un poil pour en eclairer un autre - Et voilà !
Une nouvelle série de verification, et pret pour l'étape 5, décrite à l'étape 1 : "baker" tout les chemins possibles dans une lookup table afin d'accélerer le rendu !
On sait à l'avance ce qu'on doit avoir comme résultat, et on sait plus ou moins d'où vient l'erreur..
Apres avoir adapté quasiment à la perfection les maths du papier de Marschner, nous nous sommes retrouvés avec des resultats bien, mais pas comme ceux à quoi on s'attendait. Ca se joue à pas grand chose : trop peu de subs, de la refraction là où il faut pas,...
Après des tonnes de vérifs, on est arrivé à la conclusion que le Marschner, il s'était gouré en recopiant ses notes. Deux (grosses) erreurs, que je vais donner ici pour éviter l'arrachage de cheveux aux codeurs qui tomberont sur ce blog en cherchant le code de ce type de shader :
- Problème lors du calcul du fresnel
Qui determine si un rayon est renvoyé ou tranmis dans le poil, et en quelle quantité.
- Problème lors du calcul de l'absorption :
Le calcul de la longueur du trajet dans le poil est incorrecte.
Une fois ces calculs corrigés, nous voilà avec un prototype fonctionnel. Petit rajout d'une composante de diffusion - pour simuler la lumiere qui rebondit entre les poils, ou celle qui traverse un poil pour en eclairer un autre - Et voilà !
Une nouvelle série de verification, et pret pour l'étape 5, décrite à l'étape 1 : "baker" tout les chemins possibles dans une lookup table afin d'accélerer le rendu !
Il n'y a aucun commentaire sur cet article.