[HN Gopher] Analytic Fog Rendering with Volumetric Primitives (2...
       ___________________________________________________________________
        
       Analytic Fog Rendering with Volumetric Primitives (2025)
        
       Author : surprisetalk
       Score  : 75 points
       Date   : 2026-03-05 16:12 UTC (1 days ago)
        
 (HTM) web link (matejlou.blog)
 (TXT) w3m dump (matejlou.blog)
        
       | kqr wrote:
       | If, by chance, there are any fans of _Morrowind_ here, there are
       | shaders for the OpenMW source port that add volumetric fog and
       | the game becomes absolutely stunning with them. I 'm sure that
       | was what the original developers intended but couldn't achieve
       | with the computers of the age.
       | 
       | Volumetric fog has a special place in my heart.
        
         | maximus_prime wrote:
         | Shout-out to his incredible mod adds volumetric fog to GTA 4:
         | https://fusionfix.io/iv
        
       | bee_rider wrote:
       | This is pretty cool, and also seems pretty accessible for a
       | "graphics thing." Just a little calculus.
       | 
       | It would be kind of neat to have an example of a physical
       | situation that produces each of the example functions (although
       | I'm sure that isn't always possible).
       | 
       | Can the effect of multiple fog emitters reasonably be modeled as
       | the sum of their outputs? I guess for high densities, probably
       | not (eventually the air will get saturated), but for low
       | densities, probably yes...
        
       | reactordev wrote:
       | Yesssssss...
       | 
       | However, I'd push this a little further with light reflectance
       | and scattering. Fog does some weird things to light when it's
       | dense. You mention this towards the end but even just a Rayleigh
       | calc should be enough.
       | 
       | A goal of mine, maybe this year, is to get back into volumetric
       | clouds and fog using SDF with wgpu but, the economy.
       | 
       | But something like...                   // Assume:          //
       | vec3 fogColor;      // Base fog color         // float density;
       | // Fog density at point         // vec3 lightDir;      //
       | Direction from point to light         // vec3 viewDir;       //
       | Direction from camera to point         // vec3 sunColor;      //
       | RGB color of light              // Compute angle between light
       | and view         float cosTheta = dot(normalize(lightDir),
       | normalize(viewDir));              // Simple Rayleigh-ish phase
       | function (forward/backward scattering)         float phase = 0.75
       | * (1.0 + cosTheta * cosTheta);              // Wavelength-
       | dependent scattering (approx Rayleigh)         vec3 sigma =
       | vec3(0.5, 0.8, 1.0); // R,G,B scattering coeffs              //
       | Fog contribution         vec3 fogContribution = density * phase *
       | sigma * sunColor;              // Blend with scene color
       | (sceneColor comes from existing render)         vec3 finalColor =
       | mix(sceneColor, sceneColor + fogContribution, density);
       | 
       | Take that with a grain of salt but the idea is to blend the final
       | color with a scattering coefficient for when light is trying to
       | shine through.
        
       ___________________________________________________________________
       (page generated 2026-03-06 23:00 UTC)