2016-10-26 4 views
2

J'ai un petit chemin traceur, et j'essaie de comprendre comment implémenter quelques BRDF de base. Voici une brève description du pipeline que j'utilise (sans récursivité):Comment la BRDF est-elle habituellement implémentée?

1) For each pixel: 
    1.1) For each sample: 
     1.1.1) I construct a path. 
     1.1.2) I calculate the contribution of this path. 
     1.1.3) I calculate the "probability" of this path. 
     1.1.4) Finally, I calculate the overall color value(taking into account number of samples, "probability" and contribution of the path). 
    1.2) Take the sum of all samples' values and write it to the pixel. 

Alors, je calcule la direction des rayons réfléchis dans l'étape 1.1.1) I construct a path.

Pour l'instant, j'ai mis en œuvre une réflexion diffuse, réflexion spéculaire, reflet brillant, réfraction. Maintenant, je veux mettre en œuvre une BRDF complexe, disons Cook-Torrance BRDF. Je vois qu'il contient plusieurs composants (réflexion diffuse et réflexion spéculaire). Comment devrais-je tracer ces rayons pour obtenir la combinaison? Dois-je choisir entre diffuse_ray/specular_ray de manière aléatoire et ensuite accumuler les valeurs (multipliées par certains coefficients) comme d'habitude? (Comme si une valeur aléatoire est supérieure à 0.5 alors je trace un rayon diffus, sinon - spéculaire) Ou devrais-je tracer plusieurs rayons? de chaque intersection?

Comment est-il habituellement mis en œuvre dans les équarrisseurs à base physique?

P.S. Si quelqu'un connaît de bons articles sur ce sujet, je serais heureux de les voir. J'ai essayé de lire pbrt mais cela semble très complexe et énorme pour moi. Et certaines choses sont implémentées différemment, comme le modèle d'appareil photo et d'autres choses.

+0

dans mon traceur stochastique je fraient des rayons séparés pour spéculaires et réflexion diffuse, mais la méthode que vous trouverez ci-dessus maintient l'arbre des rayons plus petits et devrait réduire la complexité de calcul. J'ai envisagé d'utiliser cette méthode mais je ne pouvais pas comprendre comment avoir des coefficients aléatoires de "couleur" pour que la répartition entre diffuse et spéculaire puisse varier en fonction de la couleur de surface (comme je crois que cela se produit avec les matériaux plastiques) – Alnitak

Répondre

1

Une première étape pourrait être de laisser votre BRDF décider comment le rayon devrait rebondir. Si c'est une combinaison de plusieurs méthodes, assignez une probabilité dans la BRDF à chaque méthode, puis demandez à la BRDF d'en choisir une en fonction des probabilités données.

Par exemple, supposons que vous voulez un BRDF qui est une combinaison de spéculaires et réflexion diffuse. Lorsque vous instanciez le BRDF, vous pouvez lui indiquer que vous voulez 60% spéculaire et 40% diffus. Ensuite, lorsque votre traqueur de trajectoire interroge la BRDF pour obtenir la direction du rayon réfléchi, la BRDF peut calculer intérieurement un rayon spéculaire 60% du temps et un rayon diffus 40% du temps.

EDIT - une autre approche peut-être plus précis serait d'avoir la BRDF utiliser les probabilités fournies pour générer une direction réfléchie par interpolation entre les deux méthodes. Dans notre exemple ci-dessus, interrogée, la BRDF calcule un rayon spéculaire et un rayon diffus pour chaque intersection, et renvoie un nouveau rayon dont la direction est une interpolation linéaire de 60% du rayon spéculaire calculé et de 40% du rayon diffus calculé.