º et Ü » º siÄ _ Å
a la même direction que Ã
, sinon ces bornes sont
ß jú Ü » º etùø jû å » º . Nous introduisonsüýxjúþ å ÿ Ü þ, et obtenons alors : µ iÕÔç Æ j ìí!ìNéæsinüý à üý cosüý × ìNé µ iÕÔç Æ j Ç sinüý à üý cosüý × (4.1) 2.2 Illumination spéculaire
L’illumination spéculaire depuis le point de vue est :
µ iÕÔç Ç j Ö mn '¶Ø h 1IÙ ¾ÛÚÝàßÞá x·àâ ½ Ö ½ m× k½x·àâ j Ö iÕÔç hæÆfnm '¶Ø h 1IÙ ¾ÛÚÝàßÞá ä'¶Ø Å 1IÙ ¾ÛÚåæÝàßÞá x·àâ Ö iÕÔ hÆSf×m '¶Ø Å 1IÙ ¾ÛÚåÝàßÞá x·àâ avec le demi-vecteur j å ô Ü å ô Ü et^ l’exposant spéculaire. Posons ,èk ,ìêk et å
défini comme pour
Ä et Å . Alors : µ iÕÔ Ç j Öïî ð î½ñî½ò ì h k cosh !Ë eìNé cos!Ë å n· Ö î½ó¹ô õö îñîó¹÷ õö ì é cos!Ë å n·
Il est connu que cosh
est similaire à ÷ö
ö
pour ^ grand (ce qui est la cas ici). De plus, la densité de la fonction est concentrée sur j n (l’écart type vaut k
À
^ , et^ est généralement plus grand que 100), alors nous avons cosh
ß ½ Í cosh ß ½ ß . Finalement nous obtenons : µ iÕÔ Ç Í 'ì h k ìNé cos! å îð îñî½ò ÷ ö Ù î§÷î á ö · ìNé Puisque Ö ÷ ÷ ð ö Ù á ö j À
, l’intégrale précédente devient ºT» h si
"!
ß$#
ùø&% (ce qui est toujours le cas). Donc :
µ iÕÔç Ç Í ø º ì h k cos! å ºT» h (4.2) 2.3 Opacité
L’opacité est la proportion du rectangle de l’aiguille apparent qui se projette dans le pixel. Si l’aiguille est totalement couverte par le pixel alors :
j²(' ¸Û iÕÔ j º f Ú Ç*) +-,. (4.3) oùâ ã
représente la surface de la section du rayon conique à la distance de la primitive. L’illumi-nation diffuse et spéculaire valent donc c×ÆPjj²' ¸ÛàµÆ etc!Ç jj²' ¸ÛàµÇ .
FIG. 4.5 – Notre shader de cylindre permet de représenter une forêt de sapins dont les aiguilles sont considérées comme cylindriques sans avoir à les trianguler ou à les échantillonner.
3 Shader analytique d’un cône d’aiguilles
Comme nous l’avons vu à la section 1.3.2, nous considérons à cette échelle qu’un cône d’ai-guilles est une surface continue semi-opaque d’opacité où chaque point de la surface a une réflexion identique à celle d’un cylindre. Nous devons donc intégrer l’illumination d’un cylindre sur un cône d’ouverture± pour tous les axes Ã
0/ d’aiguilles valides. Dans le système de coordon-nées polaires associé au cône nous avonsÄ
jÂ1 Ü# ± Ü , où ± Ü
est l’angle entreÄ
et l’axe du cône. De même nous avonsÅ
jÂ1 å2# ± å . 3.1 Illumination diffuse
L’illumination diffuse est donnée par :
c i43Thàm Æ j / ó ôÑõö / ñ / ó1÷ õö ²SìNéçµ iÕÔ Æ Ã 0/1 j ²S 5 / ó¹ô õö / ñ / ój÷Ûõö ìí,ì é sinüý à üý cosüý ×
où²!ìNé est la longueur apparente d’une aiguille. Cette formule n’est pas intégrable analytiquement. Nous approchons alorsìí,ìNéjsinüý ï Ø üý cosüý × en utilisant la fonction2
6
j`ìí!ìNé17
k cosüý 8
9à cosüý ×
qui a la même valeur et la même dérivée enn , »
º
et . De plus, l’erreur maximale entre les deux fonctions est plus petite que 1%3.
2
Nous avons trouvé les différentes formules approximantes par tâtonnement, en cherchant des formes intégrables et en contrôlant les différences sous Maple.
3 L’approximation de: par;=< ð?> cos@BADCFE ö G ðHIKJðJ
3. SHADER ANALYTIQUE D’UN CÔNE D’AIGUILLES 87 Si cosüý Çj Ä Å lþ Ä þþ Å þ j Ä Å ½ è§,è é ìÞ,ìNé alors 6 jë Ä Å ìíeìTé èeèêé1jä ØLàT Ä Å è§,èêé1çìí,ìNé1
FIG. 4.6 – À gauche un exemple de la courbe: , pourM2NPORQFSKTVUWX,YZN[O\T-S&T]U^FX et_`NaQbU^ . Cette courbe est plutôt lisse malgré l’aspect complexe de ses facteurs. À droite : la FFT de cette courbe. Notez que l’énergie est clairement concentrée dans les fréquence 0, 1 et 2, la motivation d’approcher: avec une combinaison linéaire de 1, cosOced`cbfgX, cosOhWOcid`cbjXX est donc justifiée. NB : les valeurs à droite sont dûes à la symétrie de la FFT.
Si nous traçons cette fonction avec Maple pour plusieurs valeurs des paramètresÄ
,Å
et ± , il apparaît que la courbe est très lisse (cf. figure 4.6 à gauche) et ressemble à une combinaison linéaire de k , cos1ýk1ç[ et cosæ1k11×. L’évaluation de la FFT sur des courbes discrétisées montre qu’il n’y a pratiquement pas d’énergie en dehors des fréquences 0, 1 et 2 (cf. figure 4.6 à droite). Nous essayons donc d’approcher la courbe
6
en utilisant des positions et des valeurs des extrema. Le premier facteur est responsable d’un maximum de variation de 6
et est facile à calculer. De ce fait, nous approchons la courbe 6
par
Ä
Å
ìí,ì é è§,è é dont les extrema correspondent aux mêmes valeurs de1 que
6
.
Le termeè§,èêébìí!ìNé est égal à cosml
Ä
Ll
Å
avecl
Ä
l’angle entre les vecteurs à etÄ
, etl
Å
l’angle entre les vecteurs à etÅ
. Ces angles varient peu entre leur minimum et leur maximum si le vecteur Ã
tourne autour du cône, nous représentons donc les variations del
Ä par la forme Ü n Ü cos1ýo1 Ü avec Ü j max!± Ü# ±[,n Ü j min!± Ü#
±[. Nous faisons de même pour l
Å . Si nous développonsl Ä l Å
avec cette approximation nous obtenons l’expression :
qp n p cos1ýo1Dp avec qp j Ü å n º p j n º Ü n º å 9 n Ü n å cos1 Ü 1 å cos1Dp j n Ü cos1 Ü à n å cos1 å × n p ì-r,^ 1Dp j n Ü sin1 Ü à n å sin1 å × n p
simple d’utiliser une puissance de 1.5, 2 ou 1 (avec des erreurs respectives de 4%, 7%, 18% à la place de log@õ E
log@
ö
E
), pour résoudre l’intégrale analytiquement.
FIG. 4.7 – Les deux types d’aspects de la courbe cosOtsu2vxw0uzy cosOcdxcFu{XX, dépendant de ce ques|u2v}w0uzy
cosOced`cFu{X croise; (à droite) ou non (à gauche).
Notre but étant d’approcher6
, nous cherchons les extrema de 6
Í Ä Å 1 cosml Ä ~l Å . Ils correspondent aux extrema del
Ä
l
Å
, soit à la valeur pour laquellel
Ä l Å croise . Si l Ä l Å ne croise pas , 6
est similaire à une fonction cosinus. Si elle le croise,
6
a un “chapeau” et ressemble à la combinaison d’un cosinus et d’un cosinus à fréquence double (cf. figure 4.7). La similitude est grande si ±
Ü
et ±
å
ne sont pas proches de ± . Alors, nous pouvons obtenir explicitement les extrema de la courbe.
Comme nous essayons précisément d’approcher6
sous la forme Ä Å ( ß ø cos1ýo1Ìj º cosæ11Ì××
nous pouvons utiliser les paramètres issus de ces extremum. Soit j cosqp n p eta j cosqp n p, alors 1 j 1Dp # ø?j Ù ÷ á º # ß j Ù ô á º º , avec º
jWn dans le cas où aucun croisement avec n’apparaît (i.e.qp
n p etqp n p sont entre ! n # %) ; º j ð u Ù ºT» ÷ u
á dans le cas d’un croisement avec (qp
n
pZL qp
n
p ). Maintenant, nous pouvons facilement obtenir l’intégrale de6
: c i43Thïm Æ j ²e 5 / ó1ô õö / ñ / ó¹÷ õö 6 c i43Thïm Æ j Ú Ñ Ä Å ß ïLø cos1 å o1Dp× (4.4) où cos1 å o1Dp1j cosÙ / á ô ó À ö ô ö ó ô º D ó cosÙ / á etü1 j 1 Ü o1 å . 3.2 Illumination spéculaire
L’illumination spéculaire est donnée par :
c i43Thàm Ç j / ó¹ôÑõö ñ ó¹÷Ûõö ²SìNéçµ iÕÔ Ç Ã 0/1
4. MODÈLE D’ILLUMINATION ANALYTIQUE D’UN RAMEAU D’AIGUILLES 89 j ²S ^ / ó¹ôÛõö / ñ / ó1÷Ûõö ìÞeì h k cos! å
avec ²lì é la longueur apparente d’une aiguille. Encore une fois,ì
h
k est une fonction dont la densité est concentrée quand ìík j k , ce qui arrive quand èk j n , c’est-à-dire quand est orthogonal à l’axe d’une aiguille Ã
. Donc la valeur 1D existe seulement si ± ! » º ë± # » º ë±e%, sinon c i43Thïm Ç jÓn . Si1
existe, nous avons à nouveauì
h k ½1æ Í ì h k 1 . CommeìÞ,ìêk cos! å Çjë Å
èAkjè é , nous obtenons finalement :
c i43Thàm Ç Í Ú º ºT» h Å (4.5) où Rj k si± o! » º ÿ± # » º ÿ±%, sinonQjÓn .
Remarque : quand les deux valeurs où est orthogonal à Ã
apparaissent sur la même face (avant ou arrière), Rjk .
3.3 Opacité
L’opacité est donnée par :
j²' ¸Û i43Thïm jÿ / ó ô õö / ñ / ó ÷ õö ²!ìTé CommeìTéPj sin l Å , nous approchonsl Å by å n å cos1 1 å
par le même moyen que pour la composante diffuse. C’est-à-dire :
j²' ¸Ñ i43Thàm j`², ( å ß 9 Ü ø cos1 å o1 å × # ríh j²(' ¸Û i43Thïm j`²T cos!±[ cos!± å à9 sin!±X sin!± å × (4.6)
4 Modèle d’illumination analytique d’un rameau d’aiguilles
Nous considérons qu’un rameau d’aiguilles est un volume ayant une forme de cylindre et une opacité anisotrope (cf. figure 4.9). Pour calculer le shader analytique d’un tel objet nous devons calculer analytiquement un rendu volumique du cylindre.
Comme l’opacité n’est pas constante le long du rayon et du rayon d’ombrage, nous obte-nons : c1j k â ½ Ù Ô ám mn 0 gf ñ hïmgf c iÕÔ ÷ m ò ÷2 (\ ¡-¢ ò (4.7) avec ÷ j¤£ j k Ì la transparence anisotrope,²
la longueur du rayon dans le volume et
² Ç k¹g§Æ la longueur du rayon d’ombrage dans la volume.
Nous devons maintenant exprimer l’opacité et calculer l’intégrale, ce qui requière quelques approximations.