init
This commit is contained in:
commit
2fe6ca2f65
1473 changed files with 251771 additions and 0 deletions
92
gamedata/shaders/d3d11/accum_volumetric_sun.ps.hlsl
Normal file
92
gamedata/shaders/d3d11/accum_volumetric_sun.ps.hlsl
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
#include "common.hlsli"
|
||||
|
||||
#undef USE_ULTRA_SHADOWS
|
||||
|
||||
#define RAY_PATH 2.0h
|
||||
#define JITTER_TEXTURE_SIZE 64.0f
|
||||
|
||||
#define JITTER_SUN_SHAFTS
|
||||
|
||||
#ifdef SUN_SHAFTS_QUALITY
|
||||
#if SUN_SHAFTS_QUALITY == 1
|
||||
// #define FILTER_LOW
|
||||
#define RAY_SAMPLES 20
|
||||
#elif SUN_SHAFTS_QUALITY == 2
|
||||
// #define FILTER_LOW
|
||||
#define RAY_SAMPLES 20
|
||||
#elif SUN_SHAFTS_QUALITY == 3
|
||||
// #define FILTER_LOW
|
||||
#define RAY_SAMPLES 40
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "shadow.hlsli"
|
||||
|
||||
float4 volume_range; // x - near plane, y - far plane
|
||||
float4 sun_shafts_intensity;
|
||||
|
||||
float4 main(v2p_TL I) : SV_Target
|
||||
{
|
||||
#ifndef SUN_SHAFTS_QUALITY
|
||||
return float4(0, 0, 0, 0);
|
||||
#else // SUN_SHAFTS_QUALITY
|
||||
IXrayGbuffer O;
|
||||
GbufferUnpack(I.Tex0.xy, I.HPos.xy, O);
|
||||
|
||||
float3 P = O.Point;
|
||||
|
||||
#ifndef JITTER_SUN_SHAFTS
|
||||
// Fixed ray length, fixed step dencity
|
||||
// float3 direction = (RAY_PATH/RAY_SAMPLES)*normalize(P);
|
||||
// Variable ray length, variable step dencity
|
||||
float3 direction = P / RAY_SAMPLES;
|
||||
#else // JITTER_SUN_SHAFTS
|
||||
// Variable ray length, variable step dencity, use jittering
|
||||
float4 J0 = jitter0.Sample(smp_jitter, I.HPos.xy / JITTER_TEXTURE_SIZE);
|
||||
float coeff = (RAY_SAMPLES - J0.x) / (RAY_SAMPLES * RAY_SAMPLES);
|
||||
float3 direction = P * coeff;
|
||||
#endif // JITTER_SUN_SHAFTS
|
||||
|
||||
float depth = P.z;
|
||||
float deltaDepth = direction.z;
|
||||
|
||||
float4 current = mul(m_shadow, float4(P, 1.0f));
|
||||
float4 delta = mul(m_shadow, float4(direction, 0.0f));
|
||||
|
||||
float res = 0.0f;
|
||||
float max_density = sun_shafts_intensity.x;
|
||||
float density = max_density / RAY_SAMPLES;
|
||||
|
||||
if(O.Depth > 0.9999f) {
|
||||
depth = 0.0f;
|
||||
res = max_density;
|
||||
}
|
||||
|
||||
[unroll] for(int i = 0; i < RAY_SAMPLES; ++i)
|
||||
{
|
||||
if (depth > 0.3)
|
||||
{
|
||||
#ifndef FILTER_LOW
|
||||
res += density * shadow(current);
|
||||
#else
|
||||
res += density * sample_hw_pcf(current, float4(0, 0, 0, 0));
|
||||
#endif
|
||||
}
|
||||
|
||||
depth -= deltaDepth;
|
||||
current -= delta;
|
||||
}
|
||||
|
||||
float fSturation = dot(normalize(P), -Ldynamic_dir.xyz);
|
||||
|
||||
// Normalize dot product to
|
||||
fSturation = 0.4f * fSturation + 0.6f;
|
||||
|
||||
float fog = saturate(length(P.xyz) * fog_params.w + fog_params.x);
|
||||
res = lerp(res, max_density, fog);
|
||||
res *= fSturation;
|
||||
|
||||
return PushGamma(res * Ldynamic_color);
|
||||
#endif // SUN_SHAFTS_QUALITY
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue