J'essaie actuellement d'implémenter un traceur de chemin Monte Carlo. J'ai fait quelques recherches et il semble qu'une approche commune des matériaux consiste à utiliser un modèle en couches. Quelque chose comme ça:
Lorsque la lumière frappe la surface, Fresnel nous indique quelle part de cette lumière est réfléchie par la première couche et combien va à la seconde, etc.
J'ai donc fait quelque chose de similaire, mais plus simple: une seule couche de spéculaire et une couche de diffus. Pas encore de transmission. Jusqu'ici tout va bien, j'utilise un simple brdf pondéré en cosinus pour mon diffus et le modèle microfacetté Cook-Torrance pour mon spéculaire.
Maintenant vient la partie difficile: que dois-je faire une fois qu'un rayon frappe la surface? Normalement, je choisissais le brdf correspondant au matériau de surface, échantillonnais une direction de lumière incidente, évaluais le brdf et divisais par la bonne fonction de distribution de probabilité.
Mais ici, un coup de surface correspond effectivement à plusieurs matériaux. La façon naïve de gérer cela serait d'échantillonner une fois pour chaque couche touchée. Mais cela est clairement la source d'un énorme impact sur les performances, ce qui fait que mon chemin devient effectivement un arbre.
Y a-t-il une meilleure solution?
la source
Réponses:
Wenzel Jakob et al ont présenté un cadre pour les matériaux en couches au SIGGRAPH 2014. La section 6.2 explique l'importance de l'échantillonnage. Si vous préférez le code aux équations, la méthode est implémentée dans le rendu Mitsuba .
la source