T_AO_AMOUNT; #line 34 "BeautifySSGI.fx" float RT_IL_AMOUNT; #line 45 "BeautifySSGI.fx" float RT_FADE_DEPTH; #line 46 "NvCommon.fxh" bool g_sldDepthInvertZ; #line 51 "NvCommon.fxh" bool g_sldDepthInvertY; #line 63 "BeautifySSGI.fx" float FRAME_TIME; #line 64 "BeautifySSGI.fx" int FRAME_COUNT; }; #line 28 "NvCommon.fxh" Texture2D __V__NV__ColorInputTex : register(t0); Texture2D __srgbV__NV__ColorInputTex : register(t1); #line 29 Texture2D __V__NV__DepthInputTex : register(t2); Texture2D __srgbV__NV__DepthInputTex : register(t3); SamplerState __s0 : register(s0); #line 30 static const __sampler2D V__NV__ColorInput = { __V__NV__ColorInputTex, __s0 }; #line 31 static const __sampler2D V__NV__DepthInput = { __V__NV__DepthInputTex, __s0 }; #line 56 float F__NV__GetLinearizedDepth( #line 56 in float2 uv) { #line 58 float _18 = 1.00000000e+00 - uv.y; #line 58 float _20 = g_sldDepthInvertY ? _18 : uv.y; #line 58 uv[1] = _20; #line 59 float4 _25 = float4(uv.x, uv.y, 0.00000000e+00, 0.00000000e+00); #line 59 float4 _26 = V__NV__DepthInput.t.SampleLevel(V__NV__DepthInput.s, _25.xy, _25.w); #line 59 float depth = _26.x; #line 60 float _30 = 1.00000000e+00 - depth; #line 60 float _31 = g_sldDepthInvertZ ? _30 : depth; #line 60 depth = _31; #line 65 float _33 = depth * 9.99000000e+02; #line 65 float _35 = 1.00000000e+03 - _33; #line 65 float _36 = depth / _35; #line 65 depth = _36; return depth; } #line 71 float F__NV__GetLuma( #line 71 in float3 color) { #line 74 float _41 = dot(float3(2.98999995e-01, 5.87000012e-01, 1.14000000e-01), color); return _41; } #line 78 struct S__VSOut { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; }; #line 84 S__VSOut F__VSMain( #line 84 in uint vid : SV_VERTEXID) { #line 86 S__VSOut o = (S__VSOut)0; #line 87 bool _49 = vid == 2; #line 87 float _52 = _49 ? 2.00000000e+00 : 0.00000000e+00; #line 87 o.uv[0] = _52; #line 88 bool _54 = vid == 1; #line 88 float _57 = _54 ? 2.00000000e+00 : 0.00000000e+00; #line 88 o.uv[1] = _57; #line 89 float2 _60 = o.uv * float2(2.00000000e+00, -2.00000000e+00); #line 89 float2 _62 = _60 + float2(-1.00000000e+00, 1.00000000e+00); #line 89 float4 _67 = float4(_62.x, _62.y, 0.00000000e+00, 1.00000000e+00); #line 89 o.pos = _67; return o; } #line 93 void F__VSMainOut( #line 93 in uint vid : SV_VERTEXID, #line 93 out float4 position : SV_POSITION, #line 93 out float2 texcoord : TEXCOORD0) { #line 95 uint _73; #line 95 _73 = vid; #line 95 S__VSOut _74 = F__VSMain(_73); #line 95 S__VSOut o_75 = _74; #line 96 position = o_75.pos; #line 97 texcoord = o_75.uv; return; } #line 81 "BeautifySSGI.fx" Texture2D __V__ZTex : register(t4); Texture2D __srgbV__ZTex : register(t5); #line 82 Texture2D __V__ColorTex : register(t6); Texture2D __srgbV__ColorTex : register(t7); #line 83 Texture2D __V__GBufferTex : register(t8); Texture2D __srgbV__GBufferTex : register(t9); #line 84 Texture2D __V__GBufferTex1 : register(t10); Texture2D __srgbV__GBufferTex1 : register(t11); #line 85 Texture2D __V__GBufferTex2 : register(t12); Texture2D __srgbV__GBufferTex2 : register(t13); #line 86 Texture2D __V__GITex0 : register(t14); Texture2D __srgbV__GITex0 : register(t15); #line 87 Texture2D __V__GITex1 : register(t16); Texture2D __srgbV__GITex1 : register(t17); #line 88 Texture2D __V__GITex2 : register(t18); Texture2D __srgbV__GITex2 : register(t19); #line 89 Texture2D __V__GITexFilterTemp0 : register(t20); Texture2D __srgbV__GITexFilterTemp0 : register(t21); #line 90 Texture2D __V__GITexFilterTemp1 : register(t22); Texture2D __srgbV__GITexFilterTemp1 : register(t23); #line 91 Texture2D __V__SkyCol : register(t24); Texture2D __srgbV__SkyCol : register(t25); #line 92 Texture2D __V__SkyColPrev : register(t26); Texture2D __srgbV__SkyColPrev : register(t27); #line 93 Texture2D __V__JitterTex : register(t28); Texture2D __srgbV__JitterTex : register(t29); #line 95 static const __sampler2D V__sZTex = { __V__ZTex, __s0 }; #line 96 static const __sampler2D V__sColorTex = { __V__ColorTex, __s0 }; #line 97 static const __sampler2D V__sGBufferTex = { __V__GBufferTex, __s0 }; #line 98 static const __sampler2D V__sGBufferTex1 = { __V__GBufferTex1, __s0 }; #line 99 static const __sampler2D V__sGBufferTex2 = { __V__GBufferTex2, __s0 }; #line 100 static const __sampler2D V__sGITex0 = { __V__GITex0, __s0 }; #line 101 static const __sampler2D V__sGITex1 = { __V__GITex1, __s0 }; #line 102 static const __sampler2D V__sGITex2 = { __V__GITex2, __s0 }; #line 103 static const __sampler2D V__sGITexFilterTemp0 = { __V__GITexFilterTemp0, __s0 }; #line 104 static const __sampler2D V__sGITexFilterTemp1 = { __V__GITexFilterTemp1, __s0 }; #line 105 static const __sampler2D V__sSkyCol = { __V__SkyCol, __s0 }; #line 106 static const __sampler2D V__sSkyColPrev = { __V__SkyColPrev, __s0 }; SamplerState __s1 : register(s1); #line 107 static const __sampler2D V__sJitterTex = { __V__JitterTex, __s1 }; #line 113 struct S__VSOUT { float4 vpos : SV_POSITION; float2 uv : TEXCOORD0; }; #line 119 S__VSOUT F__VS_RT( #line 119 in uint id : SV_VERTEXID) { #line 121 S__VSOUT o_111 = (S__VSOUT)0; #line 122 bool _113 = id == 2; #line 122 float _116 = _113 ? 2.00000000e+00 : 0.00000000e+00; #line 122 o_111.uv[0] = _116; #line 123 bool _118 = id == 1; #line 123 float _121 = _118 ? 2.00000000e+00 : 0.00000000e+00; #line 123 o_111.uv[1] = _121; #line 124 float2 _124 = o_111.uv * float2(2.00000000e+00, -2.00000000e+00); #line 124 float2 _126 = _124 + float2(-1.00000000e+00, 1.00000000e+00); #line 124 float4 _131 = float4(_126.x, _126.y, 0.00000000e+00, 1.00000000e+00); #line 124 o_111.vpos = _131; return o_111; } #line 132 struct S__RTInputs { float3 pos; float3 normal; float3 eyedir; float3x3 tangent_base; float3 jitter; int nrays; int nsteps; }; #line 158 float F__Projection__depth_to_z( #line 158 in float depth) { #line 160 float _137 = depth * 1.00000000e+03; #line 160 float _139 = _137 + 1.00000000e+00; return _139; } #line 163 float F__Projection__z_to_depth( #line 163 in float z) { #line 165 float _144 = z - 1.00000000e+00; #line 165 float _146 = rcp(1.00000000e+03); #line 165 float _147 = _144 * _146; return _147; } #line 168 float2 F__Projection__proj_to_uv( #line 168 in float3 pos) { #line 171 float _152 = radians(6.00000000e+01); #line 171 float _154 = _152 * 5.00000000e-01; #line 171 float _155 = tan(_154); #line 171 float2 _157 = -_155.xx; #line 171 float3 _161 = float3(_157.x, _157.y, 1.00000000e+00); #line 171 float _164 = 1.00000000e+00 / _1.y; #line 171 float _166 = ((float)((int)_1.x)) * _164; #line 171 float2 _168 = float2(1.00000000e+00, _166); #line 171 float3 _170 = _161 * _168.yxx; #line 171 float3 uvtoprojADD = _170; #line 172 float2 _174 = float2(-2.00000000e+00, -2.00000000e+00) * uvtoprojADD.xy; #line 172 float3 _178 = float3(_174.x, _174.y, 0.00000000e+00); #line 172 float3 uvtoprojMUL = _178; #line 174 float2 _181 = rcp(uvtoprojMUL.xy); #line 174 float2 _183 = rcp(uvtoprojMUL.xy); #line 174 float2 _184 = -_183; #line 174 float2 _186 = _184 * uvtoprojADD.xy; #line 174 float4 _191 = float4(_181.x, _181.y, _186.x, _186.y); #line 174 float4 projtouv = _191; #line 175 float2 _195 = pos.xy / pos.z.xx; #line 175 float2 _197 = _195 * projtouv.xy; #line 175 float2 _199 = _197 + projtouv.zw; return _199; } #line 178 float3 F__Projection__uv_to_proj( #line 178 in float2 uv, #line 178 in float z) { #line 181 float _205 = radians(6.00000000e+01); #line 181 float _207 = _205 * 5.00000000e-01; #line 181 float _208 = tan(_207); #line 181 float2 _210 = -_208.xx; #line 181 float3 _214 = float3(_210.x, _210.y, 1.00000000e+00); #line 181 float _217 = 1.00000000e+00 / _1.y; #line 181 float _219 = ((float)((int)_1.x)) * _217; #line 181 float2 _221 = float2(1.00000000e+00, _219); #line 181 float3 _223 = _214 * _221.yxx; #line 181 float3 uvtoprojADD_224 = _223; #line 182 float2 _227 = float2(-2.00000000e+00, -2.00000000e+00) * uvtoprojADD_224.xy; #line 182 float3 _231 = float3(_227.x, _227.y, 0.00000000e+00); #line 182 float3 uvtoprojMUL_232 = _231; #line 184 float3 _234 = uv.xyx * uvtoprojMUL_232; #line 184 float3 _235 = _234 + uvtoprojADD_224; #line 184 float3 _237 = _235 * z.xxx; return _237; } #line 187 float3 F__Projection__uv_to_proj( #line 187 in S__VSOUT i) { #line 189 float2 _241; #line 189 _241 = i.uv.xy; #line 189 float _243 = F__NV__GetLinearizedDepth(_241); #line 189 float _244; #line 189 _244 = _243; #line 189 float _245 = F__Projection__depth_to_z(_244); #line 189 float z_246 = _245; #line 190 float2 _247; #line 190 float _248; #line 190 _247 = i.uv.xy; #line 190 _248 = z_246; #line 190 float3 _250 = F__Projection__uv_to_proj(_247, _248); return _250; } #line 193 float3 F__Projection__uv_to_proj( #line 193 in float2 uv) { #line 195 float2 _254; #line 195 _254 = uv; #line 195 float _255 = F__NV__GetLinearizedDepth(_254); #line 195 float _256; #line 195 _256 = _255; #line 195 float _257 = F__Projection__depth_to_z(_256); #line 195 float z_258 = _257; #line 196 float2 _259; #line 196 float _260; #line 196 _259 = uv; #line 196 _260 = z_258; #line 196 float3 _261 = F__Projection__uv_to_proj(_259, _260); return _261; } #line 199 float3 F__Projection__uv_to_proj( #line 199 in float2 uv, #line 199 in __sampler2D ztex, #line 199 in int mip) { #line 201 float4 _271 = float4(uv.xyx.x, uv.xyx.y, uv.xyx.z, ((float)mip)); #line 201 float4 _272 = ztex.t.SampleLevel(ztex.s, _271.xy, _271.w); #line 201 float z_274 = _272.x; #line 202 float2 _275; #line 202 float _276; #line 202 _275 = uv; #line 202 _276 = z_274; #line 202 float3 _277 = F__Projection__uv_to_proj(_275, _276); return _277; } #line 213 float3 F__Normal__normal_from_depth( #line 213 in S__VSOUT i) { #line 215 S__VSOUT _281; #line 215 _281 = i; #line 215 float3 _282 = F__Projection__uv_to_proj(_281); #line 215 float3 center_position = _282; #line 217 float3 delta_x = float3(0.00000000e+00, 0.00000000e+00, 0.00000000e+00); #line 217 float3 delta_y = float3(0.00000000e+00, 0.00000000e+00, 0.00000000e+00); #line 218 float4 neighbour_uv = float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00); #line 220 float _292 = 1.00000000e+00 / _1.x; #line 220 float _295 = 1.00000000e+00 / _1.y; #line 220 float2 _296 = float2(_292, _295); #line 220 float _299 = 1.00000000e+00 / _1.x; #line 220 float _302 = 1.00000000e+00 / _1.y; #line 220 float2 _303 = float2(_299, _302); #line 220 float _305 = -_303.x; #line 220 float4 _309 = float4(_296.x, 0.00000000e+00, _305, 0.00000000e+00); #line 220 float4 _311 = i.uv.xyxy + _309; #line 220 neighbour_uv = _311; #line 222 float2 _312; #line 222 _312 = neighbour_uv.xy; #line 222 float3 _314 = F__Projection__uv_to_proj(_312); #line 222 float3 _315 = _314 - center_position; #line 222 float3 delta_right = _315; #line 223 float2 _317; #line 223 _317 = neighbour_uv.zw; #line 223 float3 _319 = F__Projection__uv_to_proj(_317); #line 223 float3 _320 = center_position - _319; #line 223 float3 delta_left = _320; #line 225 float _323 = abs(delta_right.z); #line 225 float _325 = abs(delta_left.z); #line 225 bool _326 = _323 > _325; #line 225 float3 _328 = _326.xxx ? delta_left : delta_right; #line 225 delta_x = _328; #line 227 float _331 = 1.00000000e+00 / _1.x; #line 227 float _334 = 1.00000000e+00 / _1.y; #line 227 float2 _335 = float2(_331, _334); #line 227 float _338 = 1.00000000e+00 / _1.x; #line 227 float _341 = 1.00000000e+00 / _1.y; #line 227 float2 _342 = float2(_338, _341); #line 227 float _344 = -_342.y; #line 227 float4 _348 = float4(0.00000000e+00, _335.y, 0.00000000e+00, _344); #line 227 float4 _350 = i.uv.xyxy + _348; #line 227 neighbour_uv = _350; #line 229 float2 _351; #line 229 _351 = neighbour_uv.xy; #line 229 float3 _353 = F__Projection__uv_to_proj(_351); #line 229 float3 _354 = _353 - center_position; #line 229 float3 delta_bottom = _354; #line 230 float2 _356; #line 230 _356 = neighbour_uv.zw; #line 230 float3 _358 = F__Projection__uv_to_proj(_356); #line 230 float3 _359 = center_position - _358; #line 230 float3 delta_top = _359; #line 232 float _362 = abs(delta_bottom.z); #line 232 float _364 = abs(delta_top.z); #line 232 bool _365 = _362 > _364; #line 232 float3 _367 = _365.xxx ? delta_top : delta_bottom; #line 232 delta_y = _367; #line 234 float3 _368 = cross(delta_y, delta_x); #line 234 float3 normal = _368; #line 235 float _370 = dot(normal, normal); #line 235 float _371 = rsqrt(_370); #line 235 float3 _373 = normal * _371.xxx; #line 235 normal = _373; return normal; } #line 240 float3x3 F__Normal__base_from_vector( #line 240 in float3 n) { #line 242 bool _379 = n.z < n.y; #line 242 bool bestside = _379; #line 244 float3 _383 = bestside.xxx ? n.xzy : n; #line 244 float3 n2 = _383; #line 246 float3 _386 = -n2.xxy; #line 246 float3 _388 = _386 * n2.xyy; #line 246 float _391 = 1.00000000e+00 + n2.z; #line 246 float _392 = rcp(_391); #line 246 float3 _394 = _388 * _392.xxx; #line 246 float3 _396 = _394 + float3(1.00000000e+00, 0.00000000e+00, 1.00000000e+00); #line 246 float3 k = _396; #line 247 float _399 = -n2.x; #line 247 float3 _402 = float3(k.xy.x, k.xy.y, _399); #line 247 float3 u = _402; #line 248 float _405 = -n2.y; #line 248 float3 _408 = float3(k.yz.x, k.yz.y, _405); #line 248 float3 v = _408; #line 250 float3 _412 = bestside.xxx ? u.xzy : u; #line 250 u = _412; #line 251 float3 _415 = bestside.xxx ? v.xzy : v; #line 251 v = _415; #line 253 float3x3 _425 = float3x3(u.x, u.y, u.z, v.x, v.y, v.z, n.x, n.y, n.z); return _425; } #line 314 struct S__SampleSet { float2x2 nextdir; float2 dir_xy; float index; }; #line 321 int F__permute_frame_index( #line 321 in uint framecounter) { const int _430[3] = { 1, 2, 3 }; #line 329 int permutation_table[3] = _430; #line 336 uint _433 = framecounter % 3; return permutation_table[_433]; } #line 339 S__SampleSet F__ray_sorting( #line 339 in S__VSOUT i, #line 340 in int framecounter, #line 341 in float random_seed) { #line 343 S__SampleSet ss = (S__SampleSet)0; #line 345 uint num_sample_sets = 768; #line 347 float _445 = random_seed * 2.55000000e+02; #line 347 float _447 = _445 + 1.00000000e+00; #line 347 uint permuted_pixel = ((uint)_447); #line 350 float2 _452 = i.vpos.xy / float2(1.60000000e+01, 1.60000000e+01); #line 350 float _454 = dot(_452, float2(1.60000000e+01, 1.00000000e+00)); #line 350 uint cell_modulator = ((uint)_454); #line 353 uint _457; #line 353 _457 = ((uint)framecounter); #line 353 int _459 = F__permute_frame_index(_457); #line 353 uint permuted_frame = ((uint)_459); #line 356 uint _463 = permuted_pixel * 3; #line 356 uint _464 = _463 + permuted_frame; #line 356 uint sampleset_start_index = _464; #line 362 float _468 = 2.39996338e+00 * ((float)sampleset_start_index); #line 362 float _469; #line 362 float _470; #line 362 _469 = sin(_468), _470 = cos(_468); #line 362 ss.dir_xy[0] = _469; #line 362 ss.dir_xy[1] = _470; #line 363 float _474 = ((float)sampleset_start_index) / ((float)num_sample_sets); #line 363 ss.index = _474; #line 372 ss.nextdir = float2x2(-5.87259710e-01, -8.09398532e-01, 8.09398532e-01, -5.87259710e-01); return ss; } #line 385 struct S__RayTracing__RayDesc { float3 pos; float3 dir; float2 uv; float currlen; float maxlen; float steplen; float width; }; #line 400 float F__RayTracing__compute_intersection( #line 400 inout S__RayTracing__RayDesc ray, #line 400 in S__RTInputs parameters, #line 400 in S__VSOUT i) { #line 402 float intersected = 0.00000000e+00; #line 403 bool inside_screen = true; #line 405 float3 prevraypos = parameters.pos; #line 406 float prevdelta = 0.00000000e+00; #line 409 bool _497 = ray.currlen < ray.maxlen; #line 409 bool _498 = _497 && inside_screen; #line 409 [loop] while (_498) { { #line 411 float _501 = ray.currlen / ray.maxlen; #line 411 float lambda = _501; #line 412 float _504 = 1.25000000e+00 * lambda; #line 412 float _506 = _504 - 3.75000000e-01; #line 412 float _507 = lambda * _506; #line 412 float _509 = _507 + 1.25000000e-01; #line 412 float _510 = lambda * _509; #line 412 lambda = _510; #line 414 float3 _513 = ray.dir * lambda.xxx; #line 414 float3 _515 = _513 * ray.maxlen.xxx; #line 414 float3 _517 = parameters.pos + _515; #line 414 ray.pos = _517; #line 416 float3 _518; #line 416 _518 = ray.pos; #line 416 float2 _520 = F__Projection__proj_to_uv(_518); #line 416 ray.uv = _520; #line 417 float2 _522 = -ray.uv; #line 417 float2 _524 = _522 * ray.uv; #line 417 float2 _526 = _524 + ray.uv; #line 417 float2 _527 = saturate(_526); #line 417 bool _529 = all(((bool2)_527)); #line 417 inside_screen = _529; #line 419 float2 _532 = ray.uv - i.uv; #line 419 float2 _535 = float2(((float)((int)_1.x)), ((float)((int)_1.y))); #line 419 float2 _536 = _532 * _535; #line 419 float _537 = length(_536); #line 419 float _538 = log2(_537); #line 419 float _540 = _538 - 4.50000000e+00; #line 419 int _543 = ((int)_1.x) / 240; #line 419 uint _546 = ((uint)_543) >> 1; #line 419 bool _548 = _546 != 0; #line 419 int _551 = ((int)_1.x) / 240; #line 419 uint _554 = ((uint)_551) >> 2; #line 419 bool _556 = _554 != 0; #line 419 int _559 = ((int)_548) + ((int)_556); #line 419 int _562 = ((int)_1.x) / 240; #line 419 uint _565 = ((uint)_562) >> 3; #line 419 bool _567 = _565 != 0; #line 419 int _569 = _559 + ((int)_567); #line 419 int _572 = ((int)_1.x) / 240; #line 419 uint _575 = ((uint)_572) >> 4; #line 419 bool _577 = _575 != 0; #line 419 int _579 = _569 + ((int)_577); #line 419 int _582 = ((int)_1.x) / 240; #line 419 uint _585 = ((uint)_582) >> 5; #line 419 bool _587 = _585 != 0; #line 419 int _589 = _579 + ((int)_587); #line 419 int _592 = ((int)_1.x) / 240; #line 419 uint _595 = ((uint)_592) >> 6; #line 419 bool _597 = _595 != 0; #line 419 int _599 = _589 + ((int)_597); #line 419 int _602 = ((int)_1.x) / 240; #line 419 uint _605 = ((uint)_602) >> 7; #line 419 bool _607 = _605 != 0; #line 419 int _609 = _599 + ((int)_607); #line 419 float _612 = clamp(_540, 0.00000000e+00, ((float)_609)); #line 419 ray.width = _612; #line 421 float2 _613; #line 421 int _614; #line 421 _613 = ray.uv; #line 421 _614 = ((int)ray.width); #line 421 float3 _617 = F__Projection__uv_to_proj(_613, V__sZTex, _614); #line 421 float3 pos_618 = _617; #line 422 float _621 = pos_618.z - ray.pos.z; #line 422 float delta = _621; #line 424 float _625 = ray.maxlen * 9.00000036e-02; #line 424 float _628 = lerp(1.99999996e-02, 1.00000000e+00, lambda); #line 424 float _629 = _625 * _628; #line 424 float _631 = _629 * 1.00000000e+01; #line 424 float z_thickness = _631; #line 427 float _637 = delta * 2.00000000e+00; #line 427 float _638 = _637 + z_thickness; #line 427 float _639 = abs(_638); #line 427 bool _640 = _639 < z_thickness; #line 427 [branch] if (_640) { #line 429 intersected = ((float)inside_screen); #line 431 float _642 = abs(delta); #line 431 float _643 = prevdelta + _642; #line 431 float _644 = prevdelta / _643; #line 431 float3 _647 = lerp(prevraypos, ray.pos, _644.xxx); #line 431 ray.pos = _647; #line 432 float3 _648; #line 432 _648 = ray.pos; #line 432 float2 _650 = F__Projection__proj_to_uv(_648); #line 432 ray.uv = _650; #line 434 float3 _652 = pos_618 - parameters.pos; #line 434 float3 _653 = normalize(_652); #line 434 ray.dir = _653; #line 436 ray.currlen = 1.00000000e+04; } #line 439 float _657 = ray.currlen + ray.steplen; #line 439 ray.currlen = _657; #line 440 prevraypos = ray.pos; #line 441 prevdelta = delta; } #line 409 bool _497 = ray.currlen < ray.maxlen; #line 409 _498 = _497 && inside_screen; } return intersected; } #line 452 struct S__Denoise__FilterSample { float4 gbuffer; float4 val; }; #line 458 S__Denoise__FilterSample F__Denoise__fetch_sample( #line 458 in float2 uv, #line 458 in __sampler2D gi) { #line 460 S__Denoise__FilterSample o_665 = (S__Denoise__FilterSample)0; #line 461 float4 _670 = float4(uv.x, uv.y, 0.00000000e+00, 0.00000000e+00); #line 461 float4 _671 = V__sGBufferTex.t.SampleLevel(V__sGBufferTex.s, _670.xy, _670.w); #line 461 o_665.gbuffer = _671; #line 462 float4 _676 = float4(uv.x, uv.y, 0.00000000e+00, 0.00000000e+00); #line 462 float4 _677 = gi.t.SampleLevel(gi.s, _676.xy, _676.w); #line 462 o_665.val = _677; return o_665; } #line 466 float4 F__Denoise__filter( #line 466 in S__VSOUT i, #line 466 in __sampler2D gi, #line 466 in int iteration, #line 466 in bool skip) { #line 468 float2 _684; #line 468 _684 = i.uv; #line 468 S__Denoise__FilterSample _686 = F__Denoise__fetch_sample(_684, gi); #line 468 S__Denoise__FilterSample center = _686; #line 470 if (skip) { return center.val; } #line 473 float4 value_sum = float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00); #line 474 float weight_sum = 9.99999975e-06; const float _696[4] = { 1.50000000e+00, 3.50000000e+00, 7.00000000e+00, 1.50000000e+01 }; #line 476 float kernel[4] = _696; const float _698[4] = { 6.99999988e-01, 6.99999988e-01, 6.99999988e-01, 6.99999988e-01 }; #line 477 float sigma_z[4] = _698; const float _700[4] = { 7.50000000e-01, 1.50000000e+00, 1.50000000e+00, 5.00000000e+00 }; #line 478 float sigma_n[4] = _700; const float _702[4] = { 3.50000001e-02, 6.00000024e-01, 1.39999998e+00, 5.00000000e+00 }; #line 479 float sigma_v[4] = _702; #line 481 float x = -1.00000000e+00; #line 481 bool _712 = x <= 1.00000000e+00; #line 481 while (_712) { { #line 482 float y = -1.00000000e+00; #line 482 bool _724 = y <= 1.00000000e+00; #line 482 while (_724) { { #line 484 float2 _728 = float2(x, y); #line 484 float2 _730 = _728 * kernel[iteration].xx; #line 484 float _733 = 1.00000000e+00 / _1.x; #line 484 float _736 = 1.00000000e+00 / _1.y; #line 484 float2 _737 = float2(_733, _736); #line 484 float2 _738 = _730 * _737; #line 484 float2 _740 = i.uv + _738; #line 484 float2 uv_741 = _740; #line 485 float2 _742; #line 485 _742 = uv_741; #line 485 S__Denoise__FilterSample _743 = F__Denoise__fetch_sample(_742, gi); #line 485 S__Denoise__FilterSample tap = _743; #line 488 float _747 = sigma_z[iteration] * 1.60000000e+01; #line 488 float _750 = tap.gbuffer.w / center.gbuffer.w; #line 488 float _752 = 1.00000000e+00 - _750; #line 488 float _753 = _747 * _752; #line 488 float wz = _753; #line 489 float _755 = abs(wz); #line 489 float _757 = lerp(wz, _755, 7.50000000e-01); #line 489 float _759 = 5.00000000e-01 - _757; #line 489 float _760 = saturate(_759); #line 489 wz = _760; #line 491 float _763 = dot(tap.gbuffer.xyz, center.gbuffer.xyz); #line 491 float _766 = sigma_n[iteration] + 1.00000000e+00; #line 491 float _767 = _763 * _766; #line 491 float _769 = _767 - sigma_n[iteration]; #line 491 float _770 = saturate(_769); #line 491 float wn = _770; #line 492 float4 _774 = tap.val - center.val; #line 492 float4 _775 = abs(_774); #line 492 float _777 = dot(_775, float4(3.00000012e-01, 5.89999974e-01, 1.09999999e-01, 3.00000000e+00)); #line 492 float wi = _777; #line 494 float _779 = -wi; #line 494 float _780 = _779 * wi; #line 494 float _782 = _780 * 2.00000000e+00; #line 494 float _784 = _782 * sigma_v[iteration]; #line 494 float _785 = exp(_784); #line 494 wi = _785; #line 496 float _787 = wz * 1.41999996e+00; #line 496 float _789 = _787 - 4.19999987e-01; #line 496 float _790 = saturate(_789); #line 496 float _792 = lerp(wn, 1.00000000e+00, _790); #line 496 wn = _792; #line 498 float _793 = wz * wn; #line 498 float _794 = _793 * wi; #line 498 float _795 = saturate(_794); #line 498 float w = _795; #line 500 float4 _799 = tap.val * w.xxxx; #line 500 float4 _800 = value_sum + _799; #line 500 value_sum = _800; #line 501 float _801 = weight_sum + w; #line 501 weight_sum = _801; } float _725 = y; #line 482 float _727 = _725 + 1.00000000e+00; #line 482 y = _727; #line 482 _724 = y <= 1.00000000e+00; } } float _713 = x; #line 481 float _715 = _713 + 1.00000000e+00; #line 481 x = _715; #line 481 _712 = x <= 1.00000000e+00; } #line 504 float4 _803 = value_sum / weight_sum.xxxx; #line 504 float4 result = _803; return result; } #line 510 S__RTInputs F__init( #line 510 in S__VSOUT i) { const float4 _808[4] = { float4(1.00000000e+01, 4.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(2.00000000e+01, 1.00000000e+01, 0.00000000e+00, 0.00000000e+00), float4(3.00000000e+01, 1.50000000e+01, 0.00000000e+00, 0.00000000e+00), float4(4.00000000e+01, 2.00000000e+01, 0.00000000e+00, 0.00000000e+00) }; #line 521 float4 _809[4] = _808; #line 521 float4 curr_preset = _809[RT_QUALITY_PRESET]; #line 523 S__RTInputs o_813 = (S__RTInputs)0; #line 524 o_813.nrays = ((int)curr_preset.x); #line 525 o_813.nsteps = ((int)curr_preset.y); #line 527 float2 _816; #line 527 _816 = i.uv; #line 527 float3 _818 = F__Projection__uv_to_proj(_816); #line 527 o_813.pos = _818; #line 528 float3 _820 = normalize(o_813.pos); #line 528 float3 _821 = -_820; #line 528 o_813.eyedir = _821; #line 529 float4 _823 = V__sGBufferTex.t.Sample(V__sGBufferTex.s, i.uv); #line 529 o_813.normal = _823.xyz; #line 531 float _827 = 1.00000000e+00 / _1.x; #line 531 float _830 = 1.00000000e+00 / _1.y; #line 531 float2 _831 = float2(_827, _830); #line 531 float2 _833 = float2(1.00000000e+00, 1.00000000e+00) * _831; #line 531 float2 _835 = _833 * float2(7.50000000e-01, 7.50000000e-01); #line 531 float2 _837 = i.uv + _835; #line 531 float4 _838 = V__sGBufferTex.t.Sample(V__sGBufferTex.s, _837); #line 531 float3 _841 = o_813.normal + _838.xyz; #line 531 o_813.normal = _841; #line 532 float _844 = 1.00000000e+00 / _1.x; #line 532 float _847 = 1.00000000e+00 / _1.y; #line 532 float2 _848 = float2(_844, _847); #line 532 float2 _850 = float2(-1.00000000e+00, 1.00000000e+00) * _848; #line 532 float2 _852 = _850 * float2(7.50000000e-01, 7.50000000e-01); #line 532 float2 _854 = i.uv + _852; #line 532 float4 _855 = V__sGBufferTex.t.Sample(V__sGBufferTex.s, _854); #line 532 float3 _858 = o_813.normal + _855.xyz; #line 532 o_813.normal = _858; #line 533 float _861 = 1.00000000e+00 / _1.x; #line 533 float _864 = 1.00000000e+00 / _1.y; #line 533 float2 _865 = float2(_861, _864); #line 533 float2 _867 = float2(1.00000000e+00, -1.00000000e+00) * _865; #line 533 float2 _869 = _867 * float2(7.50000000e-01, 7.50000000e-01); #line 533 float2 _871 = i.uv + _869; #line 533 float4 _872 = V__sGBufferTex.t.Sample(V__sGBufferTex.s, _871); #line 533 float3 _875 = o_813.normal + _872.xyz; #line 533 o_813.normal = _875; #line 534 float _878 = 1.00000000e+00 / _1.x; #line 534 float _881 = 1.00000000e+00 / _1.y; #line 534 float2 _882 = float2(_878, _881); #line 534 float2 _884 = float2(-1.00000000e+00, -1.00000000e+00) * _882; #line 534 float2 _886 = _884 * float2(7.50000000e-01, 7.50000000e-01); #line 534 float2 _888 = i.uv + _886; #line 534 float4 _889 = V__sGBufferTex.t.Sample(V__sGBufferTex.s, _888); #line 534 float3 _892 = o_813.normal + _889.xyz; #line 534 o_813.normal = _892; #line 535 float3 _894 = normalize(o_813.normal); #line 535 o_813.normal = _894; #line 537 float2 _897 = i.vpos.xy % float2(3.20000000e+01, 3.20000000e+01); #line 537 float4 _899 = V__sJitterTex.t.Load(int3(((int2)_897), 0)); #line 537 o_813.jitter = _899.xyz; #line 538 float2 _903 = i.vpos.xy / float2(3.20000000e+01, 3.20000000e+01); #line 538 float2 _905 = _903 % float2(3.20000000e+01, 3.20000000e+01); #line 538 float4 _907 = V__sJitterTex.t.Load(int3(((int2)_905), 0)); #line 538 float3 _910 = o_813.jitter + _907.xyz; #line 538 float3 _911 = frac(_910); #line 538 o_813.jitter = _911; #line 540 float3 _912; #line 540 _912 = o_813.normal; #line 540 float3x3 _914 = F__Normal__base_from_vector(_912); #line 540 o_813.tangent_base = _914; return o_813; } #line 544 void F__unpack_hdr( #line 544 inout float3 color) { #line 547 float3 _918 = saturate(color); #line 547 color = _918; #line 548 float3 _919 = saturate(color); #line 548 float3 _921 = float3(1.00999999e+00, 1.00999999e+00, 1.00999999e+00) - _919; #line 548 float3 _922 = rcp(_921); #line 548 float3 _923 = color * _922; #line 548 color = _923; return; } #line 551 void F__pack_hdr( #line 551 inout float3 color) { #line 553 float3 _928 = float3(1.00999999e+00, 1.00999999e+00, 1.00999999e+00) * color; #line 553 float3 _930 = color + float3(1.00000000e+00, 1.00000000e+00, 1.00000000e+00); #line 553 float3 _931 = rcp(_930); #line 553 float3 _932 = _928 * _931; #line 553 color = _932; #line 555 float3 _933 = saturate(color); #line 555 color = _933; return; } #line 558 float3 F__dither( #line 558 in S__VSOUT i) { #line 561 float _939 = dot(float2(7.54877687e-01, 5.69840312e-01), float2(1.00000000e+00, 1.00000000e+00)); #line 561 float3 _942 = float3(0.00000000e+00, 2.50000004e-02, 1.25000002e-02) * _939.xxx; #line 561 float3 magicadd = _942; #line 564 float _945 = exp2(8.00000000e+00); #line 564 float _947 = _945 - 1.00000000e+00; #line 564 float lsb = _947; #line 566 float _951 = dot(i.vpos.xy, float2(7.54877687e-01, 5.69840312e-01)); #line 566 float3 _953 = _951.xxx + magicadd; #line 566 float3 _954 = frac(_953); #line 566 float3 dither = _954; #line 567 float3 _957 = dither / lsb.xxx; #line 567 dither = _957; return dither; } #line 572 float3 F__ggx_vndf( #line 572 in float2 uniform_disc, #line 572 in float2 alpha, #line 572 in float3 v) { #line 575 float2 _964 = alpha * v.xy; #line 575 float3 _968 = float3(_964.x, _964.y, v.z); #line 575 float3 _969 = normalize(_968); #line 575 float3 Vh = _969; #line 577 float2 p = uniform_disc; #line 578 float _974 = p.x * p.x; #line 578 float _976 = 1.00000000e+00 - _974; #line 578 float _977 = sqrt(_976); #line 580 float _980 = Vh.z * 5.00000000e-01; #line 580 float _982 = _980 + 5.00000000e-01; #line 578 float _984 = lerp(_977, p.y, _982); #line 578 p[1] = _984; #line 582 float _985 = dot(p, p); #line 582 float _987 = 1.00000000e+00 - _985; #line 582 float _988 = saturate(_987); #line 582 float _989 = sqrt(_988); #line 582 float3 _992 = float3(p.xy.x, p.xy.y, _989); #line 582 float3 Nh = _992; #line 585 float3 _994; #line 585 _994 = Vh; #line 585 float3x3 _995 = F__Normal__base_from_vector(_994); #line 585 float3 _996 = mul(Nh, _995); #line 585 Nh = _996; #line 588 float2 _998 = alpha * Nh.xy; #line 588 float _1000 = saturate(Nh.z); #line 588 float3 _1003 = float3(_998.x, _998.y, _1000); #line 588 float3 _1004 = normalize(_1003); #line 588 Nh = _1004; return Nh; } #line 593 float3 F__schlick_fresnel( #line 593 in float vdoth, #line 593 in float3 f0) { #line 595 float _1009 = saturate(vdoth); #line 595 vdoth = _1009; #line 596 float _1011 = pow(vdoth, 5.00000000e+00); #line 596 float3 _1014 = lerp(_1011.xxx, float3(1.00000000e+00, 1.00000000e+00, 1.00000000e+00), f0); return _1014; } #line 599 float F__ggx_g2_g1( #line 599 in float3 l, #line 599 in float3 v, #line 599 in float2 alpha) { #line 602 float2 _1021 = l.xy * alpha; #line 602 l.xy = _1021; #line 603 float2 _1023 = v.xy * alpha; #line 603 v.xy = _1023; #line 604 float _1024 = length(l); #line 604 float nl = _1024; #line 605 float _1026 = length(v); #line 605 float nv = _1026; #line 607 float _1029 = l.z * nv; #line 607 float ln = _1029; #line 608 float _1033 = l.z * v.z; #line 608 float lv = _1033; #line 609 float _1036 = v.z * nl; #line 609 float vn = _1036; #line 611 float _1038 = ln + lv; #line 611 float _1039 = vn + ln; #line 611 float _1041 = _1039 + 1.00000001e-07; #line 611 float _1042 = _1038 / _1041; return _1042; } #line 614 float F__fade_distance( #line 614 in S__VSOUT i) { #line 618 float2 _1046; #line 618 _1046 = i.uv; #line 618 float3 _1048 = F__Projection__uv_to_proj(_1046); #line 618 float _1049 = length(_1048); #line 618 float _1051 = _1049 / 1.00000000e+03; #line 618 float _1052 = saturate(_1051); #line 618 float distance = _1052; #line 619 float _1054 = -distance; #line 619 float _1055 = RT_FADE_DEPTH * RT_FADE_DEPTH; #line 619 float _1057 = _1055 * 8.00000000e+00; #line 619 float _1059 = _1057 + 1.00000005e-03; #line 619 float _1060 = rcp(_1059); #line 619 float _1061 = _1054 * _1060; #line 619 float _1062 = exp(_1061); #line 619 float fade = _1062; return fade; } #line 627 void F__PS_InputSetup( #line 627 in S__VSOUT i, #line 627 out float4 color : SV_TARGET0, #line 627 out float depth : SV_TARGET1, #line 627 out float4 gbuffer : SV_TARGET2) { #line 629 float2 _1070; #line 629 _1070 = i.uv; #line 629 float _1072 = F__NV__GetLinearizedDepth(_1070); #line 629 depth = _1072; #line 630 float4 _1074 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, i.uv); #line 630 color = _1074; #line 631 float _1076 = depth * 1.00000000e+03; #line 631 float _1078 = 9.99000000e+02 - _1076; #line 631 float _1079 = saturate(_1078); #line 631 float4 _1081 = color * _1079.xxxx; #line 631 color = _1081; #line 632 float _1082; #line 632 _1082 = depth; #line 632 float _1083 = F__Projection__depth_to_z(_1082); #line 632 depth = _1083; #line 633 S__VSOUT _1084; #line 633 _1084 = i; #line 633 float3 _1085 = F__Normal__normal_from_depth(_1084); #line 633 gbuffer.xyz = _1085; #line 634 gbuffer[3] = depth; return; } #line 637 void F__PS_InputSetupHalf1( #line 637 in S__VSOUT i, #line 637 out float4 gbuffer : SV_TARGET0) { #line 639 S__VSOUT _1090; #line 639 _1090 = i; #line 639 float3 _1091 = F__Normal__normal_from_depth(_1090); #line 639 gbuffer.xyz = _1091; #line 640 float2 _1092; #line 640 _1092 = i.uv; #line 640 float _1094 = F__NV__GetLinearizedDepth(_1092); #line 640 float _1095; #line 640 _1095 = _1094; #line 640 float _1096 = F__Projection__depth_to_z(_1095); #line 640 gbuffer[3] = _1096; return; } #line 643 void F__PS_InputSetupHalf2( #line 643 in S__VSOUT i, #line 643 out float4 color : SV_TARGET0, #line 643 out float depth : SV_TARGET1) { #line 645 float4 texels = float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00); #line 646 float _1106 = 1.00000000e+00 / _1.x; #line 646 float _1109 = 1.00000000e+00 / _1.y; #line 646 float2 _1110 = float2(_1106, _1109); #line 646 float2 _1112 = float2(5.00000000e-01, 5.00000000e-01) * _1110; #line 646 float2 _1114 = i.uv + _1112; #line 646 float2 _1115; #line 646 _1115 = _1114; #line 646 float _1116 = F__NV__GetLinearizedDepth(_1115); #line 646 texels[0] = _1116; #line 647 float _1119 = 1.00000000e+00 / _1.x; #line 647 float _1122 = 1.00000000e+00 / _1.y; #line 647 float2 _1123 = float2(_1119, _1122); #line 647 float2 _1125 = float2(-5.00000000e-01, 5.00000000e-01) * _1123; #line 647 float2 _1127 = i.uv + _1125; #line 647 float2 _1128; #line 647 _1128 = _1127; #line 647 float _1129 = F__NV__GetLinearizedDepth(_1128); #line 647 texels[1] = _1129; #line 648 float _1132 = 1.00000000e+00 / _1.x; #line 648 float _1135 = 1.00000000e+00 / _1.y; #line 648 float2 _1136 = float2(_1132, _1135); #line 648 float2 _1138 = float2(5.00000000e-01, -5.00000000e-01) * _1136; #line 648 float2 _1140 = i.uv + _1138; #line 648 float2 _1141; #line 648 _1141 = _1140; #line 648 float _1142 = F__NV__GetLinearizedDepth(_1141); #line 648 texels[2] = _1142; #line 649 float _1145 = 1.00000000e+00 / _1.x; #line 649 float _1148 = 1.00000000e+00 / _1.y; #line 649 float2 _1149 = float2(_1145, _1148); #line 649 float2 _1151 = float2(-5.00000000e-01, -5.00000000e-01) * _1149; #line 649 float2 _1153 = i.uv + _1151; #line 649 float2 _1154; #line 649 _1154 = _1153; #line 649 float _1155 = F__NV__GetLinearizedDepth(_1154); #line 649 texels[3] = _1155; #line 650 float _1157 = dot(texels, float4(2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01)); #line 650 float avg = _1157; #line 651 float4 _1160 = avg.xxxx / texels; #line 651 float4 _1162 = float4(1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00) - _1160; #line 651 float4 _1163 = saturate(_1162); #line 651 float4 diff = _1163; #line 652 float _1165 = dot(texels, diff); #line 652 depth = _1165; #line 653 float _1167 = dot(diff, float4(1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00)); #line 653 float _1168 = depth / _1167; #line 653 depth = _1168; #line 655 float4 _1170 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, i.uv); #line 655 color = _1170; #line 656 float _1172 = depth * 1.00000000e+03; #line 656 float _1174 = 9.99000000e+02 - _1172; #line 656 float _1175 = saturate(_1174); #line 656 float4 _1177 = color * _1175.xxxx; #line 656 color = _1177; #line 658 float _1178; #line 658 _1178 = depth; #line 658 float _1179 = F__Projection__depth_to_z(_1178); #line 658 depth = _1179; return; } #line 662 void F__PS_Copy_1_to_2( #line 662 in S__VSOUT i, #line 662 out float4 o0 : SV_TARGET0, #line 662 out float4 o1 : SV_TARGET1) { #line 664 float4 _1186 = V__sGITex1.t.Sample(V__sGITex1.s, i.uv); #line 664 o0 = _1186; #line 665 float4 _1188 = V__sGBufferTex1.t.Sample(V__sGBufferTex1.s, i.uv); #line 665 o1 = _1188; return; } #line 669 void F__PS_Copy_0_to_1( #line 669 in S__VSOUT i, #line 669 out float4 o0 : SV_TARGET0, #line 669 out float4 o1 : SV_TARGET1) { #line 671 float4 _1195 = V__sGITex0.t.Sample(V__sGITex0.s, i.uv); #line 671 o0 = _1195; #line 672 float4 _1197 = V__sGBufferTex.t.Sample(V__sGBufferTex.s, i.uv); #line 672 o1 = _1197; return; } #line 676 void F__PS_RTMain( #line 676 in S__VSOUT i, #line 676 out float4 o : SV_TARGET0) { #line 678 S__VSOUT _1202; #line 678 _1202 = i; #line 678 S__RTInputs _1203 = F__init(_1202); #line 678 S__RTInputs parameters_1204 = _1203; #line 680 float3 _1207 = parameters_1204.pos * float3(9.99000013e-01, 9.99000013e-01, 9.99000013e-01); #line 680 parameters_1204.pos = _1207; #line 681 float _1208; #line 681 _1208 = parameters_1204.pos.z; #line 681 float _1210 = F__Projection__z_to_depth(_1208); #line 681 float3 _1213 = parameters_1204.normal * _1210.xxx; #line 681 float3 _1215 = parameters_1204.pos + _1213; #line 681 parameters_1204.pos = _1215; #line 682 S__VSOUT _1216; #line 682 int _1217; #line 682 float _1218; #line 682 _1216 = i; #line 682 _1217 = FRAME_COUNT; #line 682 _1218 = parameters_1204.jitter.x; #line 682 S__SampleSet _1220 = F__ray_sorting(_1216, _1217, _1218); #line 682 S__SampleSet sampleset = _1220; #line 684 o = float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00); #line 687 int r = 0; #line 687 int _1232 = 0 + parameters_1204.nrays; #line 687 bool _1233 = r < _1232; #line 687 [loop] while (_1233) { { #line 689 S__RayTracing__RayDesc ray_1238 = (S__RayTracing__RayDesc)0; #line 690 ray_1238.pos = parameters_1204.pos; #line 693 float _1242 = ((float)r) + sampleset.index; #line 693 float _1244 = _1242 / ((float)parameters_1204.nrays); #line 693 float _1246 = _1244 * 2.00000000e+00; #line 693 float _1248 = _1246 - 1.00000000e+00; #line 693 ray_1238.dir[2] = _1248; #line 694 float _1251 = ray_1238.dir.z * ray_1238.dir.z; #line 694 float _1253 = 1.00000000e+00 - _1251; #line 694 float _1254 = sqrt(_1253); #line 694 float2 _1257 = sampleset.dir_xy * _1254.xx; #line 694 ray_1238.dir.xy = _1257; #line 695 float3 _1260 = ray_1238.dir + parameters_1204.normal; #line 695 float3 _1261 = normalize(_1260); #line 695 ray_1238.dir = _1261; #line 697 float _1262 = RT_SAMPLE_RADIUS * RT_SAMPLE_RADIUS; #line 697 ray_1238.maxlen = _1262; #line 700 float2 _1265 = mul(sampleset.dir_xy, sampleset.nextdir); #line 700 sampleset.dir_xy = _1265; #line 702 float _1271 = dot(ray_1238.dir, parameters_1204.normal); #line 702 bool _1273 = _1271 < 0.00000000e+00; #line 702 if (_1273) { int _1234 = r; #line 687 int _1236 = _1234 + 1; #line 687 r = _1236; #line 687 int _1232 = 0 + parameters_1204.nrays; #line 687 _1233 = r < _1232; continue; } #line 705 float3 _1275 = normalize(parameters_1204.pos); #line 705 float _1277 = dot(_1275, ray_1238.dir); #line 705 float cos_view = _1277; #line 706 float _1279 = cos_view * cos_view; #line 706 float _1281 = 1.00000000e+00 - _1279; #line 706 float _1282 = rsqrt(_1281); #line 706 float _1284 = ray_1238.maxlen * _1282; #line 706 float _1286 = _1284 / ((float)parameters_1204.nsteps); #line 706 ray_1238.steplen = _1286; #line 707 float _1289 = ((float)r) * 1.61803401e+00; #line 707 float _1291 = parameters_1204.jitter.y + _1289; #line 707 float _1292 = frac(_1291); #line 707 float _1294 = ray_1238.steplen * _1292; #line 707 ray_1238.currlen = _1294; #line 709 S__RayTracing__RayDesc _1295; #line 709 S__RTInputs _1296; #line 709 S__VSOUT _1297; #line 709 _1295 = ray_1238; #line 709 _1296 = parameters_1204; #line 709 _1297 = i; #line 709 float _1298 = F__RayTracing__compute_intersection(_1295, _1296, _1297); #line 709 ray_1238 = _1295; #line 709 float intersected_1299 = _1298; #line 710 float _1301 = o.w + intersected_1299; #line 710 o[3] = _1301; #line 712 float _1305 = RT_IL_AMOUNT * intersected_1299; #line 712 bool _1307 = _1305 == 0.00000000e+00; #line 712 if (_1307) { int _1234 = r; #line 687 int _1236 = _1234 + 1; #line 687 r = _1236; #line 687 int _1232 = 0 + parameters_1204.nrays; #line 687 _1233 = r < _1232; continue; } #line 715 float _1310 = ray_1238.width + 2.00000000e+00; #line 715 float4 _1314 = float4(ray_1238.uv.x, ray_1238.uv.y, 0.00000000e+00, _1310); #line 715 float4 _1315 = V__sColorTex.t.SampleLevel(V__sColorTex.s, _1314.xy, _1314.w); #line 715 float3 albedo = _1315.xyz; #line 715 float3 _1318; #line 715 _1318 = albedo; #line 715 F__unpack_hdr(_1318); #line 715 albedo = _1318; #line 716 float4 _1324 = float4(ray_1238.uv.x, ray_1238.uv.y, 0.00000000e+00, 0.00000000e+00); #line 716 float4 _1325 = V__sGBufferTex.t.SampleLevel(V__sGBufferTex.s, _1324.xy, _1324.w); #line 716 float3 intersect_normal = _1325.xyz; #line 717 float3 _1328 = -intersect_normal; #line 717 float _1330 = dot(_1328, ray_1238.dir); #line 717 float _1332 = _1330 * 1.00000000e+02; #line 717 float _1333 = saturate(_1332); #line 717 float backface_check = _1333; #line 721 float _1337 = lerp(backface_check, 1.00000000e+00, 1.00000001e-01); #line 721 backface_check = _1337; #line 723 float3 _1339 = albedo * backface_check.xxx; #line 723 albedo = _1339; #line 724 float3 _1341 = o.xyz + albedo; #line 724 o.xyz = _1341; } int _1234 = r; #line 687 int _1236 = _1234 + 1; #line 687 r = _1236; #line 687 int _1232 = 0 + parameters_1204.nrays; #line 687 _1233 = r < _1232; } #line 727 float4 _1343 = o / ((float4)parameters_1204.nrays.xxxx); #line 727 o = _1343; #line 728 float3 _1344; #line 728 _1344 = o.xyz; #line 728 F__pack_hdr(_1344); #line 728 o.xyz = _1344; return; } #line 731 void F__PS_Combine( #line 731 in S__VSOUT i, #line 731 out float4 o : SV_TARGET0) { const float4 _1351[2] = { float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00) }; #line 733 float4 gi_1352[2] = _1351; const float4 _1353[2] = { float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00) }; #line 733 float4 gbuf[2] = _1353; #line 734 float4 _1356 = V__sGITex1.t.Sample(V__sGITex1.s, i.uv); #line 734 gi_1352[0] = _1356; #line 735 float4 _1358 = V__sGITex2.t.Sample(V__sGITex2.s, i.uv); #line 735 gi_1352[1] = _1358; #line 736 float4 _1360 = V__sGBufferTex1.t.Sample(V__sGBufferTex1.s, i.uv); #line 736 gbuf[0] = _1360; #line 737 float4 _1362 = V__sGBufferTex2.t.Sample(V__sGBufferTex2.s, i.uv); #line 737 gbuf[1] = _1362; #line 739 float4 _1364 = V__sGITex0.t.Sample(V__sGITex0.s, i.uv); #line 739 float4 combined = _1364; #line 740 float sumweight = 1.00000000e+00; #line 741 float4 _1369 = V__sGBufferTex.t.Sample(V__sGBufferTex.s, i.uv); #line 741 float4 gbuf_reference = _1369; #line 742 float4 gi_curr = combined; #line 745 int j = 0; #line 745 bool _1380 = j < 2; #line 745 [unroll] while (_1380) { { #line 747 float4 _1385 = gbuf_reference - gbuf[j]; #line 747 float4 _1386 = abs(_1385); #line 747 float4 delta_1387 = _1386; #line 749 float normal_sensitivity = 2.00000000e+00; #line 750 float z_sensitivity = 1.00000000e+00; #line 753 float time_delta = FRAME_TIME; #line 754 float _1394 = max(time_delta, 1.00000000e+00); #line 754 float _1396 = _1394 / 1.67000008e+01; #line 754 time_delta = _1396; #line 755 float4 _1398 = delta_1387 / time_delta.xxxx; #line 755 delta_1387 = _1398; #line 757 float3 _1401 = delta_1387.xyz * normal_sensitivity.xxx; #line 757 float4 _1405 = float4(_1401.x, _1401.y, _1401.z, z_sensitivity); #line 757 float _1406 = dot(delta_1387, _1405); #line 757 float d = _1406; #line 758 float _1408 = -d; #line 758 float _1409 = exp(_1408); #line 758 float w_1410 = _1409; #line 760 float4 _1413 = gi_1352[j] * w_1410.xxxx; #line 760 float4 _1414 = combined + _1413; #line 760 combined = _1414; #line 761 float _1415 = sumweight + w_1410; #line 761 sumweight = _1415; } int _1381 = j; #line 745 int _1383 = _1381 + 1; #line 745 j = _1383; #line 745 _1380 = j < 2; } #line 763 float4 _1417 = combined / sumweight.xxxx; #line 763 combined = _1417; #line 764 o = combined; #line 766 float _1423 = dot(gbuf[1], float4(1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00)); #line 766 bool _1425 = _1423 < 5.00000007e-02; #line 766 if (_1425) { #line 766 o = gi_curr; } return; } #line 769 void F__PS_Filter0( #line 769 in S__VSOUT i, #line 769 out float4 o : SV_TARGET0) { #line 771 S__VSOUT _1430; #line 771 int _1431; #line 771 bool _1432; #line 771 _1430 = i; #line 771 _1431 = 0; #line 771 _1432 = false; #line 771 float4 _1435 = F__Denoise__filter(_1430, V__sGITexFilterTemp0, _1431, _1432); #line 771 o = _1435; return; } #line 773 void F__PS_Filter1( #line 773 in S__VSOUT i, #line 773 out float4 o : SV_TARGET0) { #line 775 S__VSOUT _1440; #line 775 int _1441; #line 775 bool _1442; #line 775 _1440 = i; #line 775 _1441 = 1; #line 775 _1442 = false; #line 775 float4 _1445 = F__Denoise__filter(_1440, V__sGITexFilterTemp1, _1441, _1442); #line 775 o = _1445; return; } #line 777 void F__PS_Filter2( #line 777 in S__VSOUT i, #line 777 out float4 o : SV_TARGET0) { #line 779 S__VSOUT _1450; #line 779 int _1451; #line 779 bool _1452; #line 779 _1450 = i; #line 779 _1451 = 2; #line 779 _1452 = false; #line 779 float4 _1455 = F__Denoise__filter(_1450, V__sGITexFilterTemp0, _1451, _1452); #line 779 o = _1455; return; } #line 781 void F__PS_Filter3( #line 781 in S__VSOUT i, #line 781 out float4 o : SV_TARGET0) { #line 783 S__VSOUT _1460; #line 783 int _1461; #line 783 bool _1462; #line 783 _1460 = i; #line 783 _1461 = 3; #line 783 _1462 = false; #line 783 float4 _1465 = F__Denoise__filter(_1460, V__sGITexFilterTemp1, _1461, _1462); #line 783 o = _1465; return; } #line 786 void F__PS_Disp( #line 786 in S__VSOUT i, #line 786 out float4 o : SV_TARGET0) { #line 788 float4 _1471 = V__sGITexFilterTemp0.t.Sample(V__sGITexFilterTemp0.s, i.uv); #line 788 float4 gi_1472 = _1471; #line 789 float4 _1474 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, i.uv); #line 789 float3 color_1476 = _1474.xyz; #line 791 float3 _1477; #line 791 _1477 = color_1476; #line 791 F__unpack_hdr(_1477); #line 791 color_1476 = _1477; #line 792 float3 _1479; #line 792 _1479 = gi_1472.xyz; #line 792 F__unpack_hdr(_1479); #line 792 gi_1472.xyz = _1479; #line 794 float3 _1483 = color_1476 + float3(9.99999975e-06, 9.99999975e-06, 9.99999975e-06); #line 794 float3 _1484 = normalize(_1483); #line 794 float3 _1487 = gi_1472.xyz + float3(9.99999975e-06, 9.99999975e-06, 9.99999975e-06); #line 794 float3 _1488 = normalize(_1487); #line 794 float _1489 = distance(_1484, _1488); #line 794 float similarity = _1489; #line 795 float _1492 = similarity * 3.00000000e+00; #line 795 float _1493 = saturate(_1492); #line 795 similarity = _1493; #line 796 float _1496 = dot(gi_1472.xyz, float3(3.33299994e-01, 3.33299994e-01, 3.33299994e-01)); #line 796 float _1498 = similarity * 5.00000000e-01; #line 796 float _1500 = _1498 + 5.00000000e-01; #line 796 float _1501 = saturate(_1500); #line 796 float3 _1505 = lerp(_1496.xxx, gi_1472.xyz, _1501.xxx); #line 796 gi_1472.xyz = _1505; #line 798 S__VSOUT _1506; #line 798 _1506 = i; #line 798 float _1507 = F__fade_distance(_1506); #line 798 float fade_1508 = _1507; #line 799 float4 _1510 = gi_1472 * fade_1508.xxxx; #line 799 gi_1472 = _1510; #line 801 float3 _1513 = gi_1472.xyz * RT_IL_AMOUNT.xxx; #line 801 float3 _1515 = _1513 * RT_IL_AMOUNT.xxx; #line 801 float3 _1517 = float3(1.00000000e+00, 1.00000000e+00, 1.00000000e+00) + _1515; #line 801 float3 _1518 = color_1476 * _1517; #line 801 color_1476 = _1518; #line 802 float _1520 = gi_1472.w * RT_AO_AMOUNT; #line 802 float _1522 = 1.00000000e+00 + _1520; #line 802 float3 _1524 = color_1476 / _1522.xxx; #line 802 color_1476 = _1524; #line 804 float3 _1525; #line 804 _1525 = color_1476.xyz; #line 804 F__pack_hdr(_1525); #line 804 color_1476.xyz = _1525; #line 807 S__VSOUT _1528; #line 807 _1528 = i; #line 807 float3 _1529 = F__dither(_1528); #line 807 float3 _1530 = color_1476 + _1529; #line 807 color_1476 = _1530; #line 808 float4 _1535 = float4(color_1476.x, color_1476.y, color_1476.z, 1.00000000e+00); #line 808 o = _1535; return; }