Comment les effets volumétriques tels que la fumée, le brouillard ou les nuages sont-ils rendus par un raytracer? Contrairement aux objets solides, ceux-ci n'ont pas de surface bien définie pour calculer une intersection avec.
la source
Comment les effets volumétriques tels que la fumée, le brouillard ou les nuages sont-ils rendus par un raytracer? Contrairement aux objets solides, ceux-ci n'ont pas de surface bien définie pour calculer une intersection avec.
L'apparition de volumes (également appelés milieux participants) dans la nature est causée par de minuscules particules, telles que la poussière, les gouttelettes d'eau ou le plancton, qui sont en suspension dans le fluide environnant, comme l'air ou l'eau. Ces particules sont des objets solides et la lumière se réfracte ou se reflète sur ces objets comme elle le ferait sur une surface normale. En théorie, les médias participants pourraient donc être manipulés par un traceur de rayons traditionnel avec uniquement des intersections de surface.
Bien sûr, le grand nombre de ces particules ne permet pas de les retracer individuellement. Au lieu de cela, ils sont approximés par un modèle statistique: comme les particules sont très petites et que la distance entre les particules est beaucoup plus grande que la taille des particules, les interactions individuelles de la lumière avec les particules peuvent être modélisées comme statistiquement indépendantes. Par conséquent, c'est une approximation raisonnable de remplacer les particules individuelles par des quantités continues qui décrivent l'interaction "moyenne" lumière-particule à cette certaine région de l'espace.
Pour le transport de lumière volumétrique basé sur la physique, nous remplaçons le nombre inconcevable de particules par un milieu participant continu qui a deux propriétés: le coefficient d'absorption et le coefficient de diffusion. Ces coefficients sont très pratiques pour le tracé de rayons, car ils nous permettent de calculer la probabilité qu'un rayon interagisse avec le milieu - c'est-à-dire la probabilité de frapper l'une des particules - en fonction de la distance.
Le coefficient d'absorption est noté . Supposons qu'un rayon de lumière veuille parcourir mètres à l'intérieur du milieu participant; la probabilité de passer à travers non absorbé - c'est-à-dire de ne pas heurter une des particules et d'être absorbé par elle - est '. Lorsque t augmente, nous pouvons voir que cette probabilité va à zéro, c'est-à-dire que plus nous voyageons à travers le médium, plus il est probable qu'il frappe quelque chose et soit absorbé. Des choses très similaires sont valables pour le coefficient de diffusion : la probabilité que le rayon ne frappe pas une particule et soit diffusé est t e - t ⋅ σ ae - t ⋅ σ s; c'est-à-dire que plus nous voyageons à travers un médium, plus il est probable que nous heurtions une particule et que nous soyons dispersés dans une direction différente.
Habituellement, ces deux quantités sont repliées en un seul coefficient d'extinction, . La probabilité de parcourir mètres à travers un milieu sans interagir avec lui (ni absorbé ni diffusé) est alors . En revanche, la probabilité d'interagir avec un milieu après mètres est . t e - t ⋅ σ t1 - e - t ⋅ σ t
La façon dont cela est utilisé dans les rendus à base physique est la suivante: Lorsqu'un rayon pénètre dans un milieu, nous l'arrêtons probablement à l'intérieur du milieu et le faisons interagir avec une particule. L'importance de l'échantillonnage de la probabilité d'interaction donne une distance ; cela nous indique que le rayon a parcouru mètres dans le milieu avant de frapper une particule, et maintenant une des deux choses se produit: soit le rayon est absorbé par la particule (avec probabilité ), soit est dispersé (avec probabilité ). tt σ a σs
La manière dont le rayon est diffusé est décrite par la fonction de phase et dépend de la nature des particules; la fonction de phase de Rayleigh décrit la diffusion de particules sphériques plus petites que la longueur d'onde de la lumière (par exemple notre atmosphère); la fonction de phase de Mie décrit la diffusion de particules sphériques de taille similaire à la longueur d'onde (par exemple, des gouttelettes d'eau); dans les graphiques, la fonction de phase de Henyey-Greenstein est généralement utilisée, appliquée à l'origine à la diffusion de la poussière interstellaire.
Maintenant, dans les graphiques, nous ne rendons pas normalement les images d'un support infini, mais rendons également les médias à l'intérieur d'une scène composée de surfaces dures. Dans ce cas, nous suivons d'abord entièrement le rayon jusqu'à ce qu'il touche la surface suivante, ignorant complètement le milieu participant; cela nous donne la distance à la surface suivante, . Nous échantillonnons ensuite une distance d'interaction dans le milieu comme décrit précédemment. Si , le rayon a frappé une particule sur le chemin de la surface suivante et nous l'avons absorbée ou dispersée. Si , le rayon est passé indemne et interagit avec la surface comme d'habitude. t t < t M a x t ≥ t M a x
Ce message n'était qu'une petite introduction au rendu avec les médias participants; entre autres, j'ai complètement ignoré les coefficients variant spatialement (dont vous avez besoin pour les nuages, la fumée, etc.). Les notes de Steve Marschner sont une bonne ressource, si vous êtes intéressé. En général, les médias participants sont très difficiles à restituer efficacement, et vous pouvez aller beaucoup plus sophistiqué que ce que j'ai décrit ici; il y a la cartographie photonique volumétrique , les faisceaux de photons , les approximations de diffusion , l' échantillonnage d'importance conjointe et plus encore. Il y a aussi un travail intéressant sur les médias granulaires qui décrit ce qu'il faut faire lorsque le modèle statistique tombe en panne, c'est-à-dire que les interactions des particules ne sont plus statistiquement indépendantes.
Une façon de le faire - qui n'est pas exactement la solution "aller à", mais qui fonctionne bien, est de trouver la distance parcourue par le rayon dans le volume et d'utiliser l'intégration d'une fonction de densité pour calculer la quantité de "substance". frappé.
Voici un lien avec un exemple d'implémentation: http://blog.demofox.org/2014/06/22/analytic-fog-density/
Dépend du volume effectif.
Les effets de volume uniformes qui n'appartiennent pas à la diffusion peuvent être simulés en calculant simplement les distances d'entrée et de sortie des rayons.
Sinon, vous devez procéder à l'intégration du trajet des rayons, également appelé marche des rayons. Pour éviter d'avoir à tirer des rayons secondaires, le raymarching est souvent associé à une sorte de cache, comme une carte de profondeur, des cartes profondes, des cartes de briques ou des nuages de voxels pour l'ombrage de la lumière, etc. De cette façon, vous n'avez pas nécessairement besoin de parcourir toute la scène. Une mise en cache similaire est souvent effectuée pour la texture procédurale du volume.
Il est également possible de convertir la texture en des primitives de surface telles que des boîtes, des sphères ou des plans qui ont une texture à bords doux appropriée. Vous pouvez ensuite utiliser des techniques de rendu normales pour résoudre l'effet volumétrique. Le problème est que vous avez généralement besoin de beaucoup de primitives. De plus, la forme de la primitive peut apparaître comme un échantillonnage trop uniforme.