Choix de la réflexion ou de la réfraction dans le tracé de trajectoire

14

J'essaie d'implémenter la réfraction et la transmission dans mon traceur de trajectoire et je ne suis pas sûr de savoir comment l'implémenter. Tout d'abord, quelques informations:

Lorsque la lumière frappe une surface, une partie de celle-ci se réfléchit et une partie est réfractée: entrez la description de l'image ici

La quantité de lumière réfléchie par rapport aux réfractés est donnée par les équations de Fresnel entrez la description de l'image ici

Dans un traceur récursif, la mise en œuvre simple serait de tirer un rayon pour la réflexion et un rayon pour la réfraction, puis de faire une somme pondérée à l'aide du Fresnel.

R=Fresnel()T=1-RLo=RLi, réflexion+TLi, réfraction

Cependant, dans le traçage de chemin, nous ne choisissons qu'un seul chemin. Voici ma question:

  • Comment choisir de réfléchir ou de réfracter de manière non biaisée

Ma première supposition serait de choisir au hasard en fonction du Fresnel. Alias:

float p = randf();
float fresnel = Fresnel();
if (p <= fresnel) {
    // Reflect
} else {
    // Refract
}

Serait-ce correct? Ou dois-je avoir une sorte de facteur de correction? Puisque je ne prends pas les deux chemins.

RichieSams
la source
roulette russe
v.oddou

Réponses:

6

TL; DR

Oui, vous pouvez le faire comme ça, il suffit de diviser le résultat par la probabilité de choisir la direction.

Réponse complète

Le sujet de l'échantillonnage dans les traceurs de chemin permettant des matériaux avec réflexion et réfraction est en fait un peu plus complexe.

Commençons par quelques antécédents. Si vous autorisez les BSDF - et pas seulement les BRDF - dans votre traceur de chemin, vous devez vous intégrer sur toute la sphère au lieu de l'hémisphère positif. Les échantillons de Monte Carlo peuvent être générés par différentes stratégies: pour l'éclairage direct, vous pouvez utiliser BSDF et l'échantillonnage de lumière, pour l'éclairage indirect, la seule stratégie significative est généralement l'échantillonnage BSDF. Les stratégies d'échantillonnage elles-mêmes contiennent généralement la décision concernant l'hémisphère à échantillonner (par exemple, si la réflexion ou la réfraction est calculée).

Dans la version la plus simple, l'échantillonnage de la lumière ne se soucie généralement pas beaucoup de la réflexion ou de la réfraction. Il échantillonne les sources de lumière ou la carte de l'environnement (le cas échéant) en ce qui concerne les propriétés de la lumière. Vous pouvez améliorer l'échantillonnage des cartes d'environnement en sélectionnant uniquement l'hémisphère dans lequel le matériau a une contribution non nulle, mais le reste des propriétés du matériau est généralement ignoré. Notez que pour un matériau Fresnel parfaitement lisse, l'échantillonnage de la lumière ne fonctionne pas.

Pour l'échantillonnage BSDF, la situation est beaucoup plus intéressante. Le cas que vous avez décrit concerne une surface de Fresnel idéale, où il n'y a que deux directions contributives (puisque Fresnel BSDF n'est en fait qu'une somme de deux fonctions delta). Vous pouvez facilement diviser l'intégrale en une somme de deux parties - une réflexion et une pour la réfraction. Comme, comme vous l'avez mentionné, nous ne voulons pas aller dans les deux sens dans un traceur de chemin, nous devons en choisir un. Cela signifie que nous voulons estimer la somme des nombres en choisissant un seul d'entre eux. Cela peut être fait par une estimation de Monte Carlo discrète: choisissez l'un des additifs au hasard et divisez-le par la probabilité qu'il soit sélectionné. Dans un cas idéal, vous voulez que la probabilité d'échantillonnage soit proportionnelle aux addends, mais comme nous ne connaissons pas leurs valeurs (nous n'aurions pas à estimer la somme si nous les connaissions), nous les estimons simplement en négligeant certains facteurs. Dans ce cas, nous ignorons la quantité de lumière entrante et utilisons uniquement la réflectance / transmittance de Fresnel comme estimations.

La routine d'échantillonnage BSDF pour le cas d'une surface de Fresnel lisse consiste donc à choisir une des directions au hasard avec une probabilité proportionnelle à la réflectance de Fresnel et, à un certain point, à diviser le résultat pour cette direction par la probabilité de choisir la direction. L'estimateur ressemblera à:

Lje(ωje)F(θje)P(ωje)=Lje(ωje)F(θje)F(θje)=Lje(ωje)

ωje=(ϕje,θje)Lje(ωje)F(θje)P(ωje)F(θje)

Dans le cas de modèles BSDF plus sophistiqués comme ceux basés sur la théorie des microfacets, l'échantillonnage est légèrement plus complexe, mais l'idée de diviser l'intégrale entière en une somme finie de sous-intégrales et d'utiliser ensuite Monte Carlo discret peut généralement être appliquée aussi.

ivokabel
la source
1
C'est intéressant mais je suis confus par un point. Pourriez-vous clarifier ce que signifie «diviser le résultat pour cette direction par la probabilité de choisir la direction»? S'il ne s'agit pas d'un choix binaire mais d'une direction choisie dans une distribution continue, la probabilité ne sera-t-elle pas nulle?
trichoplax
1
@trichoplax: Oui, mais dans ce paragraphe, je décrivais la technique d'échantillonnage juste pour un Fresnel BSDF (diélectrique) - une surface idéalement lisse, qui est une somme de deux fonctions delta de Dirac. Dans ce cas, vous choisissez l'une des directions avec une probabilité discrète. Dans le cas d'un BSDF non-delta (fini), vous générez des directions selon une fonction de densité de probabilité. Malheureusement, les cas delta et non delta doivent être traités séparément, ce qui rend le code un peu compliqué. Plus de détails sur l'échantillonnage des BSDF microfacet peuvent être trouvés, par exemple dans Walter et. Al. [2007] papier.
ivokabel
2
@RichieSams: Walter et. Al. [2007] est fondamentalement toujours à la pointe de la technologie pour les surfaces rugueuses diélectriques, mais pour que cela fonctionne bien, vous avez besoin d'un bon échantillonnage qui a été publié récemment par Heitz et D'Eon dans le document de 2014 "Importance Sampling Microfacet-Based BSDFs utilisant la distribution des normales visibles ". Et notez qu'il s'agit d'un modèle à diffusion unique qui néglige les inter-réflexions entre les microfacets, ce qui le rend visiblement sombre pour des valeurs de rugosité plus élevées. Voir ma question "Compensation de la perte d'énergie dans les modèles BSDF à microfacettes à diffusion unique" pour plus de détails.
ivokabel
5
Je voulais juste souligner que si vous choisissez probabilité = fresnel () comme la question le suggérait, alors lorsque vous divisez par la probabilité, vous annulez le facteur de Fresnel qui serait normalement multiplié. Donc (dans le cas discret à deux Dirac ) vous vous retrouvez avec la contribution des rayons sans aucun facteur de Fresnel. C'est la théorie standard de l'échantillonnage d'importance, mais j'ai pensé que je soulignerais cela comme un problème potentiellement déroutant.
Nathan Reed
2
@Nathan, j'ai incorporé votre avis dans la réponse.
ivokabel