About atmospheric scattering

Started by
-1 comments, last by Juliean 12 years, 11 months ago
Hi,

I just got my atmospheric scattering to work, after studying a lot of papers & demos, and finally finding one that explained how to set up rayleigh and mie factors and so on. There is only one thing that isn't working now: The sky isn't getting whiter towards the horizon. Here is the shader code:

float3 vertex = mul(i.vPos, WorldView).xyz;

float3 viewDirection = normalize( vertex );
float distance = length( vertex )*100.0f;

//
// Angle between sun direction and view direction
//
float3 sunDirection = normalize(mul(float4(SunDir, 1.0),WorldView).xyz );

float theta = dot( sunDirection, viewDirection );

//
// Phase1 and Phase2
//

float phase1 = 1.0 + theta * theta;
float phase2 = pow( rsqrt( HGg.y - HGg.z * theta ), 3 ) * HGg.x;

//
// Extinction term
//

float3 extinction = exp( -BetaRPlusBetaM * distance );
float3 totalExtinction = extinction * Multipliers.yzw;

//
// Inscattering term
//

float3 betaRay = BetaDashR * phase1;
float3 betaMie = BetaDashM * phase2;

float3 inscatter = (betaRay + betaMie) * OneOverBetaRPlusBetaM * (1.0 - extinction);

//
// Apply inscattering contribution factors
//

inscatter *= Multipliers.x;

//
// Scale with sun color & intensity
//

inscatter *= SunColorIntensity.xyz * SunColorIntensity.w;

o.vDiff.rgb = inscatter;
o.vDiff.a = 1.0f;
return o;


It's from a demo I found here. It's pretty obvious for me why the sky isn't getting whiter towards horizon, as the slope of the sky is not taking into the calculations anywhere in that code. I have a nice sun and so, but terrain scattering looks ugly for far distances, as the terrain simply blends white into a blue sky.

r82iyyj6.jpg

How can I enchance the shader to make the horizon white/bright? Thanks in advance!

This topic is closed to new replies.

Advertisement