Contexte et problème initial
Le jeu Around The World affichait des nuages dont la base restait sombre, même après l'intégration d'une table de recherche (lookup table) générée par POV‑Ray. Cette table décrivait l'intensité de lumière diffusée en fonction de l'angle d'incidence et de la densité du nuage, mais ne reproduisait pas l'effet de multiple scattering. L'auteur a constaté que les sphères internes du nuage ne s'éclaircissaient jamais, signe d'une simulation de diffusion simple.
Implémentation d'un traceur Monte‑Carlo
Pour vérifier le comportement de POV‑Ray, un traceur récursif Monte‑Carlo multithreadé a été écrit en quelques centaines de lignes de Rust. Le code se limite à un nuage sphérique à densité uniforme, mais il calcule explicitement les chemins de photons multiples. Les résultats montrent une distribution de lumière beaucoup plus homogène, confirmant l'absence de diffusion multiple dans POV‑Ray. Cette différence se traduit visuellement par des bases de nuage plus claires et un aspect « métallique » éliminé.
Correction de l'illumination indirecte
Dans le moteur Godot, la lumière indirecte provient de cube‑maps contenant radiance et irradiance. Le rendu standard utilise la normale de surface pour échantillonner ces cartes, ce qui fait que les bases de nuage, orientées vers le sol, reçoivent peu de lumière du ciel. En inversant la composante verticale de la normale (la faire pointer vers le haut) le shader capte davantage de lumière bleue du ciel, donnant aux nuages une teinte plus réaliste, tant en plein jour qu'au crépuscule. Le même ajustement transforme les bases orange d'un coucher de soleil en un rose plus naturel, résultat de la combinaison du rouge direct et du bleu indirect.
Améliorations de la diffusion atmosphérique et de l'horizon
Un problème d'apparence jaune près de l'horizon a été attribué à l'ordre des opérations d'intégration lors du ray‑marching. En inversant l'ordre – attenuation par out‑scattering avant l'addition de la lumière inscattered – l'atténuation est réduite, corrigeant la teinte excessive. Cette modification persiste même avec un nombre accru d'étapes d'intégration, suggérant une limitation numérique du schéma original.
Le rendu du ciel devait également tenir compte d'une planète 75 fois plus petite que la Terre, ce qui provoquait un horizon artificiel au‑dessus de l'horizon réel. Un hack simple a été appliqué : ajouter une petite valeur à la composante y du vecteur de vue global puis renormaliser. Cette opération tire le ciel vers le bas autour de l'horizon, éliminant la bande sombre observée lors des levers et couchers.
Gestion du tonemapping
Le moteur utilise le HDR, où les valeurs de couleur dépassent 1,0. Sans tonemapping adéquat, l'affichage sur des moniteurs standards conduit à des zones sur‑saturées. Bien que le post ne détaille pas la solution adoptée, il rappelle que le tonemapping reste un défi majeur pour les artistes 3D modernes.