Skip to content

Latest commit

 

History

History
270 lines (195 loc) · 14.1 KB

File metadata and controls

270 lines (195 loc) · 14.1 KB

Bibliographie — rendu de nuages volumétriques

Références algorithmiques pour le pipeline de rendu d'Aether (raymarching de nuages volumétriques en Metal). Chaque entrée indique son apport et l'étape du pipeline qu'elle informe (voir CLAUDE.md → « Pipeline de rendu »).

Repère de lecture rapide : commencer par Schneider 2015 (le canon du domaine), puis Hillaire 2016 pour le scattering physique, et garder le gist pixelsnafu comme méta-index toujours à jour.


1. Articles & présentations fondateurs

Schneider & Vos — The Real-Time Volumetric Cloudscapes of Horizon: Zero Dawn (SIGGRAPH 2015)

Le texte de référence du domaine. Décrit le système Nubis de Guerrilla Games : modélisation par coverage / height / type maps, bruit Perlin-Worley pour le détail, raymarching optimisé, et le modèle d'éclairage Beer-Lambert + Henyey-Greenstein + effet powder (assombrissement des bords éclairés de face). Rendu sous 2 ms sur PS4.

Schneider — Nubis: Authoring Real-Time Volumetric Cloudscapes with the Decima Engine (SIGGRAPH 2017)

Suite production-oriented : passage de prototype à outil de jeu. Authoring de cloudscapes à l'échelle régionale, animation/transitions, intégration atmosphérique, optimisations. Affine le modèle de densité et le cloud modeling.

Schneider — Nubis, Evolved (SIGGRAPH 2022) & Nubis Cubed (2023)

Évolution PS5 / Horizon Forbidden West : nuages traversables, environnements, VFX (superstorms à éclairage interne), améliorations qualité/perf. Nubis Cubed pousse vers le rendu volumétrique de formes arbitraires.

Hillaire — Physically Based Sky, Atmosphere & Cloud Rendering in Frostbite (SIGGRAPH 2016)

Le pendant « physique » de Schneider. Cadre rigoureux du transport radiatif : diffusion simple/multiple, couplage ciel ↔ atmosphère ↔ nuages, time of day dynamique. Indispensable pour l'étape scattering et l'intégration soleil/lune.

Hillaire — A Scalable and Production Ready Sky and Atmosphere Rendering Technique (CGF / EGSR 2020)

Diffusion atmosphérique du sol à l'espace sans LUT de haute dimension. Pertinent pour le fond de ciel et la lumière ambiante alimentant les nuages.

Häkkinen — Optimisations for Real-Time Volumetric Cloudscapes (2016)

Mémoire centré sur les optimisations de la méthode Schneider : cone sampling pour l'éclairage, early-out, stratégies d'échantillonnage adaptatif.

Häggström — Real-Time Rendering of Volumetric Clouds (mémoire, Umeå, 2018)

Implémentation détaillée et pédagogique (moteur Stingray) : génération des bruits 2D/3D Perlin+Worley, fonction de remap pour combiner les bruits, modèle de densité, raymarching. Excellent guide pas-à-pas pour reproduire le pipeline.

Patapom (Pomerleau) — Real-Time Volumetric Rendering Course Notes (Revision 2013)

Notes de cours sur le transport radiatif appliqué au temps réel : radiance, extinction, scattering, volumetric shadowing. Bonne base théorique avant d'aborder Beer-Lambert / Henyey-Greenstein.


2. Diffusion & éclairage (étape 5)

Beer-Lambert & ray marching — Scratchapixel

Tutoriel rigoureux et gratuit sur le volume rendering par ray marching : transmittance (loi de Beer), absorption/scattering, ordre d'intégration correct.

Fonction de phase de Henyey-Greenstein

Modèle de l'anisotropie de la diffusion (g ≈ 0,8 pour les nuages). Souvent combiné en double-lobe (forward + backward) pour le rendu de nuages.

Wallis — Volumetric Rendering (série de blog)

Décortique le pipeline Schneider côté implémentation : Beer's law, light marching pour l'auto-ombrage, Henyey-Greenstein, powder effect.

Mitchell — Volumetric Light Scattering as a Post-Process (GPU Gems 3, 2007)

Rayons crépusculaires (« god rays ») « soleil derrière les nuages » en post- process écran : depuis chaque pixel, marche radiale vers la position écran du soleil en accumulant une source masquée par les occulteurs → les rayons jaillissent des trouées. Aether l'applique en demi-rés : source = lueur solaire × transmittance du nuage (alpha de la passe nuage), teintée par la couleur du disque solaire (nulle sous l'horizon → auto-éteinte la nuit), composée additivement — Aether/Rendering/Shaders/GodRays.metal.


3. Génération de bruit procédural (étape 3)

Perlin-Worley & textures de volume

La combinaison Perlin (basse fréquence, structure) + Worley/cellular (érosion, détail floconneux) est le standard depuis Schneider 2015. Voir §1 (Schneider, Häggström) pour les recettes de remap. Le bruit doit être tileable en 3D et précalculé en compute shader.

Quilez — Dynamic Clouds & articles bruit/SDF

Technique historique (2002) d'offset de textures de bruit précalculées, adaptée au GPU. Plus généralement, les articles d'Inigo Quilez sont la référence pour le bruit, le fBm et le ray marching de SDF.


4. Composition par profondeur (étape 6)

L'étape 6 a deux faces : (a) obtenir une depth map du paysage, et (b) s'en servir pour occlure correctement les nuages raymarchés par le relief.

a. Source de la depth map

Pour Aether, la profondeur du paysage vient soit du LiDAR (photos ARKit), soit d'une estimation monoculaire (galerie curée / photo sans LiDAR via CoreML).

La profondeur monoculaire est relative (à recaler en échelle), bruitée et sans bord net. Pour la composition, la traiter comme un masque d'occlusion tolérant (cf. soft particles ci-dessous), pas comme une géométrie exacte.

b. Occlusion & composition

  • Early ray termination à la profondeur de scène : pendant le raymarching, borner le rayon par la distance lue dans la depth map (reconstruite en position monde via l'inverse des matrices vue/projection). Le nuage ne s'accumule pas derrière le relief. Häkkinen (§1) décrit l'arrêt anticipé.
  • Soft particles : atténuer l'opacité du nuage quand sa profondeur approche celle de la scène, pour éviter les arêtes franches d'intersection avec le relief. Le principe (différence de profondeur → falloff d'alpha) se transpose directement au raymarching.
  • Aerial perspective / couplage profondeur ↔ atmosphère : Hillaire 2016 (§1) traite la composition des médias participatifs avec la scène opaque et l'extinction selon la distance — la base physique de l'étape 6.

5. Code d'exemple

Projet Techno Notes
clayjohn/godot-volumetric-cloud-demo Godot sky shader Implémentation lisible basée Schneider HZD. Shader direct.
clayjohn/godot-volumetric-cloud-demo-v2 Godot 4.2+ compute V2 avec compute shaders (génération bruit) + sky shader.
clayjohn/realtime_clouds OpenGL/C++ Référence du modèle coquilles d'Aether (cf. docs/SHELLS.md) : couche sphérique HZD autour d'une « petite planète ». Port Metal local : ~/code/other/realtime_clouds/ios.
adrianderstroff/realtime-clouds OpenGL/Go Reproduction du renderer Horizon: Zero Dawn.
AmanSachan1/Meteoros Vulkan Cloudscape temps réel d'après Decima/Nubis.
iamzhai/RealTimeVolumetricClouds Unity Compilation de méthodes issues de la littérature.

Note plateforme : ces dépôts sont en GLSL/HLSL/Vulkan, pas en Metal Shading Language. Les transposer à MSL est direct mais manuel (textures 3D, compute, [[stage_in]]). Pour Metal, s'appuyer sur les algorithmes ci-dessus et sur la doc Apple MetalKit/MTLComputeCommandEncoder.

Shadertoy (prototypage shader rapide)


6. Méta-ressources (index tenus à jour)


7. Données astronomiques externes

Yale Bright Star Catalog (BSC5) — étoiles dessinées dans le ciel

  • Hoffleit & Warren — Bright Star Catalogue, 5th Revised Ed. (1991), distribué par l'Astronomical Data Center / Harvard : http://tdc-www.harvard.edu/catalogs/bsc5.html
  • ~9 110 étoiles à largeur fixe (HR, position B1900/J2000, Vmag, indice B-V…). Aether en extrait position J2000 + Vmag + B-V → binaire compact bsc5.bin (scripts/build_star_catalog.py), résolu en directions monde par temps sidéral local (GMST, Meeus chap. 12) + latitude — Aether/Domain/StarCatalog.swift.
  • Rendu : points additifs passifs (sans éclairage), teintés par B-V, night-gated et occlus par les nuages — Aether/Rendering/Shaders/Stars.metal.

Correspondance pipeline Aether → références prioritaires

Étape (CLAUDE.md) Références à lire
2. Raymarching nuage analytique Schneider 2015, Häggström, Quilez, Scratchapixel
3. Volume textures, bruit Perlin-Worley Schneider 2015/2017, Häggström, Bitsquid
4. Pinceau → champ de densité Schneider 2017 (authoring), Häggström
5. Scattering (Beer-Lambert + HG) Hillaire 2016, Patapom, Wallis, Scratchapixel
6. Composition avec depth map ARKit sceneDepth, Depth Anything V2, soft particles, Hillaire 2016
7. Half-res + temporal reprojection Häkkinen, Nubis Evolved
8. Position soleil/lune dynamique Hillaire 2016 & 2020
9. Init depuis météo Hillaire 2016 (couplage atmosphère/nuages)