VolumetricLighting/Assets/VolumetricFog/Shaders/VolumetricFog.cginc
2016-11-01 13:25:56 +01:00

35 lines
768 B
HLSL

sampler3D _VolumeScatter;
float4 _VolumeScatter_TexelSize;
float4 _Screen_TexelSize;
float _CameraFarOverMaxFar;
float _NearOverFarClip;
int ihash(int n)
{
n = (n<<13)^n;
return (n*(n*n*15731+789221)+1376312589) & 2147483647;
}
float frand(int n)
{
return ihash(n) / 2147483647.0;
}
float2 cellNoise(int2 p)
{
int i = p.y*256 + p.x;
return float2(frand(i), frand(i + 57)) - 0.5;//*2.0-1.0;
}
half4 Fog(half linear01Depth, half2 screenuv)
{
half z = linear01Depth * _CameraFarOverMaxFar;
z = (z - _NearOverFarClip) / (1 - _NearOverFarClip);
if (z < 0.0)
return half4(0, 0, 0, 1);
half3 uvw = half3(screenuv.x, screenuv.y, z);
uvw.xy += cellNoise(uvw.xy * _Screen_TexelSize.zw) * _VolumeScatter_TexelSize.xy * 0.8;
return tex3D(_VolumeScatter, uvw);
}