La radiosité est une technique d'éclairage pour simuler l'échange diffus de radiation entre des objets de la scène. Avec un raytraceur comme POV-Ray, normalement seule l'influence directe des sources de lumière sur les objets peut être calculée, toutes les parties dans l'ombre sont totalement effacées. La radiosité peut aider pour dépasser cette limitation. Plus de détails sur les aspects techniques peuvent être trouvés dans la section de référence.
Pour activer la radiosité, vous devez ajouter un bloc de radiosité dans le global_setting de votre fichier scène POV-Ray. La radiosité est plus précise que la simple lumière ambiante mais elle prend plus de temps de calcul, aussi il peut être utile de désactiver la radiosité pendant le développement de scène. Vous pouvez utiliser une constante déclarée ou une constante de fichier INI et une déclaration #if pour faire cela :
#declare RAD = off; global_settings { #if(RAD) radiosity { ... } #end }
Le plus important pour la radiosité sont les composants de finition ambient et diffuse des objets. Leurs effets diffèrent quelque peu d'une scène éclairée conventionnellement.
ambient: spécifie la quantité de lumière émise par l'objet. C'est la base pour la radiosité sans éclairage conventionnel mais cela peut aussi être important dans des scènes avec des sources de lumière. Puisque la plupart des matières n'émettent pas de lumière, la valeur par défaut de 0.1 est trop forte dans la plupart des cas. Vous pouvez aussi changer ambient_light pour influencer ceci.diffuse: influence la quantité de réflexion diffuse de la lumière entrant. Dans une scène avec radiosité cela ne signifie pas seulement l'apparence directe de la surface mais aussi la façon dont sont illuminés les autres objets par la lumière indirecte de cette surface.Les images suivantes présentent l'éclairage combiné conventionnel/radiosité. Plus tard vous trouverez aussi des exemples de pure radiosité.
Les paramètres suivants sont par défaut, le résultat serait le même avec un bloc de radiosité vide :
global_settings { radiosity { pretrace_start 0.08 pretrace_end 0.04 count 35 nearest_count 5 error_bound 1.8 recursion_limit 3 low_error_factor 0.5 gray_threshold 0.0 minimum_reuse 0.015 brightness 1 adc_bailout 0.01/2 } }
Les images suivantes sont rendues avec les paramètres par défaut et sont faites pour introduire la scène exemple.
Tous les objets sauf le ciel ont une finition avec ambient à 0.
La finition ambient 1 du ciel bleu le fait fonctionner comme une sorte de source diffuse de lumière. Cela donne un aspect bleuté à l'ensemble de la scène dans la version avec radiosité.
![]() Pas de radiosité |
![]() Radiosité (paramètres par défaut) |
![]() Différence avec/sans la radiosité |
Vous pouvez voir que la radiosité affecte plus les parties dans l'ombre quand elle est appliquée en combinaison avec un éclairage conventionnel.
La modification de brightness change l'intensité des effets de la radiosité. brightness 0 serait la même chose que l'absence de radiosité. brightness 1 fonctionnera correctement dans la plupart des cas, si les effets sont trop forts vous pouvez le réduire. Des valeurs plus grandes conduisent à des résulats assez étranges dans la plupart des cas.
![]() "brightness 0.5" |
![]() "brightness 1.0" |
![]() "brightness 2.0" |
La modification de la valeur de recursion_limit conduit aux résultats suivants, la deuxième ligne est la différence avec le défaut (recursion_limit 3):
![]() "recursion_limit 1" |
![]() "recursion_limit 2" |
![]() "recursion_limit 5" |
![]() "recursion_limit 1" (différence) |
![]() "recursion_limit 2" (différence) |
![]() "recursion_limit 5" (différence) |
Vous pouvez voir que des valeurs plus hautes que le défaut de 3 ne conduit pas à de meilleurs résultats dans une scène aussi simple. Dans la plupart des cas, les valeurs de 1 ou 2 sont suffisantes.
La valeur error_bound affecte principalement les structures des ombres. Des valeurs plus grandes que le défaut de 1.8 n'ont pas beaucoup d'effet, elles rendent seulement l'ombre plus plate. Des valeurs extrèmement basses peuvent conduire à de très bons résultats, mais le temps de rendu peut devenir très long. Pour les exemples suivants, recursion_limit 1 est utilisé.
![]() "error_bound 0.01" |
![]() "error_bound 0.5" |
![]() "error_bound 1.0" |
![]() "error_bound 0.01" (différence) |
![]() "error_bound 0.5" (différence) |
![]() "error_bound 1.0" (différence) |
Quelque fois en relation avec error_bound, on a low_error_factor. Il réduit error_bound pendant la dernière phase de prétraçage. Sa modification peut être utile pour éliminer des artefacts.
![]() "low_error_factor 0.01" |
![]() "low_error_factor 0.5" |
![]() "low_error_factor 1.0" |
![]() "low_error_factor 0.01" (différence) |
![]() "low_error_factor 1.0" (différence) |
Les exemples suivants utilisent recursion_limit 1 et error_bound 0.2. Ces 3 images illustrent l'effet de count. C'est le paramètre de précision et de qualité générale conduisant à de la haute qualité et de faible vitesses de rendu aux valeurs hautes.
![]() "count 2" |
![]() "count 35" (défaut) |
![]() "count 300" |
Un autre paramètre qui affecte la qualité est nearest_count. Vous pouvez utiliser des valeurs entre 1 et 20, le défaut est 5 :
![]() "nearest_count 1" |
![]() "nearest_count 5" |
![]() "nearest_count 10" |
Là encore, des valeurs élevées donnent moins d'artefacts et une apparence plus douce mais ralentissent le rendu.
minimum_reuse influence la réutilisation d'échantillons de radiosité précédents pendant le calcul. Il affecte aussi la qualité et la douceur.
![]() "minimum_reuse 0.2" |
![]() "minimum_reuse 0.015" |
![]() "minimum_reuse 0.005" |
![]() "minimum_reuse 0.2" |
![]() "minimum_reuse 0.005" (différence) |
Une autre valeur importante est pretrace_end. Elle spécifie le nombre de phases de prétraçage et, donc, influence grandement la vitesse. Habituellement, des valeurs basses donnent une meilleure qualité, mais il est important de garder cela en bonne relation avec error_bound.
![]() "pretrace_end 0.2" |
![]() "pretrace_end 0.04" |
![]() "pretrace_end 0.002" |
En forte relation avec pretrace_end est always_sample. Normalement, même dans le tracé final, des échantillons supplémentaires de radiosité sont pris. Vous pouvez éviter cela en ajoutant always_sample off. Cela est particulièrement utile si vous chargez des données de radiosité préalablement calculées avec load_file.
![]() "always_sample on" |
![]() "always_sample off" |
![]() "always_sample off" (différence) |
L'effet de max_sample est équivalent à brightness. Il ne réduit pas l'effet de radiosité en général, mais affaiblit les échantillons plus intenses que la valeur spécifiée.
![]() "max_sample 0.5" |
![]() "max_sample 0.8" |
![]() Par défaut |
Vous pouvez fortement affecter les choses avec les finitions des objets. En fait c'est la chose la plus importante avec la radiosité. Les objets normaux doivent avoir une finition ambient à 0 qui n'est pas le défaut dans POV-Ray et doit donc être spécifié. Les objets avec ambient > 0 émettent de la lumière.
Les valeurs par défaut des finitions utilisées jusqu'à maintenant sont diffuse 0.65 ambient 0.
![]() "diffuse 0.65 ambient 0.2" |
![]() "diffuse 0.4 ambient 0" |
![]() "diffuse 1.0 ambient 0" |
Enfin, vous pouvez varier le ciel dans des scènes extérieures de radiosité. Dans tous ces exemples, il est fait avec un objet sphère. finish { ambient 1 diffuse 0 } était utilisé jusqu'à maintenant. Les images suivantes montrent quelques variations :
![]() "ambient 0 diffuse 1" |
![]() "ambient 0 diffuse 0" (pas de ciel) |
![]() Dégradé jaune-bleu |
Vous pouvez aussi ôter toutes les sources de lumière et obtenir un éclairage par pure radiosité. La situation est alors celle d'un jour nuageux, quand la lumière ne vient pas d'une direction bien spécifiée, mais de la totalité du ciel.
Les 2 images suivantes montrent ce qui change avec la scène utilisée dans la première partie, quand la source de lumière est enlevée. (radiosité par défaut, mais recursion_limit 1 et error_bound 0.2)
![]() Avec source de lumière |
![]() Sans source de lumière |
Vous pouvez voir que, quand la source de lumière est enlevée, la totalité de l'image devient très bleue, parce que la scène est illuminée par un ciel bleu, tandis que lors d'un jour nuageux, le ciel est entre le gris et le blanc.
Les images suivantes montrent la scène exemple avec différents paramètres pour recursion_limit (tout le reste est aux valeurs par défaut).
![]() "recursion_limit 1" |
![]() "recursion_limit 2" |
![]() "recursion_limit 3" |
Cela semble pire que dans la première partie, parce que les paramètres par défaut sont faits pour une utilisation avec une lumière conventionnelle.
Les trois images suivantes montrent l'effet de error_bound. (recursion_limit est à 1 ici). Sans des sources de lumière, et bien plus important qu'avec, les bonnes valeurs dépendent de la scène et des autres paramètres, de basses valeurs ne donnent pas nécessairement de bons résultats.
![]() "error_bound 1.8" |
![]() "error_bound 0.4" |
![]() "error_bound 0.02" |
S'il y a des artefacts, cela aide souvent d'augmenter count, il affecte la qualité en général et aide souvent à les enlever (les images suivantes utilisent error_bound 0.02).
![]() "count 2" |
![]() "count 50" |
![]() "count 200" |
La séquence suivante montre l'effet de nearest_count, la différence n'est pas énorme, mais de grandes valeurs donnent toujours de meilleurs résultats (le maximum est 20). De là, toutes les images utilisent error_bound 0.2
![]() "nearest_count 2" |
![]() "nearest_count 5" (défaut) |
![]() "nearest_count 10" |
Le minimum_reuse est une valeur géométrique en relation avec la taille du rendu en pixels, et définit si des calculs précédents de la radiosité sont réutilisés à un nouveau point. De basses valeurs donnent des calculs plus fréquents et plus précis.
![]() "minimum_reuse 0.001" |
![]() "minimum_reuse 0.015" (défaut) |
![]() "minimum_reuse 0.1" |
Dans la plupart des cas, il n'est pas nécessaire de changer le low_error_factor. Ce facteur réduit la valeur de error_bound pendant la phase finale du prétraçage. pretrace_end était baissé à 0.01 dans ces images, la seconde ligne montre la différence avec le défaut. La modification de cette valeur peut quelque fois aider à enlever des artefacts persistants.
![]() "low_error_factor 0.01" |
![]() "low_error_factor 0.5" (défaut) |
![]() "low_error_factor 1.0" |
![]() "low_error_factor 0.01" |
![]() "low_error_factor 1.0" |
gray_threshold réduit la couleur dans les calculs de radiosité. Comme dit plus haut, le ciel bleu affecte la couleur de toute la scène quand la radiosité est calculée. Pour réduire cette coloration sans affecter la radiosité en général, vous pouvez augmenter gray_threshold. 1.0 signifie aucune couleur dans la radiosité.
![]() "gray_threshold 0.0" (défaut) |
![]() "gray_threshold 0.5" |
![]() "gray_threshold 1.0" |
Un autre paramètre important est pretrace_end. Avec pretrace_start, il spécifie les phases de prétraçage qui sont faites. Des valeurs basses donnent plus de phases et des résultats plus précis, mais aussi un ralentissement significatif du rendu.
![]() "pretrace_end 0.2" |
![]() "pretrace_end 0.02" |
![]() "pretrace_end 0.004" |
C'est valable d'expérimenter les choses affectant la radiosité pour réaliser comment cela fonctionne. Les 3 images suivantes montrent quelques expériences.
![]() "ambient 3" au lieu de "ambient 0" pour un objet |
![]() "ambient 0.5" au lieu de "ambient 0" pour tous les objets sauf le ciel : "ambient 0" |
![]() "error_bound 0.04 recursion_limit 2" |
Enfin vous pouvez fortement modifier l'apparence de toute la scène avec la texture du ciel. Les images suivantes donnent quelques exemples.
![]() Dégradé jaune-bleu de gauche à droite |
![]() Dégradé clair-sombre de gauche à droite |
![]() Dégradé clair-sombre de bas en haut |
De très bons résultats dépendent plus de la situation et de la façon dont la scène doit paraître. Voici quelques rendus de "qualité élevée" de cette scène particulière, mais les nécessités peuvent être très différentes dans d'autres situations.
global_settings { radiosity { pretrace_start 0.08 pretrace_end 0.01 count 500 nearest_count 10 error_bound 0.02 recursion_limit 1 low_error_factor 0.2 gray_threshold 0.0 minimum_reuse 0.015 brightness 1 adc_bailout 0.01/2 } }

A l'utilisation de la déclaration de normale en combinaison avec l'éclairage par radiosité, vous verrez que les parties ombrées des objets sont absolumment douces, sans se soucier de la force des normales.
La raison est que POV-Ray ne prend pas par défaut la normale en compte lors du calcul de la radiosité. Vous pouvez changer cela en ajoutant
normal on
au bloc de radiosité. Cela peut ralentir les choses, mais donne habituellement des résultats plus réalistes si les normales sont utilisées.
A l'utilisation des normales, vous devez aussi vous souvenir qu'elles ne font que simuler des irrégularités et ne génèrent pas de vraies perturbations géométriques de la surface. Une approche plus réaliste est l'utilisation d'une isosurface avec une fonction pigment, mais cela donne des rendus très lents, spécialement si la radiosité est appelée.
![]() Normale désactivée (défaut) |
![]() Normale activée |
![]() Isosurface |
Vous pouvez voir que la version isosurface n'a pas de circonférence adoucie et a une ligne d'ombre plus réaliste.
La radiosité peut être très lente. C'est le prix à payer pour une illumination réaliste, mais il y a quelques choses qui peuvent être faites pour améliorer la vitesse.
Les paramètres de la radiosité doivent être aussi rapides que possible. Dans la plupart des cas c'est un compromis entre la qualité et la vitesse. Surtout recursion_limit doit être conservé aussi bas que possible. Quelque fois 1 est suffisant, sinon 2 ou 3 seront souvent suffisants.
Avec des paramètres pour la qualité élevée, les datas de la radiosité peuvent prendre beaucoup de mémoire. A part cela, les autres données de la scène sont aussi beaucoup plus importantes que dans une scène conventionnelle. Par conséquent, une mémoire insuffisante et le 'swapping' peuvent fortement ralentir les choses.
Enfin, la géométrie de la scène et les textures sont aussi importantes. Les objets non visibles dans la caméra n'augmentent habituellement que le temps d'analyse et l'utilisation de la mémoire, mais avec la radiosité, même les objets derrière la caméra penvent ralentir le processus de génération.
Complément sur la section de référence
Complément sur la déclaration de la normale
| 2.3.8 Faire des animations |