Skip to content

Commit 04cdb86

Browse files
committed
Added more fog shader variants
1 parent 206079f commit 04cdb86

File tree

6 files changed

+1055
-0
lines changed

6 files changed

+1055
-0
lines changed
Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
#include "./shared.h"
2+
3+
cbuffer _Globals : register(b0)
4+
{
5+
float LayerLighting_hlsl_PSMain015108167936257073_54bits : packoffset(c0) = {0};
6+
float4 fogColor : packoffset(c1);
7+
float3 fogTransform : packoffset(c2);
8+
float4x3 screenDataToCamera : packoffset(c3);
9+
float globalScale : packoffset(c6);
10+
float sceneDepthAlphaMask : packoffset(c6.y);
11+
float globalOpacity : packoffset(c6.z);
12+
float distortionBufferScale : packoffset(c6.w);
13+
float2 wToZScaleAndBias : packoffset(c7);
14+
float4 screenTransform[2] : packoffset(c8);
15+
float4x4 worldViewProj : packoffset(c10);
16+
float3 localEyePos : packoffset(c14);
17+
float4 vertexClipPlane : packoffset(c15);
18+
float specularPower : packoffset(c16);
19+
float distortionStrength : packoffset(c16.y);
20+
float3 specularColor : packoffset(c17);
21+
float environmentMapLevel : packoffset(c17.w);
22+
float3 selfIlluminationColor : packoffset(c18);
23+
float3 subsurfaceColor : packoffset(c19);
24+
float3 diffuseColor : packoffset(c20);
25+
float specularCubeMapBrightness : packoffset(c20.w);
26+
float minAlphaClipValue : packoffset(c21);
27+
float maxAlphaClipValue : packoffset(c21.y);
28+
float2 heightMapScaleAndBias : packoffset(c21.z);
29+
float4x2 diffuseTexTransform : packoffset(c22);
30+
float4x2 opacityTexTransform : packoffset(c24);
31+
float4x2 selfIllumTexTransform : packoffset(c26);
32+
33+
struct
34+
{
35+
float4 ambientVector;
36+
float4 ambientColorLow;
37+
float4 ambientControls;
38+
} Ambient : packoffset(c28);
39+
40+
float4 luminanceMapUVPacking : packoffset(c31);
41+
42+
struct
43+
{
44+
float4 worldVector;
45+
float4 color;
46+
float4 channelMask;
47+
} lights[6] : packoffset(c32);
48+
49+
row_major float4x4 localToWorld : packoffset(c50);
50+
row_major float4x4 screenToWorld : packoffset(c54);
51+
float3 worldEyePos : packoffset(c58);
52+
}
53+
54+
SamplerState mtbSampleSlot1_s : register(s0);
55+
SamplerState mtbSampleSlot2_s : register(s1);
56+
SamplerState GaussianLookup_s : register(s2);
57+
SamplerState s_luminanceMap1_s : register(s3);
58+
SamplerState s_luminanceMap2_s : register(s4);
59+
SamplerState s_shadowMask_s : register(s5);
60+
Texture2D<float4> mtbSampleSlot2 : register(t0);
61+
Texture2D<float4> s_luminanceMap1 : register(t1);
62+
Texture2D<float4> s_luminanceMap2 : register(t2);
63+
Texture2D<float4> mtbSampleSlot1 : register(t3);
64+
Texture2D<float4> s_shadowMask : register(t4);
65+
Texture2D<float4> GaussianLookup : register(t5);
66+
67+
68+
// 3Dmigoto declarations
69+
#define cmp -
70+
71+
72+
void main(
73+
float4 v0 : TEXCOORD0,
74+
float4 v1 : TEXCOORD1,
75+
float4 v2 : TEXCOORD6,
76+
float4 v3 : TEXCOORD7,
77+
float4 v4 : TEXCOORD3,
78+
float4 v5 : TEXCOORD4,
79+
float4 v6 : TEXCOORD5,
80+
float3 v7 : COLOR0,
81+
float4 v8 : TEXCOORD9,
82+
out float4 o0 : SV_Target0)
83+
{
84+
float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9;
85+
uint4 bitmask, uiDest;
86+
float4 fDest;
87+
88+
r0.xyz = worldEyePos.xyz + -v8.xyz;
89+
r0.w = dot(r0.xyz, r0.xyz);
90+
r0.w = rsqrt(r0.w);
91+
r0.xyz = r0.xyz * r0.www;
92+
r1.xyz = -v8.xyz * lights[1].worldVector + lights[1].worldVector;
93+
r0.w = dot(r1.xyz, r1.xyz);
94+
r0.w = rsqrt(r0.w);
95+
r2.xyz = r1.xyz * r0.www + r0.xyz;
96+
r1.xyz = r1.xyz * r0.www;
97+
r0.w = dot(r2.xyz, r2.xyz);
98+
r0.w = rsqrt(r0.w);
99+
r2.xyz = r2.xyz * r0.www;
100+
r3.xyzw = mtbSampleSlot2.Sample(mtbSampleSlot2_s, v0.xy).xyzw;
101+
r3.xyz = r3.xyz * float3(2,2,2) + float3(-1,-1,-1);
102+
r4.xyz = v5.xyz * r3.yyy;
103+
r3.xyw = r3.xxx * v4.xyz + r4.xyz;
104+
r3.xyz = r3.zzz * v6.xyz + r3.xyw;
105+
r0.w = dot(r3.xyz, r3.xyz);
106+
r0.w = rsqrt(r0.w);
107+
r3.xyz = r3.xyz * r0.www;
108+
r0.w = saturate(dot(r3.xyz, r2.xyz));
109+
r0.w = log2(r0.w);
110+
r2.y = 0.001953125 * specularPower;
111+
r2.x = dot(r3.xyz, r3.xyz);
112+
r2.xyzw = GaussianLookup.Sample(GaussianLookup_s, r2.xy).xyzw;
113+
r2.xy = saturate(r2.xy);
114+
r1.w = 0.00100000005 + r2.x;
115+
r1.w = r1.w * specularPower + 1.00000001e-007;
116+
r0.w = r1.w * r0.w;
117+
r0.w = exp2(r0.w);
118+
r2.xzw = -v8.xyz * lights[2].worldVector + lights[2].worldVector;
119+
r3.w = dot(r2.xzw, r2.xzw);
120+
r3.w = rsqrt(r3.w);
121+
r4.xyz = r2.xzw * r3.www + r0.xyz;
122+
r2.xzw = r3.www * r2.xzw;
123+
r2.x = saturate(dot(r2.xzw, r3.xyz));
124+
r2.z = dot(r4.xyz, r4.xyz);
125+
r2.z = rsqrt(r2.z);
126+
r4.xyz = r4.xyz * r2.zzz;
127+
r2.z = saturate(dot(r3.xyz, r4.xyz));
128+
r2.z = log2(r2.z);
129+
r2.z = r2.z * r1.w;
130+
r2.z = exp2(r2.z);
131+
r4.x = v4.w;
132+
r4.y = v5.w;
133+
r4.xyzw = s_luminanceMap1.Sample(s_luminanceMap1_s, r4.xy).xyzw;
134+
r5.xy = v2.xy / v2.ww;
135+
r5.xyzw = s_shadowMask.Sample(s_shadowMask_s, r5.xy).xyzw;
136+
r2.w = saturate(dot(r5.xyzw, lights[2].channelMask));
137+
r2.w = 1 + -r2.w;
138+
r2.w = saturate(r4.z * r2.w);
139+
r6.xyz = lights[2].color * r2.www;
140+
r7.xyz = r6.xyz * r2.zzz;
141+
r2.xzw = r6.xyz * r2.xxx;
142+
r3.w = saturate(dot(r5.xyzw, lights[1].channelMask));
143+
r3.w = 1 + -r3.w;
144+
r3.w = saturate(r4.y * r3.w);
145+
r4.yzw = lights[1].color * r3.www;
146+
r6.xyz = r0.www * r4.yzw + r7.xyz;
147+
r7.xyz = -v8.xyz * lights[3].worldVector + lights[3].worldVector;
148+
r0.w = dot(r7.xyz, r7.xyz);
149+
r0.w = rsqrt(r0.w);
150+
r8.xyz = r7.xyz * r0.www + r0.xyz;
151+
r7.xyz = r7.xyz * r0.www;
152+
r0.w = saturate(dot(r7.xyz, r3.xyz));
153+
r3.w = dot(r8.xyz, r8.xyz);
154+
r3.w = rsqrt(r3.w);
155+
r7.xyz = r8.xyz * r3.www;
156+
r3.w = saturate(dot(r3.xyz, r7.xyz));
157+
r3.w = log2(r3.w);
158+
r3.w = r3.w * r1.w;
159+
r3.w = exp2(r3.w);
160+
r6.w = saturate(dot(r5.xyzw, lights[3].channelMask));
161+
r6.w = 1 + -r6.w;
162+
r4.x = saturate(r6.w * r4.x);
163+
r7.xyz = lights[3].color * r4.xxx;
164+
r6.xyz = r3.www * r7.xyz + r6.xyz;
165+
r8.xyz = -v8.xyz * lights[4].worldVector + lights[4].worldVector;
166+
r3.w = dot(r8.xyz, r8.xyz);
167+
r3.w = rsqrt(r3.w);
168+
r9.xyz = r8.xyz * r3.www + r0.xyz;
169+
r8.xyz = r8.xyz * r3.www;
170+
r3.w = saturate(dot(r8.xyz, r3.xyz));
171+
r4.x = dot(r9.xyz, r9.xyz);
172+
r4.x = rsqrt(r4.x);
173+
r8.xyz = r9.xyz * r4.xxx;
174+
r4.x = saturate(dot(r3.xyz, r8.xyz));
175+
r4.x = log2(r4.x);
176+
r4.x = r4.x * r1.w;
177+
r4.x = exp2(r4.x);
178+
r6.w = saturate(dot(r5.xyzw, lights[4].channelMask));
179+
r5.x = saturate(dot(r5.xyzw, lights[5].channelMask));
180+
r5.x = 1 + -r5.x;
181+
r5.y = 1 + -r6.w;
182+
r8.xyzw = s_luminanceMap2.Sample(s_luminanceMap2_s, v7.xy).xyzw;
183+
r5.xy = saturate(r8.zy * r5.xy);
184+
r5.xzw = lights[5].color * r5.xxx;
185+
r8.xyz = lights[4].color * r5.yyy;
186+
r6.xyz = r4.xxx * r8.xyz + r6.xyz;
187+
r9.xyz = -v8.xyz * lights[5].worldVector + lights[5].worldVector;
188+
r4.x = dot(r9.xyz, r9.xyz);
189+
r4.x = rsqrt(r4.x);
190+
r0.xyz = r9.xyz * r4.xxx + r0.xyz;
191+
r9.xyz = r9.xyz * r4.xxx;
192+
r4.x = saturate(dot(r9.xyz, r3.xyz));
193+
r5.y = dot(r0.xyz, r0.xyz);
194+
r5.y = rsqrt(r5.y);
195+
r0.xyz = r5.yyy * r0.xyz;
196+
r0.x = saturate(dot(r3.xyz, r0.xyz));
197+
r0.y = saturate(dot(r1.xyz, r3.xyz));
198+
r1.xyz = r0.yyy * r4.yzw + r2.xzw;
199+
r0.yzw = r0.www * r7.xyz + r1.xyz;
200+
r0.yzw = r3.www * r8.xyz + r0.yzw;
201+
r0.yzw = r4.xxx * r5.xzw + r0.yzw;
202+
r0.x = log2(r0.x);
203+
r0.x = r1.w * r0.x;
204+
r0.x = exp2(r0.x);
205+
r1.xyz = r0.xxx * r5.xzw + r6.xyz;
206+
r3.xyzw = mtbSampleSlot1.Sample(mtbSampleSlot1_s, v0.xy).xyzw;
207+
r2.xzw = diffuseColor.xyz * r3.xyz;
208+
r0.xyz = r2.xzw * r0.yzw;
209+
r2.xzw = specularColor.xyz * r3.www;
210+
r2.xzw = r2.xzw * r3.xyz;
211+
r2.xyz = r2.yyy * r2.xzw;
212+
r0.xyz = r2.xyz * r1.xyz + r0.xyz;
213+
r1.xyz = fogColor.xyz + -r0.xyz;
214+
r0.xyz = v2.zzz * r1.xyz + r0.xyz;
215+
o0.xyz = globalScale * injectedData.FogAmount * r0.xyz;
216+
o0.w = globalOpacity * v3.w;
217+
return;
218+
}

0 commit comments

Comments
 (0)