commit e03cc1f8c1a47981bc00ecadcaf6f60ea2174d70
parent 3d1d54bf29abcf7cc345bd0f189084714d3aa9af
Author: Lapeyre Paule <paule.lapeyre@yahoo.fr>
Date: Wed, 22 Feb 2023 12:51:58 -0500
Modifie le nom des variables dans tout le document
La modification des variables a été faite de manière globale avec vim,
il faudra vérifier la cohérence lors de la prochaine génération du pdf.
Plus une rectification dans la partie condition à la limite de
sensibilité qui ajoute l'idée de la réflection spéculaire de la
sensibilité et du fait qu'il n'y ait pas de sensibilité incidente.
Diffstat:
1 file changed, 98 insertions(+), 91 deletions(-)
diff --git a/src/sgs_compute_sensitivity_translation.nw b/src/sgs_compute_sensitivity_translation.nw
@@ -260,12 +260,25 @@ Dans \citep{papier_sensib} la condition à la limite de la sensibilité
géométrique est donnée en toute généralité puis dans les cas spécifiques des
parois noires, parois spéculaires et parois diffuses. Ici, seule la paroi haute
du cube paramétrée par $\PI$, elle est donc la seule source de sensibilité
-géométrique. Étant spéculaire, la condition à la limite de sensibilité del a
-paroi du haut prend la forme suivante (voir annexe \ref{ann:cl_sensib} pour les
-développements qui mènent à cette expression):
+géométrique:
\begin{equation}
\begin{aligned}
-s(\vec{x},\vec{\omega},\PI) = & - \beta_{\vec{\chi},h} [\partial_{1,\vec{u}_h} \
+s(\vec{x},\vec{\omega},\PI) & = 0 \quad \quad \quad \vec{x} \notin A_h \\
+s(\vec{x},\vec{\omega},\PI) & = S_{b,\PI} + \rho(\vec{x},-\vec{\omega})
+s(\vec{x},\vec{\omega}_{spec},\PI) \quad \quad \quad \vec{x} \in A_h \\
+\end{aligned}
+\end{equation}
+avec $S_{b,\PI}$ la source de sensibilité et $\rho(\vec{x},-\vec{\omega})
+s(\vec{x},\vec{\omega}_{spec},\PI)$ la réflection de la sensibilité incidente à
+la paroi dans la direction spéculaire. Dans notre example, le milieu étant
+transparant et toutes les autres conditions aux limites de snesibilité étant
+nulles, il n'y a pas de sensibilité incidente à la paroi.
+La paroi du haut étant spéculaire, la source de sensibilité $S_{b,\PI}$ prend
+la forme suivante (voir annexe \ref{ann:cl_sensib} pour les développements qui
+mènent à cette expression):
+\begin{equation}
+\begin{aligned}
+S_{b,\PI} = & - \beta_{\vec{\chi},h} [\partial_{1,\vec{u}_h} \
\rho(\vec{x},-\vec{\omega})] L(\vec{x},\vec{\omega}_{spec},\PI) \quad \quad
\quad \quad \quad \vec{x} \in A_h \ ; \ \vec{\omega} \cdot \vec{n}_h > 0\\
& + \rho(\vec{x],-\vec{\omega})
@@ -275,7 +288,8 @@ L(\vec{x},\vec{\omega}_{spec},\PI)
\end{aligned}
\label{eq:clsensib}
\end{equation}
-avec $\beta_{\vec{\chi},h}$ un coefficient issu de la décomposition de
+avec $\vec{\omega}_{spec} = \vec{\omega} - 2 (\vec{\omega} \cdot \vec{n}_h)
+\vec{n}_h$ et $\beta_{\vec{\chi},h}$ un coefficient issu de la décomposition de
$\vec{\chi}$ en deux vecteurs, un orienté par $\vec{\omega}$ et l'autre orienté
par un vecteur tangent à la paroi du haut : $\vec{u}_h$ (voir annexe
\ref{ann:proj}). La projection de $\vec{\chi}$ sur $\vec{u}_h$ est de norme
@@ -285,13 +299,6 @@ $\beta_{\vec{\chi},h}$.
f(\vec{x},\vec{\omega}) = \vec{\gamma} \cdot \vec{\nabla}_{\vec{x}}
f(\vec{x},\vec{\omega})$ est la dérivée directionnelle dans la direction
$\vec{\gamma}$.
-avec $\vec{\omega}_{spec} = \vec{\omega} - 2 (\vec{\omega} \cdot \vec{n}_h)
-\vec{n}_h$
-Les conditions aux limites en sensibilité pour toutes les autres
-parois seront nulles:
-\begin{equation}
-s(\vec{x},\vec{\omega},\PI) = 0 \quad \quad \quad \vec{x} \notin A_h \\
-\end{equation}
\paragraph{La source de sensibilité} Dans ce problème la source de sensibilité
@@ -451,7 +458,7 @@ Dans la variable [[w]] sera renvoys le poids de la sensibilité a $\PI$.
\label{subsec:chemin}
\paragraph{}
-On commence par échantillonner la surface de la source de sensibilité $S_r$
+On commence par échantillonner la surface de la source de sensibilité $A_h$
point de départ de notre chemin de sensibilité complété ensuite par un chemin
de dérivée spatiale dont la combinaison est le chemin du problème couplé.
@@ -464,40 +471,40 @@ de dérivée spatiale dont la combinaison est le chemin du problème couplé.
\paragraph{}
On utilise la fonction [[sgs_geometry_sample_sensibility_source]] pour
échantillonner uniformément un point sur la surface émettrice de sensibilité et
-on stocke dans les variables [[pos_emit_s]] et [[normal_s]] sa position et la
-normale correspondante. On récupère également dans [[surf_emit_s]]
+on stocke dans les variables [[pos_h]] et [[normal_h]] sa position et la
+normale correspondante. On récupère également dans [[surf_A_h]]
l'identifiant de la surface que l'on vient d'échantillonner, dans notre cas la
-surface supérieure $S_r$ identifié dans le code par la constante
+surface supérieure $A_h$ identifié dans le code par la constante
[[SGS_SURFACE_Z_MAX]] (voir figure~\ref{fig:configuration}).
<<échantillonner une position sur la source de sensibilité>>=
/* Sample the sensitivity emissive surface */
sgs_geometry_sample(scene->geom, rng, &frag);
-d3_set(pos_emit_s, frag.position);
-d3_set(normal_s, frag.normal);
-surf_emit_s = frag.surface; /* must be SGS_SURFACE_Z_MAX */
+d3_set(pos_h, frag.position);
+d3_set(normal_h, frag.normal);
+surf_A_h = frag.surface; /* must be SGS_SURFACE_Z_MAX */
@
\paragraph{}
On rappelle que les sources de sensibilité proviennent des paroies perturbées
par une modification du paramètre $\PI$. En toute hypothèse, toute source de
-sensibilité incidente à $S_r$ serait réfléchie spéculairement. Or, dans notre cas,
-nous n'avons qu'une seule source de sensibilité, la surface $S_r$, et par
+sensibilité incidente à $A_h$ serait réfléchie spéculairement. Or, dans notre cas,
+nous n'avons qu'une seule source de sensibilité, la surface $A_h$, et par
conséquent nous n'avons pas à tenir compte de ces sensibilités réfléchies. Ci
après, nous ne construisons donc que le chemin qui propage l'émission de
-sensibilité par $S_r$.
+sensibilité par $A_h$.
\paragraph{} Pour cela, nous commençons par échantilloner une direction
-d'émission lambertienne [[dir_emit_s]] autour de la normale [[normal_s]] de la
-surface $S_r$. Nous lançons alors un chemin dans cette direction jusqu'à
+d'émission lambertienne [[dir_emit_h]] autour de la normale [[normal_h]] de la
+surface $A_h$. Nous lançons alors un chemin dans cette direction jusqu'à
rencontré une intersection avec une géométrie, une intersection stockée dans
la variable [[hit0]].
<<échantillonner un chemin de sensibilité>>=
/* Sample the cosine weighted sampling of the emissive direction */
-ssp_ran_hemisphere_cos(rng, normal_s, dir_emit_s, NULL);
+ssp_ran_hemisphere_cos(rng, normal_h, dir_emit_h, NULL);
/* Trace the sampled ray */
-TRACE_RAY(pos_emit_s, dir_emit_s, surf_emit_s, &hit0);
+TRACE_RAY(pos_h, dir_emit_h, surf_A_h, &hit0);
@
\paragraph{}
@@ -511,16 +518,16 @@ spatiales sont incidentes à la même direction $\vec{\omega}_{spec}$ nous
pouvons nous contanter de ne suivre qu'un seul chemin dans cette direction.
\paragraph{}
-Nous calculons $\vec{\omega}_{spec}$ ([[dir_spec_s]]) par réflexion spéculaire
-de la direction d'émission $\vec{\omega}$ ([[dir_emit_s]]) avant de suivre un
+Nous calculons $\vec{\omega}_{spec}$ ([[dir_spec_h]]) par réflexion spéculaire
+de la direction d'émission $\vec{\omega}$ ([[dir_emit_h]]) avant de suivre un
chemin dans cette direction jusqu'à l'intersection avec une surface stockée
dans [[hit1]].
<<échantillonner un chemin de dérivée spatiale>>=
/* Compute the specular direction */
-reflect(dir_spec_s, dir_emit_s, normal_s);
+reflect(dir_spec_h, dir_emit_h, normal_h);
/* Trace the specular ray */
-TRACE_RAY(pos_emit_s, dir_spec_s, surf_emit_s, &hit1);
+TRACE_RAY(pos_h, dir_spec_h, surf_A_h, &hit1);
@
\subsection{Le poids}
@@ -539,13 +546,13 @@ sensib = 0;
@
<<échantillonner un chemin de sensibilité>>=
-if(!hit_receiver(scene, pos_emit_s, dir_emit_s, &hit0)) {
+if(!hit_receiver(scene, pos_h, dir_emit_h, &hit0)) {
goto exit;
}
@
<<échantillonner un chemin de dérivée spatiale>>=
-if(!hit_source(scene, pos_emit_s, dir_spec_s, &hit1)) {
+if(!hit_source(scene, pos_h, dir_spec_h, &hit1)) {
goto exit;
}
@
@@ -554,14 +561,14 @@ if(!hit_source(scene, pos_emit_s, dir_spec_s, &hit1)) {
En conséquence, dans la suite de la fonction, nous pouvons assumer que nous
n'aurons à calculer le poids que des seuls chemin couplés dont la contribution
est non nulle. [[hit1]] représente donc une intersection sur la source
-radiative. On stocke dans [[normal_e]] la normale de la paroi correspondante
+radiative. On stocke dans [[normal_d]] la normale de la paroi correspondante
dont on aura besoin pour le calcul du poids. De même, on initialise la variable
-[[dir_spec_e]] à $-\vec{\omega}_s$, cette direction nous sera également utile
+[[dir_emit_d]] à $-\vec{\omega}_s$, cette direction nous sera également utile
pour évaluer la source de dérivée spatiale.
<<échantillonner un chemin de dérivée spatiale>>=
-d3_normalize(normal_e, hit1.normal);
-d3_minus(dir_spec_e, dir_spec_s);
+d3_normalize(normal_d, hit1.normal);
+d3_minus(dir_emit_d, dir_spec_h);
@
\paragraph{}
@@ -584,7 +591,7 @@ vecteur tangent $\vec{u}$ nécessaire dans l'expression de la source de
sensibilité et de ses dérivée surfaciques (équation \ref{eq:clsensib}).
<<décomposition du vecteur de déformation $\vec{\chi}$>>=
-decomposition(chi, normal_s, dir_emit_s, &proj_chi_s);
+decomposition(chi, normal_h, dir_emit_h, &proj_chi_h);
@
\paragraph{}
@@ -598,8 +605,8 @@ dérivation $\vec{u}$ transformée dans ce plan ([[u_2d]]).
<<récupérer le gradient surfacique de $\rho$>>
/* Transform u in XY plane */
-u_2d[0] = proj_chi_s.u[X];
-u_2d[1] = proj_chi_s.u[Y];
+u_2d[0] = proj_chi_h.u[X];
+u_2d[1] = proj_chi_h.u[Y];
/* Surface derivative of rho */
d_rho = d2_dot(grad_rho_2d, u_2d);
@@ -607,16 +614,16 @@ d_rho = d2_dot(grad_rho_2d, u_2d);
\paragraph{}
Pour récupérer $\rho$ et son gradient, il suffit de transformer dans le plan la
-position d'émission [[pos_emit_s]], et d'interroger les données associées à la
-position ainsi transformée ([[pos_emit_s_2d]]).
+position d'émission [[pos_h]], et d'interroger les données associées à la
+position ainsi transformée ([[pos_h_2d]]).
<<récupérer le gradient surfacique de $\rho$>>=
-/* Transform pos_emit_s in XY plane */
-pos_emit_s_2d[0] = pos_emit_s[X];
-pos_emit_s_2d[1] = pos_emit_s[Y];
+/* Transform pos_h in XY plane */
+pos_h_2d[0] = pos_h[X];
+pos_h_2d[1] = pos_h[Y];
-rho = get_rho(scene, pos_emit_s_2d);
-get_grad_rho(scene, pos_emit_s_2d, grad_rho_2d);
+rho = get_rho(scene, pos_h_2d);
+get_grad_rho(scene, pos_h_2d, grad_rho_2d);
@
\paragraph{}
@@ -639,7 +646,7 @@ la source de de la dérivée spatiale dans la direction $\vec{\chi}$ et de sa
dérivée surfaciques (équation \ref{eq:cl_dchiL_droite}).
<<décomposition du vecteur $\vec{\chi}$>>=
-decomposition(chi, normal_e, dir_spec_e, &proj_chi_e);
+decomposition(chi, normal_d, dir_emit_d, &proj_chi_d);
@
\paragraph{}
@@ -649,73 +656,73 @@ dérivée spatiale dans la direction $\vec{u}$ et de sa dérivée surfacique
(equation \ref{eq:cl_duL_droite}).
<<décomposition du vecteur $\vec{u}$>>=
-decomposition(proj_chi_s.u, normal_e, dir_spec_e, &proj_u_e);
+decomposition(proj_chi_h.u, normal_d, dir_emit_d, &proj_uh_d);
@
\paragraph{}
-La dérivée surfacique de $S_b$ dans la direction $\vec{u}_{e}$ ([[d_u_e_Sb]])
+La dérivée surfacique de $S_b$ dans la direction $\vec{u}_{e}$ ([[dSb_uhd]])
est le produit scalaire entre le gradient surfacique de $S_b$ et la direction
de dérivation $\vec{u}_{e}$ transformée dans le plan de la paroi de droite
-([[u_e_2d]]). Pour effectuer ce calcul nous devons au préalable récupérer le
+([[u_hd_2d]]). Pour effectuer ce calcul nous devons au préalable récupérer le
gradient de $S_b$ ([[grad_Sb_2d]]). Pour cela il suffit de transformer dans le
-plan de la paroi de droite la position d'émission [[pos_emit_e]], et
+plan de la paroi de droite la position d'émission [[pos_d]], et
d'interroger les données associées à la position ainsi transformée
-([[pos_emit_e_2d]]). Nous en profitons au passage pour récupérer $S_b$ qui
+([[pos_d_2d]]). Nous en profitons au passage pour récupérer $S_b$ qui
nous sera utile pour le calcul du poids. Nous rappelons enfin que dans notre
situation les deux dérivées spatiales $\partial_{\vec{\chi}} I$ et
-$\partial_{\vec{u}} I$ partagent une même position d'émission ([[pos_emit_e]]).
+$\partial_{\vec{u}} I$ partagent une même position d'émission ([[pos_d]]).
<<calcul de la dérivée surfacique de $Sb$ dans la direction $\vec{u}_e$>>=
/* Calculer la position sur l'émetteur */
-pos_emit_e[X] = pos_emit_s[X] + dir_spec_s[X]*hit1.distance;
-pos_emit_e[Y] = pos_emit_s[Y] + dir_spec_s[Y]*hit1.distance;
-pos_emit_e[Z] = pos_emit_s[Z] + dir_spec_s[Z]*hit1.distance;
+pos_d[X] = pos_h[X] + dir_spec_h[X]*hit1.distance;
+pos_d[Y] = pos_h[Y] + dir_spec_h[Y]*hit1.distance;
+pos_d[Z] = pos_h[Z] + dir_spec_h[Z]*hit1.distance;
-/* Transforme pos_emit_e dans le plan YZ */
-pos_emit_e_2d[0] = pos_emit_e[Y];
-pos_emit_e_2d[1] = pos_emit_e[Z];
+/* Transforme pos_d dans le plan YZ */
+pos_d_2d[0] = pos_d[Y];
+pos_d_2d[1] = pos_d[Z];
/* Récupérer le gradient surfacique de Sb */
-Sb = get_Sb(scene, pos_emit_e_2d);
-get_grad_Sb(scene, pos_emit_e_2d, grad_Sb_2d);
+Sb = get_Sb(scene, pos_d_2d);
+get_grad_Sb(scene, pos_d_2d, grad_Sb_2d);
/* Transformer u_e dans le plan YZ */
-u_e_2d[0] = proj_u_e.u[Y];
-u_e_2d[1] = proj_u_e.u[Z];
+u_hd_2d[0] = proj_uh_d.u[Y];
+u_hd_2d[1] = proj_uh_d.u[Z];
/* Dérivée surfacique de Sb dans la direction u_e */
-d_u_e_Sb = d2_dot(grad_Sb_2d, u_e_2d);
+dSb_uhd = d2_dot(grad_Sb_2d, u_hd_2d);
@
\paragraph{}
Il ne reste plus qu'à calculer la dérivée surfacique de $S_b$ dans la direction
-$\vec{u}_{cs}$ ([[d_u_cs_Sb]]) comme étant le produit scalaire entre le
+$\vec{u}_{cs}$ ([[dSb_uchid]]) comme étant le produit scalaire entre le
gradient surfacique de $S_b$ et la direction $\vec{u}_{cs}$ transformée dans le
-plan de la paroi de droite ([[u_cs_2d]]).
+plan de la paroi de droite ([[u_chid_2d]]).
<<calcul de la dérivée surfacique de $Sb$ dans la direction $\vec{u}_{cs}$>>=
/* Transformer u_cs dans le plan YZ */
-u_cs_2d[0] = proj_chi_e.u[Y];
-u_cs_2d[1] = proj_chi_e.u[Z];
+u_chid_2d[0] = proj_chi_d.u[Y];
+u_chid_2d[1] = proj_chi_d.u[Z];
/* Dérivée surfacique de Sb dans la direction u_cs */
-d_u_cs_Sb = d2_dot(grad_Sb_2d, u_cs_2d);
+dSb_uchid = d2_dot(grad_Sb_2d, u_chid_2d);
@
Le poids de sensibilité correspond à la contribution portée par le chemin du
problème couplé, soit les sources de dérivées spatiales propagées jusqu'à la
paroi du haut puis intégrées dans les sources de sensibilité propagées ensuite
vers le récepteur. Cette contribution est ensuite multipliée par la surface
-$S_r$ et l'angle $\pi$ ([[PI]]) étant donné l'échantillonnage des densités de
+$A_h$ et l'angle $\pi$ ([[PI]]) étant donné l'échantillonnage des densités de
probabilités de la position sur la surface et de la direction dans l'hémisphère
sortante de la paroi.
<<calculer le poids de sensibilité>>=
/* Calcul de la contribution du chemin couplé */
Sb_sensib =
- - proj_chi_s.beta * d_rho * Sb
- - rho * proj_chi_s.beta * proj_u_e.beta * d_u_e_Sb
- + rho * proj_chi_e.beta * d_u_cs_Sb;
+ - proj_chi_h.beta * d_rho * Sb
+ - rho * proj_chi_h.beta * proj_uh_d.beta * dSb_uhd
+ + rho * proj_chi_d.beta * dSb_uchid;
/* Poids de sensibilité */
sensib = Sb_sensib * PI * get_Sr(scene);
@@ -759,37 +766,37 @@ la réalisation que nous venons d'écrire:
<<données locales à la fonction de réalisation>>=
/* Variables de la source de sensibilité */
-double dir_emit_s[3];
-double pos_emit_s[3];
-double normal_s[3];
-double dir_spec_s[3];
-double pos_emit_s_2d[2];
-enum sgs_surface_type surf_emit_s;
+double dir_emit_h[3];
+double pos_h[3];
+double normal_h[3];
+double dir_spec_h[3];
+double pos_h_2d[2];
+enum sgs_surface_type surf_A_h;
struct sgs_fragment frag; /* Position échantillonnée */
/* Variables de la source radiative */
-double pos_emit_e[3];
-double normal_e[3];
-double dir_spec_e[3];
-double pos_emit_e_2d[2];
+double pos_d[3];
+double normal_d[3];
+double dir_emit_d[3];
+double pos_d_2d[2];
/* Propriétés radiatives des surfaces et leur dérivée */
double rho;
double d_rho;
double grad_rho_2d[2];
double Sb;
-double d_u_e_Sb;
-double d_u_cs_Sb;
+double dSb_uhd;
+double dSb_uchid;
double grad_Sb_2d[2];
/* Vecteurs des déformations et variables de projection */
const double chi[3] = {0, 0, 1};
double u_2d[2];
-double u_e_2d[2];
-double u_cs_2d[2];
-struct projection proj_chi_s;
-struct projection proj_chi_e;
-struct projection proj_u_e;
+double u_hd_2d[2];
+double u_chid_2d[2];
+struct projection proj_chi_h;
+struct projection proj_chi_d;
+struct projection proj_uh_d;
/* Pour le calcul du poids */
double Sb_sensib;
@@ -1343,7 +1350,7 @@ hit_receiver
@
\paragraph{}
-Dernière fonction utilitaire à écrire, la fonction qui calcule la surface $S_r$
+Dernière fonction utilitaire à écrire, la fonction qui calcule la surface $A_h$
de la paroi spéculaire:
<<fonctions utilitaires>>=