Last active
June 14, 2023 14:41
-
-
Save kristiker/45388b8806913540f58ba4173a427f39 to your computer and use it in GitHub Desktop.
Vr Simple
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// VULKAN[6] source bytes (39936) ref=5b6d78009026a5acc5e0a9f79e9b14dc | |
// SPIR-V source (39844), Glsl reflection with SPIRV-Cross, KhronosGroup | |
// D_BAKED_LIGHTING_FROM_LIGHTMAP == 1 | |
// D_COMPRESSED_NORMALS_AND_TANGENTS == 0 | |
// D_BLEND == 0 | |
// vs[0][20] | |
// ps[0](6) | |
// Stage: VS | |
cbuffer PerViewConstantBuffer_t : register(b15) | |
{ | |
float g_flTime : packoffset(c21.w); | |
column_major float4x4 g_matWorldToProjectionMultiview[2] : packoffset(c32); | |
float4 g_vWorldToCameraOffsetMultiview[2] : packoffset(c45); | |
}; | |
cbuffer BakedLightingConstantBuffer_t : register(b18) | |
{ | |
float4 g_vLightmapUvScale : packoffset(c0); | |
}; | |
cbuffer PerViewConstantBufferVR_t : register(b17) | |
{ | |
float4 vInteractionTriggerVolumeWorldToVolumeScale : packoffset(c36); | |
}; | |
cbuffer _Globals_Vs_ : register(b14) | |
{ | |
float2 g_vTexCoordScale : packoffset(c9); | |
float2 g_vTexCoordOffset : packoffset(c9.z); | |
float2 g_vTexCoordScrollSpeed : packoffset(c10); | |
float3 g_vColorTint : packoffset(c14); | |
float g_flModelTintAmount : packoffset(c14.w); | |
float g_flFadeExponent : packoffset(c15); | |
}; | |
Texture2D<float4> g_tTransformTexture; | |
SamplerState smpl; | |
static float4 gl_Position; | |
static float3 vPositionOs; | |
static float2 vTexCoord; | |
static float4 vNormalOs; | |
static float4 vTangentUOs_flTangentVSign; | |
static float2 vTransformTextureUV; | |
static float2 vLightmapUV; | |
struct VS_INPUT | |
{ | |
float4 vNormalOs : NORMAL0 < Semantic( OptionallyCompressedTangentFrame ); >; | |
float2 vLightmapUV : TEXCOORD3 < Semantic( LightmapUV ); >; // D_BAKED_LIGHTING_FROM_LIGHTMAP=1 | |
float3 vPositionOs : POSITION0 < Semantic( PosXyz ); >; | |
float4 vTangentUOs_flTangentVSign : TANGENT0 < Semantic( TangentU_SignV ); >; // D_COMPRESSED_NORMALS_AND_TANGENTS=0 | |
float2 vTexCoord : TEXCOORD0 < Semantic( LowPrecisionUv ); >; | |
float2 vTransformTextureUV : TEXCOORD13 < Semantic( InstanceTransformUv ); >; | |
}; | |
void MainVs() | |
{ | |
float3x4 transform = float3x4( | |
g_tTransformTexture.SampleLevel(smpl, vTransformTextureUV, 0.0f), | |
g_tTransformTexture.SampleLevel(smpl, vTransformTextureUV, 0.0f, int2(1, 0)), | |
g_tTransformTexture.SampleLevel(smpl, vTransformTextureUV, 0.0f, int2(2, 0)) | |
); | |
float4 instanceData = g_tTransformTexture.SampleLevel(smpl, vTransformTextureUV, 0.0f, int2(3, 0)); | |
float instanceFade = instanceData.x; | |
uint _13689 = asuint(instanceData.y); | |
float3 instanceTint; | |
instanceTint.x = float((_13689 >> uint(16)) & 255u) * 0.0039215688593685626983642578125f; | |
instanceTint.y = float((_13689 >> uint(8)) & 255u) * 0.0039215688593685626983642578125f; | |
instanceTint.z = float((_13689 >> uint(0)) & 255u) * 0.0039215688593685626983642578125f; | |
float3 normalWs = normalize(mul(transform, float4(vNormalOs.xyz, 0.0f))); | |
float3 positionWs = mul(transform, float4(vPositionOs, 1.0f)); | |
float4 positionMultiView = mul(g_matWorldToProjectionMultiview[0u], float4(positionWs, 1.0f) + (g_vWorldToCameraOffsetMultiview[0u] * 1.0f)); | |
float3 _8849 = mul(transform, float4(vTangentUOs_flTangentVSign.xyz, 0.0f)); | |
float3 tangent = normalize(_8849 - (normalWs * dot(_8849, normalWs))); | |
float3 tint = lerp(1.0f.xxx, instanceTint.xyz, g_flModelTintAmount.xxx).xyz * g_vColorTint; | |
float4 vertexColor = float4(tint, pow(instanceFade, g_flFadeExponent)); | |
vPositionWs = positionWs - vInteractionTriggerVolumeWorldToVolumeScale.xyz; | |
vNormalWs = normalWs; | |
vTextureCoords = ((vTexCoord * g_vTexCoordScale) + g_vTexCoordOffset) + (g_vTexCoordScrollSpeed * g_flTime); | |
vLightmapUV = vLightmapUV * g_vLightmapUvScale.xy; | |
vVertexColor = vertexColor; | |
vCentroidNormalWs = normalWs; | |
vTangentUWs = tangent; | |
vTangentVWs = cross(normalWs, tangent) * vTangentUOs_flTangentVSign.w; | |
nView = asuint(instanceData.z) & 65535u; | |
positionMultiView.y = -positionMultiView.y; | |
gl_Position = positionMultiView; | |
} | |
PS_INPUT main(VS_INPUT stage_input) | |
{ | |
vPositionOs = stage_input.vPositionOs; | |
vTexCoord = stage_input.vTexCoord; | |
vNormalOs = stage_input.vNormalOs; | |
vTangentUOs_flTangentVSign = stage_input.vTangentUOs_flTangentVSign; | |
vTransformTextureUV = stage_input.vTransformTextureUV; | |
vLightmapUV = stage_input.vLightmapUV; | |
MainVs(); | |
PS_INPUT stage_output; | |
stage_output.gl_Position = gl_Position; | |
stage_output.vPositionWs = vPositionWs; | |
stage_output.vNormalWs = vNormalWs; | |
stage_output.vTextureCoords = vTextureCoords; | |
stage_output.vLightmapUV = vLightmapUV; | |
stage_output.vVertexColor = vVertexColor; | |
stage_output.vCentroidNormalWs = vCentroidNormalWs; | |
stage_output.vTangentUWs = vTangentUWs; | |
stage_output.vTangentVWs = vTangentVWs; | |
stage_output.nView = nView; | |
return stage_output; | |
} | |
// Stage: PS | |
//static float4 _16738; | |
//static float4 _13853; | |
//static int2 _18779; | |
cbuffer PerViewConstantBuffer_t : register(b1) | |
{ | |
float3 g_vCameraPositionWs : packoffset(c19); | |
float4 g_vCameraPositionWsMultiview[2] : packoffset(c40); | |
}; | |
#if (D_BAKED_LIGHTING_FROM_LIGHT_PROBE == 1) | |
cbuffer PerBatchLightProbeVolumeConstantBuffer_t : register(b2) | |
{ | |
column_major float4x3 g_matLightProbeVolumeWorldToLocal : packoffset(c0); | |
float4 g_vLightProbeVolumeLayer0TextureMin : packoffset(c3); | |
float4 g_vLightProbeVolumeLayer0TextureMax : packoffset(c4); | |
float4 g_vLightProbeVolumeColor : packoffset(c5); | |
}; | |
#endif | |
cbuffer PerViewConstantBufferVR_t : register(b3) | |
{ | |
uint4 g_bFogTypeEnabled : packoffset(c0); | |
uint4 g_bOtherFxEnabled : packoffset(c1); | |
float4 g_vAoProxyDownres : packoffset(c2); | |
float4 g_vGradientFogBiasAndScale : packoffset(c10); | |
float4 m_vGradientFogExponents : packoffset(c11); | |
float4 g_vGradientFogColor_Opacity : packoffset(c12); | |
float4 g_vGradientFogCullingParams : packoffset(c13); | |
float4 g_vCubeFog_Offset_Scale_Bias_Exponent : packoffset(c14); | |
float4 g_vCubeFog_Height_Offset_Scale_Exponent_Log2Mip : packoffset(c15); | |
column_major float4x4 g_matvCubeFogSkyWsToOs : packoffset(c16); | |
float4 g_vCubeFogCullingParams : packoffset(c20); | |
float4 g_vSphericalVignetteBiasAndScale : packoffset(c21); | |
float4 g_vSphericalVignetteOrigin_Exponent : packoffset(c22); | |
float4 g_vSphericalVignetteColor_Opacity : packoffset(c23); | |
float4 g_vVolFogDitherScaleBias : packoffset(c25); | |
float4 g_vVolFogPostWorldToFrustumScale : packoffset(c26); | |
float4 g_vVolFogPostWorldToFrustumBias : packoffset(c27); | |
column_major float4x4 g_mVolFogFromWorld[2] : packoffset(c28); | |
float4 g_vHighPrecisionLightingOffsetWs : packoffset(c36); | |
}; | |
cbuffer PerViewRuntimeFastPathLightingConstantBuffer_t : register(b5) | |
{ | |
int4 g_vFastPathNumLights : packoffset(c0); | |
float4 g_vSingleLightPosition_flInvRadius : packoffset(c1); | |
float4 g_vSingleLightColor : packoffset(c2); | |
float4 g_vSingleLightFalloffParams : packoffset(c3); | |
column_major float4x4 g_matSingleLightWorldToCookie : packoffset(c5); | |
column_major float4x4 g_matSingleLightWorldToShadow : packoffset(c9); | |
float4 g_vFxLightColors[8] : packoffset(c14); | |
float4 g_vFxLightPositions[8] : packoffset(c22); | |
float4 g_vBakedLightPosition[256] : packoffset(c30); | |
float4 g_vBakedLightColor[256] : packoffset(c286); | |
column_major float4x4 g_matWorldToBakedLightShadow[2] : packoffset(c542); | |
float4 g_vBakedLightShadowBounds : packoffset(c550); | |
float4 g_vBakedLightCascadeThreshold[4] : packoffset(c551); | |
float4 g_vBakedLightShadowStrengthVignette : packoffset(c555); | |
int4 g_vBakedLightShadowIntParams : packoffset(c556); | |
float4 g_vEnvironmentMapSizeConstants : packoffset(c1101); | |
column_major float4x3 g_matEnvMapWorldToLocal[144] : packoffset(c1102); | |
float4 g_vEnvironmentMapBoxMins[144] : packoffset(c1534); | |
float4 g_vEnvironmentMapBoxMaxs[144] : packoffset(c1678); | |
float4 g_vEnvironmentMapProxySphere[144] : packoffset(c1822); | |
float4 g_vEnvironmentMapColorRotated[144] : packoffset(c1966); | |
float4 g_vEnvironmentMapNormalizationSH[144] : packoffset(c2110); | |
}; | |
cbuffer PerViewLightingConstantBufferVr_t : register(b4) | |
{ | |
float4 g_vShadow3x3PCFTermC0 : packoffset(c1286); | |
float4 g_vShadow3x3PCFTermC1 : packoffset(c1287); | |
float4 g_vShadow3x3PCFTermC2 : packoffset(c1288); | |
float4 g_vShadow3x3PCFTermC3 : packoffset(c1289); | |
float4 g_vLightmapParams : packoffset(c1312); | |
float4 g_vScreenSpaceDitherParams : packoffset(c1313); | |
float4 g_vAmbientOcclusionProxyLightPositions[4] : packoffset(c2343); | |
float4 g_vAmbientOcclusionProxyLightStrengths : packoffset(c2348); | |
float4 g_vAmbientOcclusionProxyAmbientStrength : packoffset(c2349); | |
float4 g_vCubemapNormalizationParams : packoffset(c2350); | |
}; | |
cbuffer _Globals_ : register(b0) | |
{ | |
float g_flDirectionalLightmapStrength : packoffset(c0.z); | |
float g_flDirectionalLightmapMinZ : packoffset(c0.w); | |
uint g_bFogEnabled : packoffset(c1); | |
float g_flMetalness : packoffset(c9.y); | |
}; | |
Texture2D<float4> g_tColor; | |
Texture2D<float4> g_tNormal; | |
Texture3D<float4> g_tVrLightCookieTexture; | |
Texture2D<float4> g_tVrShadowDepthBufferDepth; | |
//Texture2D<float4> g_tBlueNoise; | |
Texture2D<float4> g_tDynamicAmbientOcclusionDepth; | |
Texture2D<float4> g_tDynamicAmbientOcclusion; | |
#if (D_BAKED_LIGHTING_FROM_LIGHTMAP == 1) | |
Texture2DArray<float4> g_tLightmap0; | |
Texture2DArray<float4> g_tLightmap1; | |
Texture2DArray<float4> g_tLightmap2; | |
Texture2DArray<float4> g_tLightmap3; | |
#endif | |
#if (D_BAKED_LIGHTING_FROM_LIGHT_PROBE == 1) | |
Texture3D<float4> g_tLightProbeVolumeTexture; | |
Texture3D<float4> g_tLightProbeVolumeTextureDirectLightIndices; | |
Texture3D<float4> g_tLightProbeVolumeTextureDirectLightScalars; | |
#endif | |
TextureCubeArray<float4> g_tEnvironmentMap; | |
Texture2D<float4> g_tBRDFLookup; | |
TextureCube<float4> g_tFogCubeTexture; | |
Texture2D<float4> g_tFogSomething; | |
Texture3D<float4> g_tFogVolume; | |
static float4 gl_FragCoord; | |
static float3 vPositionWs; | |
static float3 vNormalWs; | |
static float2 vTextureCoords; | |
static float2 vLightmapUV; | |
static float4 vVertexColor; | |
static float3 vCentroidNormalWs; | |
static float3 vTangentUWs; | |
static float3 vTangentVWs; | |
static uint nView; | |
static float4 outColor; | |
struct PS_INPUT | |
{ | |
float3 vPositionWs : TEXCOORD0; // vPositionWithOffsetWs? | |
float3 vNormalWs : TEXCOORD1; | |
float2 vTextureCoords : TEXCOORD2; | |
centroid float2 vLightmapUV : TEXCOORD3; // D_BAKED_LIGHTING_FROM_LIGHTMAP=1 | |
float4 vVertexColor : TEXCOORD4; | |
centroid float3 vCentroidNormalWs : TEXCOORD5; // S_SPECULAR=1 | |
float3 vTangentUWs : TEXCOORD6; // PS_INPUT_HAS_TANGENT_BASIS=1 | |
float3 vTangentVWs : TEXCOORD7; // PS_INPUT_HAS_TANGENT_BASIS=1 | |
nointerpolation uint nView : TEXCOORD8; // D_MULTIVIEW_INSTANCING=1 | |
float4 gl_FragCoord : SV_Position; | |
}; | |
uint2 spvTextureSize(Texture2D<float4> Tex, uint Level, out uint Param) | |
{ | |
uint2 ret; | |
Tex.GetDimensions(Level, ret.x, ret.y, Param); | |
return ret; | |
} | |
void MainPs() | |
{ | |
bool3 _13596 = (dot(vNormalWs, vNormalWs) >= 1.001f).xxx; | |
float3 vNormalHQ = normalize(float3(_13596.x ? vCentroidNormalWs.x : vNormalWs.x, _13596.y ? vCentroidNormalWs.y : vNormalWs.y, _13596.z ? vCentroidNormalWs.z : vNormalWs.z)); | |
float3 vHiPos = vPositionWs + g_vHighPrecisionLightingOffsetWs.xyz; | |
uint Instance = nView >> uint(8); | |
float4 albedo = g_tColor.Sample(vTextureCoords); | |
float3 color = albedo.xyz * vVertexColor.xyz; | |
// Hemi-Octahedral Normal Decoding | |
float4 _23868 = g_tNormal.Sample(vTextureCoords); | |
float _14039 = _23868.x; | |
float _17759 = _23868.y; | |
float _19991 = (_14039 + _17759) - 1.00392162799835205078125f; | |
float _10151 = _14039 - _17759; | |
float3 _11997 = normalize(float3(_19991, _10151, (1.0f - abs(_19991)) - abs(_10151))); | |
float _8397 = -_11997.y; | |
float3 _19957 = _11997; | |
_19957.y = _8397; | |
float3 N = normalize(((normalize(vTangentUWs) * _11997.x) + (normalize(vTangentVWs) * _8397)) + (vNormalHQ * _11997.z)); | |
float3 F0 = lerp(0.04f.xxx, color, g_flMetalness.xxx); | |
float3 _14502 = ddx(vNormalHQ); | |
float3 _13285 = ddy(vNormalHQ); | |
float2 roughness = max(_23868.zz, pow(clamp(max(dot(_14502, _14502), dot(_13285, _13285)), 0.0f, 1.0f), 0.333000004291534423828125f).xx); | |
float3 _11252; | |
float3 _13710; | |
do | |
{ | |
float3 _11251; | |
float3 _13709; | |
[branch] | |
if (g_vFastPathNumLights.x != 0) | |
{ | |
float2 _15083 = ((1.0f.xx - roughness) * 0.800000011920928955078125f) + 0.60000002384185791015625f.xx; | |
float3 V = -normalize(vHiPos - g_vCameraPositionWs); | |
float3 _7361 = g_vSingleLightPosition_flInvRadius.xyz - vPositionWs; | |
float3 L = normalize(_7361); | |
float _13058 = dot(_7361, _7361); | |
[branch] | |
if (_13058 > g_vSingleLightFalloffParams.z) | |
{ | |
_11252 = 0.0f.xxx; | |
_13710 = 0.0f.xxx; | |
break; | |
} | |
float4 _23852 = float4(vPositionWs, 1.0f); | |
float4 _11050 = mul(_23852, g_matSingleLightWorldToCookie); | |
float3 _7829 = g_tVrLightCookieTexture.SampleLevel((_11050.xyz / _11050.w.xxx).xyz, 0.0f).xyz * g_vSingleLightColor.xyz; | |
[branch] | |
if (dot(_7829, _7829) == 0.0f) | |
{ | |
_11252 = 0.0f.xxx; | |
_13710 = 0.0f.xxx; | |
break; | |
} | |
float _13715 = max(_13058, 1.0f); | |
float3 lightColor = _7829 * clamp((1.0f / dot(float2(sqrt(_13715), _13715), g_vSingleLightFalloffParams.xy)) - g_vSingleLightFalloffParams.w, 0.0f, 1.0f); | |
float4 _22932 = mul(_23852, g_matSingleLightWorldToShadow); | |
float3 _21195 = _22932.xyz / _22932.w.xxx; | |
float _21074; | |
do | |
{ | |
float2 _19763 = _21195.xy; | |
float _18993 = clamp(_21195.z - 9.9999999747524270787835121154785e-07f, 0.0f, 1.0f); | |
float4 _17516; | |
_17516.x = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19763 + _24634_m3.xx, _18993).xy, _18993); | |
_17516.y = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19763 + _24634_m3.yx, _18993).xy, _18993); | |
_17516.z = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19763 + _24634_m3.xy, _18993).xy, _18993); | |
_17516.w = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19763 + _24634_m3.yy, _18993).xy, _18993); | |
float _6480 = dot(_17516, 0.25f.xxxx); | |
if ((_6480 == 0.0f) || (_6480 == 1.0f)) | |
{ | |
_21074 = _6480; | |
break; | |
} | |
float4 _17519; | |
_17519.x = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19763 + _24634_m2.wz, _18993).xy, _18993); | |
_17519.y = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19763 + _24634_m1.zw, _18993).xy, _18993); | |
_17519.z = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19763 + _24634_m1.wz, _18993).xy, _18993); | |
_17519.w = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19763 + _24634_m2.zw, _18993).xy, _18993); | |
_21074 = ((_6480 * (g_vShadow3x3PCFTermC0.w * 4.0f)) + dot(_17519, _24634_m1.xxxx)) + (g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_21195.xy, _18993).xy, _18993) * _24634_m1.y); | |
break; | |
} while(false); | |
[branch] | |
if (_21074 <= 0.0f) | |
{ | |
_11252 = 0.0f.xxx; | |
_13710 = 0.0f.xxx; | |
break; | |
} | |
// BRDF | |
float dotNL = max(0.0f, dot(N, L)); | |
float _8107 = (_15083.x + _15083.y) * 0.5f; | |
float3 H = normalize(L + V); | |
float dotNH = dot(H, N); | |
float2 _12038 = roughness.xx; | |
float2 _20486 = _12038 * _12038; | |
float2 _7196 = _20486 / ((((_20486 * _20486) - 1.0f.xx) * (dotNH * dotNH)) + 1.0f.xx); | |
float2 _20646 = _12038 + 1.0f.xx; | |
float2 k = (_20646 * _20646) / 8.0f; | |
float2 _12933 = 1.0f.xx - k; | |
_11251 = ((((_8107 + 1.0f) * 0.5f).xxx * pow(dotNL, _8107)) * _21074) * lightColor; | |
_13709 = (((F0 + (((1.0f.xxx - F0) * 1.0f) * pow(1.0f - max(0.0f, dot(L, H)), 5.0f))) * (((_7196 * _7196) / ((4.0f.xx * ((dotNL.xx * _12933) + k)) * ((max(0.0f, dot(N, V)).xx * _12933) + k))).x * dotNL)) * _21074) * lightColor; | |
} | |
else | |
{ | |
_11251 = 0.0f.xxx; | |
_13709 = 0.0f.xxx; | |
} | |
_11252 = _11251; | |
_13710 = _13709; | |
break; | |
} while(false); | |
float3 _7755; | |
_7755 = _11252; | |
for (int _10303 = 0; _10303 < g_vFastPathNumLights.y; ) | |
{ | |
float3 _7362 = g_vFxLightPositions[_10303].xyz - vPositionWs; | |
_7755 += (g_vFxLightColors[_10303].xyz * (max(0.0f, dot(N, normalize(_7362))) * clamp((1.0f / length(_7362)) - g_vFxLightPositions[_10303].w, 0.0f, 1.0f))); | |
_10303++; | |
continue; | |
} | |
float _13061 = dot(roughness, 0.5f.xx); | |
float3 _6962 = vHiPos - g_vCameraPositionWsMultiview[0u].xyz; | |
float3 V = normalize(_6962); | |
float3 Vinv = -V; | |
float aoTermProxies; | |
// Ao Proxies | |
if (g_bOtherFxEnabled.x != 0u) | |
{ | |
float4 _20201; | |
_20201.x = dot(g_vAmbientOcclusionProxyLightPositions[0].xyz, vNormalHQ); | |
_20201.y = dot(g_vAmbientOcclusionProxyLightPositions[1].xyz, vNormalHQ); | |
_20201.z = dot(g_vAmbientOcclusionProxyLightPositions[2].xyz, vNormalHQ); | |
_20201.w = dot(g_vAmbientOcclusionProxyLightPositions[3].xyz, vNormalHQ); | |
uint _16733_dummy_parameter; | |
uint2 _16733 = spvTextureSize(_4573, uint(0), _16733_dummy_parameter); | |
int2 _20362; | |
_20362.x = int(_16733.x); | |
_20362.y = int(_16733.y); | |
float2 _24086 = 1.0f.xx / float2(_20362); | |
float2 _17863 = (floor(gl_FragCoord.xy * g_vAoProxyDownres.x) * _24086) + (_24086 * 0.5f); | |
float4 _20482 = g_tDynamicAmbientOcclusionDepth.GatherRed(_17863) - gl_FragCoord.zzzz; | |
float _16618 = _20482.w; | |
float _16509 = _20482.z; | |
float _6608; | |
float2 _8059; | |
if (abs(_16509) < _16618) | |
{ | |
_8059 = float2(_24086.x, 0.0f); | |
_6608 = _16509; | |
} | |
else | |
{ | |
_8059 = 0.0f.xx; | |
_6608 = _16618; | |
} | |
float _24672 = _20482.x; | |
float _6609; | |
float2 _8060; | |
if (abs(_24672) < _6608) | |
{ | |
_8060 = float2(0.0f, _24086.y); | |
_6609 = _24672; | |
} | |
else | |
{ | |
_8060 = _8059; | |
_6609 = _6608; | |
} | |
bool2 _11046 = (abs(_20482.y) < _6609).xx; | |
float4 _13652 = max(_20201, 0.0f.xxxx) * g_vAmbientOcclusionProxyLightStrengths; | |
aoTermProxies = (1.0f / (dot(_13652, 1.0f.xxxx) + g_vAmbientOcclusionProxyAmbientStrength.x)) * (g_vAmbientOcclusionProxyAmbientStrength.x + dot(_13652, g_tDynamicAmbientOcclusion.Sample(_17863 + float2(_11046.x ? _24086.x : _8060.x, _11046.y ? _24086.y : _8060.y)))); | |
} | |
else | |
{ | |
aoTermProxies = 1.0f; | |
} | |
#if (D_BAKED_LIGHTING_FROM_LIGHTMAP == 1) | |
float3 vLightmapUVW = float3(vLightmapUV, 0.0f); | |
int4 vLightIndices = int4(g_tLightmap0.Sample(vLightmapUVW) * 255.0f); | |
float4 vLightStrengths = g_tLightmap1.Sample(vLightmapUVW); | |
// Ambient Highlight Direction (directional lightmap) data | |
float3 vIrradiance = g_tLightmap2.Sample(vLightmapUVW).rgb; | |
float4 vAHDData = g_tLightmap3.Sample(vLightmapUVW); | |
float2 vHighlightXY = (vAHDData.xy * 2.0f) - 1.0f.xx; | |
float _20977 = 1.0f - sqrt(dot(vHighlightXY, vHighlightXY)); | |
float3 vAmbientColor = vIrradiance * saturate(lerp(1.0f, vAHDData.z, g_flDirectionalLightmapStrength) + g_vLightmapParams.x); | |
float3 finalAmbient = vAmbientColor + (((vIrradiance - vAmbientColor) / max(_20977, g_flDirectionalLightmapMinZ).xxx) * max(0.0f, dot(float3(vHighlightXY, _20977), _19957))); | |
#endif | |
#if (D_BAKED_LIGHTING_FROM_LIGHT_PROBE == 1) | |
float3 probePos = mul(float4(vHiPos, 1.0f), g_matLightProbeVolumeWorldToLocal); | |
float3 temp = probePos; | |
probePos.z *= 0.16666667f; | |
float3 clampedPos = clamp(temp, g_vLightProbeVolumeLayer0TextureMin.xyz, g_vLightProbeVolumeLayer0TextureMax.xyz); | |
float3 lerped = lerp( | |
float3(0.0f, 0.16666667f, 0.3333333f), | |
float3(0.5f, 0.66666667f, 0.8333333f), | |
step(N, 0.0f) | |
); | |
float3 normalSquared = N * N; | |
int4 vLightIndices = int4(g_tLightProbeVolumeTextureDirectLightIndices.SampleLevel(probePos, 0.0f) * 255.0f); | |
float4 vLightStrengths = g_tLightProbeVolumeTextureDirectLightScalars.SampleLevel(probePos, 0.0f); | |
float3 finalAmbient = ( | |
(g_tLightProbeVolumeTexture.SampleLevel(clampedPos + float3(0.0f, 0.0f, lerped.x), 0.0f).xyz * normalSquared.x) | |
+ (g_tLightProbeVolumeTexture.SampleLevel(clampedPos + float3(0.0f, 0.0f, lerped.y), 0.0f).xyz * normalSquared.y) | |
+ (g_tLightProbeVolumeTexture.SampleLevel(clampedPos + float3(0.0f, 0.0f, lerped.z), 0.0f).xyz * normalSquared.z)) | |
* g_vLightProbeVolumeColor.xyz; | |
#endif | |
float4 thisFilter = float4(bool4( | |
vLightIndices.x == g_vBakedLightShadowIntParams.x, | |
vLightIndices.y == g_vBakedLightShadowIntParams.y, | |
vLightIndices.z == g_vBakedLightShadowIntParams.z, | |
vLightIndices.w == g_vBakedLightShadowIntParams.w | |
)) * g_vBakedLightShadowStrengthVignette.xxxx; | |
float4 lightStrengths2 = vLightStrengths * vLightStrengths; | |
float4 StrengthF = lightStrengths2 * thisFilter; | |
float4 _16269; | |
[branch] | |
if (any(bool4(StrengthF.x != 0.0f, StrengthF.y != 0.0f, StrengthF.z != 0.0f, StrengthF.w != 0.0f))) | |
{ | |
float _16268; | |
[branch] | |
if (g_vBakedLightCascadeThreshold[0].w != 0.0f) | |
{ | |
float4 _22026 = float4(vPositionWs, 1.0f); | |
float _13959 = smoothstep(1.0f, g_vBakedLightShadowStrengthVignette.y, max(abs(dot(g_vBakedLightCascadeThreshold[0], _22026)), abs(dot(g_vBakedLightCascadeThreshold[1], _22026)))); | |
float _14525 = 1.0f - _13959; | |
float _20599 = smoothstep(1.0f, g_vBakedLightShadowStrengthVignette.z, max(abs(dot(g_vBakedLightCascadeThreshold[2], _22026)), abs(dot(g_vBakedLightCascadeThreshold[3], _22026)))) * _14525; | |
float _16216 = _14525 - _20599; | |
float _22112; | |
[branch] | |
if (_13959 != 0.0f) | |
{ | |
float4 _22933 = mul(_22026, g_matWorldToBakedLightShadow[0]); | |
float3 _21196 = _22933.xyz / _22933.w.xxx; | |
float _9276; | |
do | |
{ | |
float2 _19765 = _21196.xy; | |
float _18995 = clamp(_21196.z - 9.9999999747524270787835121154785e-07f, 0.0f, 1.0f); | |
float4 _17529; | |
_17529.x = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19765 + _24634_m3.xx, _18995).xy, _18995); | |
_17529.y = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19765 + _24634_m3.yx, _18995).xy, _18995); | |
_17529.z = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19765 + _24634_m3.xy, _18995).xy, _18995); | |
_17529.w = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19765 + _24634_m3.yy, _18995).xy, _18995); | |
float _6482 = dot(_17529, 0.25f.xxxx); | |
if ((_6482 == 0.0f) || (_6482 == 1.0f)) | |
{ | |
_9276 = _6482; | |
break; | |
} | |
float4 _17532; | |
_17532.x = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19765 + _24634_m2.wz, _18995).xy, _18995); | |
_17532.y = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19765 + _24634_m1.zw, _18995).xy, _18995); | |
_17532.z = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19765 + _24634_m1.wz, _18995).xy, _18995); | |
_17532.w = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19765 + _24634_m2.zw, _18995).xy, _18995); | |
_9276 = ((_6482 * (g_vShadow3x3PCFTermC0.w * 4.0f)) + dot(_17532, _24634_m1.xxxx)) + (g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_21196.xy, _18995).xy, _18995) * _24634_m1.y); | |
break; | |
} while(false); | |
_22112 = _16216 + (_13959 * _9276); | |
} | |
else | |
{ | |
_22112 = _16216; | |
} | |
float _10542; | |
[branch] | |
if (_20599 != 0.0f) | |
{ | |
float4 _22934 = mul(_22026, g_matWorldToBakedLightShadow[1]); | |
float3 _21197 = _22934.xyz / _22934.w.xxx; | |
float _9277; | |
do | |
{ | |
float2 _19766 = _21197.xy; | |
float _18996 = clamp(_21197.z - 9.9999999747524270787835121154785e-07f, 0.0f, 1.0f); | |
float4 _17535; | |
_17535.x = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19766 + _24634_m3.xx, _18996).xy, _18996); | |
_17535.y = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19766 + _24634_m3.yx, _18996).xy, _18996); | |
_17535.z = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19766 + _24634_m3.xy, _18996).xy, _18996); | |
_17535.w = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19766 + _24634_m3.yy, _18996).xy, _18996); | |
float _6483 = dot(_17535, 0.25f.xxxx); | |
if ((_6483 == 0.0f) || (_6483 == 1.0f)) | |
{ | |
_9277 = _6483; | |
break; | |
} | |
float4 _17538; | |
_17538.x = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19766 + _24634_m2.wz, _18996).xy, _18996); | |
_17538.y = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19766 + _24634_m1.zw, _18996).xy, _18996); | |
_17538.z = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19766 + _24634_m1.wz, _18996).xy, _18996); | |
_17538.w = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19766 + _24634_m2.zw, _18996).xy, _18996); | |
_9277 = ((_6483 * (g_vShadow3x3PCFTermC0.w * 4.0f)) + dot(_17538, _24634_m1.xxxx)) + (g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_21197.xy, _18996).xy, _18996) * _24634_m1.y); | |
break; | |
} while(false); | |
_10542 = _22112 + (_20599 * _9277); | |
} | |
else | |
{ | |
_10542 = _22112; | |
} | |
_16268 = _10542; | |
} | |
else | |
{ | |
float _10541; | |
do | |
{ | |
float4 _11434 = mul(float4(vPositionWs, 1.0f), g_matWorldToBakedLightShadow[0]); | |
float3 _8541 = _11434.xyz / _11434.w.xxx; | |
float3 _22497 = step(float3(g_vBakedLightShadowBounds.xy, 0.0f), _8541) * step(_8541, float3(g_vBakedLightShadowBounds.zw, 1.0f)); | |
[branch] | |
if (((_22497.x * _22497.y) * _22497.z) != 0.0f) | |
{ | |
float _10540; | |
do | |
{ | |
float2 _19764 = _8541.xy; | |
float _18994 = clamp(_8541.z - 9.9999999747524270787835121154785e-07f, 0.0f, 1.0f); | |
float4 _17522; | |
_17522.x = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19764 + _24634_m3.xx, _18994).xy, _18994); | |
_17522.y = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19764 + _24634_m3.yx, _18994).xy, _18994); | |
_17522.z = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19764 + _24634_m3.xy, _18994).xy, _18994); | |
_17522.w = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19764 + _24634_m3.yy, _18994).xy, _18994); | |
float _6481 = dot(_17522, 0.25f.xxxx); | |
if ((_6481 == 0.0f) || (_6481 == 1.0f)) | |
{ | |
_10540 = _6481; | |
break; | |
} | |
float4 _17525; | |
_17525.x = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19764 + _24634_m2.wz, _18994).xy, _18994); | |
_17525.y = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19764 + _24634_m1.zw, _18994).xy, _18994); | |
_17525.z = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19764 + _24634_m1.wz, _18994).xy, _18994); | |
_17525.w = g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_19764 + _24634_m2.zw, _18994).xy, _18994); | |
_10540 = ((_6481 * (g_vShadow3x3PCFTermC0.w * 4.0f)) + dot(_17525, _24634_m1.xxxx)) + (g_tVrShadowDepthBufferDepth.SampleCmpLevelZero(float3(_8541.xy, _18994).xy, _18994) * _24634_m1.y); | |
break; | |
} while(false); | |
_10541 = _10540; | |
break; | |
} | |
_10541 = 1.0f; | |
break; | |
} while(false); | |
_16268 = _10541; | |
} | |
_16269 = lightStrengths2 * lerp(1.0f.xxxx, _16268.xxxx, thisFilter); | |
} | |
else | |
{ | |
_16269 = lightStrengths2; | |
} | |
float4 _12139 = _16269 * lerp(aoTermProxies.xxxx, 1.0f.xxxx, thisFilter); | |
int index = vLightIndices.x; | |
float currentSth = _12139.x; | |
float3 out2; | |
float3 out1; | |
[branch] | |
if (currentSth > 9.9999997473787516355514526367188e-05f) | |
{ | |
float3 _16788 = normalize(g_vBakedLightPosition[index].xyz - vHiPos); | |
float _19745 = max(0.0f, dot(N, _16788)); | |
float3 _18694; | |
[branch] | |
if (g_vBakedLightColor[index].w != 0.0f) | |
{ | |
float3 _15736 = normalize(_16788 + Vinv); | |
float _15267 = dot(_15736, N); | |
float2 _12039 = roughness.xx; | |
float2 _20487 = _12039 * _12039; | |
float2 _7197 = _20487 / ((((_20487 * _20487) - 1.0f.xx) * (_15267 * _15267)) + 1.0f.xx); | |
float2 _20647 = _12039 + 1.0f.xx; | |
float2 _13660 = (_20647 * _20647) * 0.125f.xx; | |
float2 _12934 = 1.0f.xx - _13660; | |
_18694 = (F0 + (((1.0f.xxx - F0) * 1.0f) * pow(1.0f - max(0.0f, dot(_16788, _15736)), 5.0f))) * (((_7197 * _7197) / ((4.0f.xx * ((_19745.xx * _12934) + _13660)) * ((max(0.0f, dot(N, Vinv)).xx * _12934) + _13660))).x * _19745); | |
} | |
else | |
{ | |
_18694 = 0.0f.xxx; | |
} | |
out1 = _13710 + ((_18694 * g_vBakedLightColor[index].xyz) * currentSth); | |
out2 = _7755 + (((1.0f.xxx * pow(_19745, 1.0f)) * g_vBakedLightColor[index].xyz) * currentSth); | |
} | |
else | |
{ | |
out1 = _13710; | |
out2 = _7755; | |
} | |
int _6787 = vLightIndices.y; | |
float _15146 = _12139.y; | |
float3 _7917; | |
float3 _8062; | |
[branch] | |
if (_15146 > 9.9999997473787516355514526367188e-05f) | |
{ | |
float3 _16789 = normalize(g_vBakedLightPosition[_6787].xyz - vHiPos); | |
float _19746 = max(0.0f, dot(N, _16789)); | |
float3 _18695; | |
[branch] | |
if (g_vBakedLightColor[_6787].w != 0.0f) | |
{ | |
float3 _15737 = normalize(_16789 + Vinv); | |
float _15268 = dot(_15737, N); | |
float2 _12040 = roughness.xx; | |
float2 _20488 = _12040 * _12040; | |
float2 _7198 = _20488 / ((((_20488 * _20488) - 1.0f.xx) * (_15268 * _15268)) + 1.0f.xx); | |
float2 _20648 = _12040 + 1.0f.xx; | |
float2 _13661 = (_20648 * _20648) * 0.125f.xx; | |
float2 _12935 = 1.0f.xx - _13661; | |
_18695 = (F0 + (((1.0f.xxx - F0) * 1.0f) * pow(1.0f - max(0.0f, dot(_16789, _15737)), 5.0f))) * (((_7198 * _7198) / ((4.0f.xx * ((_19746.xx * _12935) + _13661)) * ((max(0.0f, dot(N, Vinv)).xx * _12935) + _13661))).x * _19746); | |
} | |
else | |
{ | |
_18695 = 0.0f.xxx; | |
} | |
_8062 = out1 + ((_18695 * g_vBakedLightColor[_6787].xyz) * _15146); | |
_7917 = out2 + (((1.0f.xxx * pow(_19746, 1.0f)) * g_vBakedLightColor[_6787].xyz) * _15146); | |
} | |
else | |
{ | |
_8062 = out1; | |
_7917 = out2; | |
} | |
int _6788 = vLightIndices.z; | |
float _15147 = _12139.z; | |
float3 _7918; | |
float3 _8063; | |
[branch] | |
if (_15147 > 9.9999997473787516355514526367188e-05f) | |
{ | |
float3 _16790 = normalize(g_vBakedLightPosition[_6788].xyz - vHiPos); | |
float _19747 = max(0.0f, dot(N, _16790)); | |
float3 _18696; | |
[branch] | |
if (g_vBakedLightColor[_6788].w != 0.0f) | |
{ | |
float3 _15738 = normalize(_16790 + Vinv); | |
float _15269 = dot(_15738, N); | |
float2 _12041 = roughness.xx; | |
float2 _20489 = _12041 * _12041; | |
float2 _7199 = _20489 / ((((_20489 * _20489) - 1.0f.xx) * (_15269 * _15269)) + 1.0f.xx); | |
float2 _20649 = _12041 + 1.0f.xx; | |
float2 _13662 = (_20649 * _20649) * 0.125f.xx; | |
float2 _12936 = 1.0f.xx - _13662; | |
_18696 = (F0 + (((1.0f.xxx - F0) * 1.0f) * pow(1.0f - max(0.0f, dot(_16790, _15738)), 5.0f))) * (((_7199 * _7199) / ((4.0f.xx * ((_19747.xx * _12936) + _13662)) * ((max(0.0f, dot(N, Vinv)).xx * _12936) + _13662))).x * _19747); | |
} | |
else | |
{ | |
_18696 = 0.0f.xxx; | |
} | |
_8063 = _8062 + ((_18696 * g_vBakedLightColor[_6788].xyz) * _15147); | |
_7918 = _7917 + (((1.0f.xxx * pow(_19747, 1.0f)) * g_vBakedLightColor[_6788].xyz) * _15147); | |
} | |
else | |
{ | |
_8063 = _8062; | |
_7918 = _7917; | |
} | |
int _6789 = vLightIndices.w; | |
float _15148 = _12139.w; | |
float3 _6779; | |
float3 _17326; | |
[branch] | |
if (_15148 > 9.9999997473787516355514526367188e-05f) | |
{ | |
float3 _16792 = normalize(g_vBakedLightPosition[_6789].xyz - vHiPos); | |
float _19748 = max(0.0f, dot(N, _16792)); | |
float3 _18697; | |
[branch] | |
if (g_vBakedLightColor[_6789].w != 0.0f) | |
{ | |
float3 _15739 = normalize(_16792 + Vinv); | |
float _15270 = dot(_15739, N); | |
float2 _12042 = roughness.xx; | |
float2 _20490 = _12042 * _12042; | |
float2 _7200 = _20490 / ((((_20490 * _20490) - 1.0f.xx) * (_15270 * _15270)) + 1.0f.xx); | |
float2 _20650 = _12042 + 1.0f.xx; | |
float2 _13663 = (_20650 * _20650) * 0.125f.xx; | |
float2 _12937 = 1.0f.xx - _13663; | |
_18697 = (F0 + (((1.0f.xxx - F0) * 1.0f) * pow(1.0f - max(0.0f, dot(_16792, _15739)), 5.0f))) * (((_7200 * _7200) / ((4.0f.xx * ((_19748.xx * _12937) + _13663)) * ((max(0.0f, dot(N, Vinv)).xx * _12937) + _13663))).x * _19748); | |
} | |
else | |
{ | |
_18697 = 0.0f.xxx; | |
} | |
_6779 = _8063 + ((_18697 * g_vBakedLightColor[_6789].xyz) * _15148); | |
_17326 = _7918 + (((1.0f.xxx * pow(_19748, 1.0f)) * g_vBakedLightColor[_6789].xyz) * _15148); | |
} | |
else | |
{ | |
_6779 = _8063; | |
_17326 = _7918; | |
} | |
float roughSquare = sqrt(_13061); | |
float3 R = reflect(V, N); | |
float3 envPosLS; | |
float3 ReflPosLS; | |
if (g_vEnvironmentMapColorRotated[Instance].w != 0.0f) | |
{ | |
envPosLS = mul(float4(vHiPos, 1.0f), g_matEnvMapWorldToLocal[Instance]); | |
ReflPosLS = mul(float4(R, 0.0f), g_matEnvMapWorldToLocal[Instance]); | |
} | |
else | |
{ | |
envPosLS = vHiPos - g_vEnvironmentMapProxySphere[Instance].xyz; | |
ReflPosLS = R; | |
} | |
// Following is the parallax-correction code | |
// Find the ray intersection with box plane | |
// Get the furthest of these intersections along the ray | |
// (Ok because x/0 give +inf and -x/0 give –inf ) | |
float3 FurthestPlane = max( | |
(g_vEnvironmentMapBoxMaxs[Instance].xyz - envPosLS) / ReflPosLS, | |
(g_vEnvironmentMapBoxMins[Instance].xyz - envPosLS) / ReflPosLS | |
); | |
// Find the closest far intersection | |
float3 Distance = abs(min(FurthestPlane.x, min(FurthestPlane.y, FurthestPlane.z))); | |
// Get the intersection position | |
float3 IntersectPosition = envPosLS + (ReflPosLS * Distance); | |
float2 _20268 = g_tBRDFLookup.SampleLevel(float2(max(0.0f, dot(Vinv, N)), _13061), 0.0f).xy; | |
float2 _17874 = _20268 * _20268; | |
float3 _22636 = (min(albedo.w, vAHDData.w) * aoTermProxies).xxx; | |
float4 envMapSampleCoords = float4( | |
normalize(lerp(IntersectPosition, N, roughSquare.xxx)), | |
float(nView & 255u) | |
); | |
float3 luminance = float3(0.21f, 0.72f, 0.072f); | |
float3 finalNoFog = ( | |
((_17326 + (finalAmbient * (aoTermProxies * albedo.w).xxx)) * (color * (1.0f - g_flMetalness))).xyz | |
+ (_6779 * _22636)).xyz | |
+ (( | |
( | |
( | |
g_tEnvironmentMap.SampleLevel(envMapSampleCoords, g_vEnvironmentMapSizeConstants.y * roughSquare).xyz | |
* g_vEnvironmentMapColorRotated[Instance].xyz | |
) | |
* ((F0 * _17874.x) + _17874.y.xxx) | |
) | |
* min( | |
dot(finalAmbient, luminance) / dot(float4(N, 1.0f), g_vEnvironmentMapNormalizationSH[Instance]), | |
max((_13061 * g_vCubemapNormalizationParams.x) + g_vCubemapNormalizationParams.y, 1.0f) | |
) | |
) | |
* _22636 | |
); | |
float4 finalColor; | |
if (g_bFogEnabled != 0u) | |
{ | |
float _22886; | |
float3 _20860; | |
do | |
{ | |
float2 _19532 = _6962.xy; | |
_22886 = vHiPos.z; | |
[branch] | |
if ((dot(_19532, _19532) > g_vGradientFogCullingParams.x) && (_22886 < g_vGradientFogCullingParams.y)) | |
{ | |
float2 _7381 = clamp(g_vGradientFogBiasAndScale.xy + (g_vGradientFogBiasAndScale.zw * float2(length(_19532), _22886)), 0.0f.xx, 1.0f.xx); | |
float _8865 = (pow(_7381.x, m_vGradientFogExponents.x) * pow(_7381.y, m_vGradientFogExponents.y)) * g_vGradientFogColor_Opacity.w; | |
_20860 = lerp(finalNoFog.xyz, float4(g_vGradientFogColor_Opacity.xyz, _8865).xyz, _8865.xxx); | |
break; | |
} | |
_20860 = finalNoFog.xyz; | |
break; | |
} while(false); | |
float3 _20861; | |
do | |
{ | |
if ((dot(_6962, _6962) > g_vCubeFogCullingParams.x) || (_22886 > g_vCubeFogCullingParams.y)) | |
{ | |
float _22869 = max(pow(max(0.0f, (length(_6962) * g_vCubeFog_Offset_Scale_Bias_Exponent.y) + g_vCubeFog_Offset_Scale_Bias_Exponent.x), g_vCubeFog_Offset_Scale_Bias_Exponent.w), pow(max(0.0f, (_22886 * g_vCubeFog_Height_Offset_Scale_Exponent_Log2Mip.y) + g_vCubeFog_Height_Offset_Scale_Exponent_Log2Mip.x), g_vCubeFog_Height_Offset_Scale_Exponent_Log2Mip.z)); | |
float _16402 = clamp(_22869, 0.0f, 1.0f); | |
_20861 = lerp(_20860.xyz, float4(g_tFogCubeTexture.SampleLevel(normalize(mul(float4(_6962, 0.0f), g_matvCubeFogSkyWsToOs).xyz), g_vCubeFog_Height_Offset_Scale_Exponent_Log2Mip.w * clamp(1.0f - (_22869 * g_vCubeFog_Offset_Scale_Bias_Exponent.z), 0.0f, 1.0f)).xyz, _16402).xyz, _16402.xxx); | |
break; | |
} | |
_20861 = _20860.xyz; | |
break; | |
} while(false); | |
float3 _20862; | |
do | |
{ | |
if (g_bFogTypeEnabled.x != 0u) | |
{ | |
float4 _11670 = mul(g_mVolFogFromWorld[0u], float4(vHiPos + mad(g_tFogSomething.Sample(mad(gl_FragCoord.xy, g_vScreenSpaceDitherParams.zz, g_vScreenSpaceDitherParams.xy)).xyz, g_vVolFogDitherScaleBias.xxx, g_vVolFogDitherScaleBias.yyy), 1.0f)); | |
float2 _13693 = _11670.xy / _11670.w.xx; | |
float3 _12515 = (float4(_13693.x, _13693.y, _11670.z, _11670.w).xyw * g_vVolFogPostWorldToFrustumScale.xyz) + g_vVolFogPostWorldToFrustumBias.xyz; | |
float4 _14467 = float4(_12515.x, _12515.y, _12515.z, _11670.w); | |
_14467.z = sqrt(max(0.0f, _12515.z)); | |
float4 _24177 = g_tFogVolume.Sample(_14467.xyz); | |
_20862 = _24177.xyz + (_20861.xyz * _24177.www); | |
break; | |
} | |
_20862 = _20861.xyz; | |
break; | |
} while(false); | |
float3 _20898; | |
do | |
{ | |
[branch] | |
if (g_bFogTypeEnabled.w != 0u) | |
{ | |
float _8868 = pow(clamp(g_vSphericalVignetteBiasAndScale.x + (g_vSphericalVignetteBiasAndScale.y * distance(vHiPos, g_vSphericalVignetteOrigin_Exponent.xyz)), 0.0f, 1.0f), g_vSphericalVignetteOrigin_Exponent.w) * g_vSphericalVignetteColor_Opacity.w; | |
_20898 = lerp(_20862.xyz, float4(g_vSphericalVignetteColor_Opacity.xyz, _8868).xyz, _8868.xxx); | |
break; | |
} | |
_20898 = _20862.xyz; | |
break; | |
} while(false); | |
finalColor = float4(_20898.x, _20898.y, _20898.z, vVertexColor.w); | |
} | |
else | |
{ | |
finalColor = float4(finalNoFog.xyz, vVertexColor.w); | |
} | |
outColor = finalColor; | |
} | |
float4 main(PS_INPUT stage_input) : Sv_Target0 | |
{ | |
gl_FragCoord = stage_input.gl_FragCoord; | |
gl_FragCoord.w = 1.0 / gl_FragCoord.w; | |
vPositionWs = stage_input.vPositionWs; | |
vNormalWs = stage_input.vNormalWs; | |
vTextureCoords = stage_input.vTextureCoords; | |
vLightmapUV = stage_input.vLightmapUV; | |
vVertexColor = stage_input.vVertexColor; | |
vCentroidNormalWs = stage_input.vCentroidNormalWs; | |
vTangentUWs = stage_input.vTangentUWs; | |
vTangentVWs = stage_input.vTangentVWs; | |
nView = stage_input.nView; | |
MainPs(); | |
return outColor; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment