Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define USE_COMPUTE_SHADER 1
- #pragma warning( disable : 3571)
- #pragma warning( disable : 3557)
- #pragma warning(disable:1)
- SamplerState wccSamplerState : register(s1)
- {
- Filter=MIN_MAG_MIP_LINEAR;
- AddressU=Wrap;
- AddressV=Clamp;
- AddressW=Clamp;
- };
- SamplerState wmcSamplerState : register(s2)
- {
- Filter=MIN_MAG_MIP_LINEAR;
- AddressU=Wrap;
- AddressV=Mirror;
- AddressW=Clamp;
- };
- SamplerState wrapMirrorSamplerState : register(s3)
- {
- Filter=MIN_MAG_MIP_LINEAR;
- AddressU=Wrap;
- AddressV=Mirror;
- AddressW=Wrap;
- };
- SamplerState cmcSamplerState : register(s5)
- {
- Filter=MIN_MAG_MIP_LINEAR;
- AddressU=Clamp;
- AddressV=Mirror;
- AddressW=Clamp;
- };
- SamplerState wrapSamplerState : register(s6)
- {
- Filter=MIN_MAG_MIP_LINEAR;
- AddressU=Wrap;
- AddressV=Wrap;
- AddressW=Wrap;
- };
- SamplerState wwcSamplerState : register(s7)
- {
- Filter=MIN_MAG_MIP_LINEAR;
- AddressU=Wrap;
- AddressV=Wrap;
- AddressW=Clamp;
- };
- SamplerState cwcSamplerState : register(s8)
- {
- Filter=MIN_MAG_MIP_LINEAR;
- AddressU=Clamp;
- AddressV=Wrap;
- AddressW=Clamp;
- };
- SamplerState clampSamplerState : register(s9)
- {
- Filter=MIN_MAG_MIP_LINEAR;
- AddressU=Clamp;
- AddressV=Clamp;
- AddressW=Clamp;
- };
- SamplerState wrapClampSamplerState : register(s10)
- {
- Filter=MIN_MAG_MIP_LINEAR;
- AddressU=Wrap;
- AddressV=Clamp;
- AddressW=Clamp;
- };
- SamplerState samplerStateNearest : register(s11)
- {
- Filter=MIN_MAG_MIP_POINT;
- AddressU=Clamp;
- AddressV=Clamp;
- AddressW=Clamp;
- };
- SamplerState cwcNearestSamplerState : register(s12)
- {
- Filter=MIN_MAG_MIP_POINT;
- AddressU=Clamp;
- AddressV=Wrap;
- AddressW=Clamp;
- };
- SamplerState cmcNearestSamplerState : register(s13)
- {
- Filter=MIN_MAG_MIP_POINT;
- AddressU=Clamp;
- AddressV=Mirror;
- AddressW=Clamp;
- };
- SamplerState samplerStateNearestWrap : register(s14)
- {
- Filter=MIN_MAG_MIP_POINT;
- AddressU=Wrap;
- AddressV=Wrap;
- AddressW=Wrap;
- };
- SamplerState samplerStateNearestClamp : register(s15)
- {
- Filter=MIN_MAG_MIP_POINT;
- AddressU=Clamp;
- AddressV=Clamp;
- AddressW=Clamp;
- };
- SamplerState cubeSamplerState : register(s4)
- {
- Filter=MIN_MAG_MIP_LINEAR;
- AddressU=Mirror;
- AddressV=Mirror;
- AddressW=Mirror;
- };
- SamplerState cloudSamplerState
- {
- };
- #line 31 "C:/Simul/4.1a/Simul/Platform/DirectX12/../CrossPlatform/SFX/../SL/atmospherics_constants.sl"
- cbuffer AtmosphericsPerViewConstants : register(b12) {
- uniform float4x4 lightspaceToWorldMatrix;
- uniform float4x4 scatterspaceToWorldMatrix;
- uniform float4x4 worldToCloudMatrix;
- uniform float3 cloudOriginKm;
- uniform float padXXXXXXX;
- uniform float3 cloudScaleKm;
- uniform float padXXXXXXXX;
- uniform float3 viewPosition;
- uniform float zOrigin;
- uniform uint3 scatteringVolumeDims;
- uniform float godraysIntensity;
- uniform uint3 godraysVolumeDims;
- uniform float q35uj64jwq;
- uniform uint3 amortizationOffset;
- uniform float startZMetresZZZ;
- uniform uint3 amortization;
- uniform float averageCoverage;
- uniform uint2 edge;
- }
- ;
- #line 57 "C:/Simul/4.1a/Simul/Platform/DirectX12/../CrossPlatform/SFX/../SL/atmospherics_constants.sl"
- Texture2D godraysTexture: register(t3);
- RWTexture3D<unorm float4> targetVolume_U8: register(u0);
- [numthreads(16,16,1)]
- #define GFXRS "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT)," \
- "DescriptorTable" \
- "("\
- "CBV(b0, numDescriptors = 14)," \
- "SRV(t0, numDescriptors = 16)," \
- "UAV(u0, numDescriptors = 16)" \
- ")," \
- "DescriptorTable" \
- "(" \
- "Sampler(s0, numDescriptors = 16)" \
- ")"\
- [RootSignature(GFXRS)]
- void CS_GodraysAccumulation(uint3 p: SV_DispatchThreadID)
- {
- #line 124 "C:/Simul/4.1a/Simul/Platform/DirectX12/../CrossPlatform/SFX/atmospherics.sfx"
- uint3 idx=p;
- float4 unity=float4(1.0,1.0,1.0,1.0);
- float4 total=unity;
- float3 texc=float3(idx+uint3(0,1,0))/float3(godraysVolumeDims.xzy);
- float elevation=3.1415926536*(.5-texc.y);
- float sum=0.0;
- float mean_illumination=1.0-averageCoverage;
- float4 mi=float4(mean_illumination,mean_illumination,mean_illumination,mean_illumination);
- float fade_away=saturate(1.0-godraysIntensity*(texc.y)/1.0);
- for(uint i=0;i<godraysVolumeDims.y;i++)
- {
- uint3 pos=uint3(idx.x,idx.y,i);
- texc.z=float(i)/float(godraysVolumeDims.y);
- float dist=texc.z;
- float3 texc_gr=float3(texc.x,dist*cos(elevation),1.0-0.5*(1.0-dist*sin(elevation)+zOrigin));
- float4 lookup=godraysTexture.SampleLevel(wccSamplerState,texc_gr.xy,0);
- float light=saturate((lookup.x-texc_gr.z+0.001)/0.001);
- total+=light;
- sum+=1.0;
- float4 result=lerp(total/sum,mi,fade_away);
- targetVolume_U8[pos]=result;
- ;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement