Équations PRT (Direct3D 9)

Pour comprendre pleinement un nuanceur qui implémente PRT, il est utile de dériver la formule que le nuanceur utilise pour calculer le radiance de sortie.

Pour commencer, l’équation suivante est l’équation générale pour calculer le rayonnement de sortie résultant de l’éclairage direct sur un objet diffuse avec un éclairage distant arbitraire.

equation of the exit radiance resulting from direct lighting on a diffuse object with arbitrary distant lighting

où :

Paramètre Description
Rp Rayon de sortie au sommet p. Évalué à chaque sommet du maillage.
pd Albedo de la surface.
pi Constante, utilisée comme facteur de normalisation de la conservation de l’énergie.
L(s) L’environnement d’éclairage (radiance source).
Vp₍s₎ Fonction de visibilité binaire pour point p. C’est 1 si le point peut voir la lumière, 0 si ce n’est pas le cas.
Hnp₍s₎ Le terme cosinus de la loi de Lambert. Égal à max(np· s), 0) où Np est la surface normale au point p.
s Variable qui s’intègre sur la sphère.

 

À l’aide de fonctions de base sphériques, telles que les harmoniques sphériques, l’équation suivante approximativement l’environnement d’éclairage.

equation of the lighting environment

où :

Paramètre Description
L(s) L’environnement d’éclairage (radiance source).
i Entier qui somme sur le nombre de fonctions de base.
O Ordre des harmoniques sphériques.
li Coefficient.
Yi(s) Une fonction de base sur la sphère.

 

La collection de ces coefficients, L', fournit l’approximation optimale pour la fonction L(s) avec les fonctions de base Y(s). La substitution et la distribution donnent l’équation suivante.

equation of the exit radiance after substituting l(s) and distributing

L’intégrale de Yi(s)Vp₍s₎Hnp₍s₎ est un coefficient de transfert tpi que le simulateur précompute pour chaque sommet sur le maillage. La substitution de ce résultat génère l’équation suivante.

equation of the exit radiance after substituting the transfer coefficient

La modification de cette notation en notation vectorielle génère l’équation non compressée suivante pour calculer le rayonnement de sortie pour chaque canal.

equation of the exit radiance after changing to vector notation

où :

Paramètre Description
Rp Rayon de sortie au sommet p.
pd Albedo de la surface.
L' Vecteur de li, et est la projection de la radiance source dans les fonctions de base harmonique sphériques. Il s’agit d’un vecteur order² de coefficients harmoniques sphériques.
Tp Vecteur de transfert order² pour vertex p. Le simulateur divise les coefficients de transfert par p.

 

Ces deux vecteurs sont un vecteur order² de coefficients harmoniques sphériques, de sorte qu’il s’agit simplement d’un produit point. Selon l’ordre, le point peut être coûteux afin que la compression puisse être utilisée. Un algorithme appelé Analyse du composant principal cluster (CPCA) compresse efficacement les données. Cela permet l’utilisation d’une approximation harmonique sphérique de l’ordre supérieur qui entraîne des ombres plus nettes.

CPCA fournit l’équation suivante pour approximativement le vecteur de transfert.

equation of the approximated transfer vector

où :

Paramètre Description
Tp Vecteur de transfert pour vertex p.
Mk Moyenne du cluster k.
j Entier qui correspond au nombre de vecteurs PCA.
N Nombre de vecteurs PCA.
wpj Poids pcA jth pour point p.
Bkj Vecteur de base PCA jth pour le cluster k.

 

Un cluster est simplement un certain nombre de sommets qui partagent le même vecteur moyen. Comment obtenir la moyenne du cluster, les poids PCA, les vecteurs de base PCA et les ID de cluster pour les sommets sont abordés ci-dessous.

La substitution de ces deux équations génère :

equation of the exit radiance after substituting the transfer vector

Ensuite, la distribution du produit point génère l’équation suivante.

equation of the exit radiance after distributing the dot product

Parce que les deux (Mk· L') et (Bkj· L') est constant par vertex, l’exemple calcule ces valeurs avec le processeur et les transmet comme constantes dans le nuanceur de vertex; étant donné que wpj change pour chaque vertex, l’exemple stocke ces données par vertex dans la mémoire tampon de vertex.

Transfert de radiance précomputé