211 lines
7.5 KiB
HLSL
211 lines
7.5 KiB
HLSL
|
/* Dumped generated HLSL */
|
||
|
struct lightingInfo
|
||
|
{
|
||
|
float3 diffuse;
|
||
|
float3 specular;
|
||
|
};
|
||
|
|
||
|
cbuffer LeftOver : register(b0, space2)
|
||
|
{
|
||
|
row_major float4x4 _269_u_World : packoffset(c0);
|
||
|
row_major float4x4 _269_u_ViewProjection : packoffset(c4);
|
||
|
float _269_u_bumpStrength : packoffset(c8);
|
||
|
float3 _269_u_cameraPosition : packoffset(c9);
|
||
|
float _269_u_parallaxScale : packoffset(c9.w);
|
||
|
float _269_textureInfoName : packoffset(c10);
|
||
|
float2 _269_tangentSpaceParameter0 : packoffset(c10.z);
|
||
|
};
|
||
|
|
||
|
cbuffer Light0 : register(b0, space0)
|
||
|
{
|
||
|
float4 light0_vLightData : packoffset(c0);
|
||
|
float4 light0_vLightDiffuse : packoffset(c1);
|
||
|
float4 light0_vLightSpecular : packoffset(c2);
|
||
|
float3 light0_vLightGround : packoffset(c3);
|
||
|
float4 light0_shadowsInfo : packoffset(c4);
|
||
|
float2 light0_depthValues : packoffset(c5);
|
||
|
};
|
||
|
|
||
|
Texture2D<float4> TextureSamplerTexture : register(t3, space2);
|
||
|
SamplerState TextureSamplerSampler : register(s2, space2);
|
||
|
Texture2D<float4> TextureSampler1Texture : register(t1, space2);
|
||
|
SamplerState TextureSampler1Sampler : register(s0, space2);
|
||
|
SamplerState bumpSamplerSampler : register(s1, space2);
|
||
|
Texture2D<float4> bumpSamplerTexture : register(t2, space2);
|
||
|
|
||
|
static bool gl_FrontFacing;
|
||
|
static float2 vMainuv;
|
||
|
static float4 v_output1;
|
||
|
static float2 v_uv;
|
||
|
static float4 v_output2;
|
||
|
static float4 glFragColor;
|
||
|
|
||
|
struct SPIRV_Cross_Input
|
||
|
{
|
||
|
float4 v_output1 : TEXCOORD0;
|
||
|
float2 vMainuv : TEXCOORD1;
|
||
|
float4 v_output2 : TEXCOORD2;
|
||
|
float2 v_uv : TEXCOORD3;
|
||
|
bool gl_FrontFacing : SV_IsFrontFace;
|
||
|
};
|
||
|
|
||
|
struct SPIRV_Cross_Output
|
||
|
{
|
||
|
float4 glFragColor : SV_Target0;
|
||
|
};
|
||
|
|
||
|
static float u_Float = 0.0f;
|
||
|
static float3 u_Color = 0.0f.xxx;
|
||
|
|
||
|
float3x3 cotangent_frame(float3 normal, float3 p, float2 uv, float2 tangentSpaceParams)
|
||
|
{
|
||
|
float3 dp1 = ddx(p);
|
||
|
float3 dp2 = ddy(p);
|
||
|
float2 duv1 = ddx(uv);
|
||
|
float2 duv2 = ddy(uv);
|
||
|
float3 dp2perp = cross(dp2, normal);
|
||
|
float3 dp1perp = cross(normal, dp1);
|
||
|
float3 tangent = (dp2perp * duv1.x) + (dp1perp * duv2.x);
|
||
|
float3 bitangent = (dp2perp * duv1.y) + (dp1perp * duv2.y);
|
||
|
tangent *= tangentSpaceParams.x;
|
||
|
bitangent *= tangentSpaceParams.y;
|
||
|
float invmax = rsqrt(max(dot(tangent, tangent), dot(bitangent, bitangent)));
|
||
|
return float3x3(float3(tangent * invmax), float3(bitangent * invmax), float3(normal));
|
||
|
}
|
||
|
|
||
|
float3x3 transposeMat3(float3x3 inMatrix)
|
||
|
{
|
||
|
float3 i0 = inMatrix[0];
|
||
|
float3 i1 = inMatrix[1];
|
||
|
float3 i2 = inMatrix[2];
|
||
|
float3x3 outMatrix = float3x3(float3(float3(i0.x, i1.x, i2.x)), float3(float3(i0.y, i1.y, i2.y)), float3(float3(i0.z, i1.z, i2.z)));
|
||
|
return outMatrix;
|
||
|
}
|
||
|
|
||
|
float3 perturbNormalBase(float3x3 cotangentFrame, float3 normal, float scale)
|
||
|
{
|
||
|
return normalize(mul(normal, cotangentFrame));
|
||
|
}
|
||
|
|
||
|
float3 perturbNormal(float3x3 cotangentFrame, float3 textureSample, float scale)
|
||
|
{
|
||
|
float3x3 param = cotangentFrame;
|
||
|
float3 param_1 = (textureSample * 2.0f) - 1.0f.xxx;
|
||
|
float param_2 = scale;
|
||
|
return perturbNormalBase(param, param_1, param_2);
|
||
|
}
|
||
|
|
||
|
lightingInfo computeHemisphericLighting(float3 viewDirectionW, float3 vNormal, float4 lightData, float3 diffuseColor, float3 specularColor, float3 groundColor, float glossiness)
|
||
|
{
|
||
|
float ndl = (dot(vNormal, lightData.xyz) * 0.5f) + 0.5f;
|
||
|
lightingInfo result = { 0.0f.xxx, 0.0f.xxx };
|
||
|
result.diffuse = lerp(groundColor, diffuseColor, ndl.xxx);
|
||
|
float3 angleW = normalize(viewDirectionW + lightData.xyz);
|
||
|
float specComp = max(0.0f, dot(vNormal, angleW));
|
||
|
specComp = pow(specComp, max(1.0f, glossiness));
|
||
|
result.specular = specularColor * specComp;
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
void frag_main()
|
||
|
{
|
||
|
u_Float = 100.0f;
|
||
|
u_Color = 0.5f.xxx;
|
||
|
float4 tempTextureRead = TextureSamplerTexture.Sample(TextureSamplerSampler, vMainuv);
|
||
|
float3 rgb = tempTextureRead.xyz * _269_textureInfoName;
|
||
|
float3 output5 = normalize(_269_u_cameraPosition - v_output1.xyz);
|
||
|
float4 output4 = 0.0f.xxxx;
|
||
|
float2 uvOffset = 0.0f.xx;
|
||
|
float normalScale = 1.0f / _269_u_bumpStrength;
|
||
|
float2 _299 = 0.0f.xx;
|
||
|
if (gl_FrontFacing)
|
||
|
{
|
||
|
_299 = v_uv;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_299 = -v_uv;
|
||
|
}
|
||
|
float2 TBNUV = _299;
|
||
|
float3 param = v_output2.xyz * normalScale;
|
||
|
float3 param_1 = v_output1.xyz;
|
||
|
float2 param_2 = TBNUV;
|
||
|
float2 param_3 = _269_tangentSpaceParameter0;
|
||
|
float3x3 TBN = cotangent_frame(param, param_1, param_2, param_3);
|
||
|
float3x3 param_4 = TBN;
|
||
|
float3x3 invTBN = transposeMat3(param_4);
|
||
|
float parallaxLimit = length(mul(-output5, invTBN).xy) / mul(-output5, invTBN).z;
|
||
|
parallaxLimit *= _269_u_parallaxScale;
|
||
|
float2 vOffsetDir = normalize(mul(-output5, invTBN).xy);
|
||
|
float2 vMaxOffset = vOffsetDir * parallaxLimit;
|
||
|
float numSamples = 15.0f + (dot(mul(-output5, invTBN), mul(v_output2.xyz, invTBN)) * (-11.0f));
|
||
|
float stepSize = 1.0f / numSamples;
|
||
|
float currRayHeight = 1.0f;
|
||
|
float2 vCurrOffset = 0.0f.xx;
|
||
|
float2 vLastOffset = 0.0f.xx;
|
||
|
float lastSampledHeight = 1.0f;
|
||
|
float currSampledHeight = 1.0f;
|
||
|
for (int i = 0; i < 15; i++)
|
||
|
{
|
||
|
currSampledHeight = TextureSamplerTexture.Sample(TextureSamplerSampler, v_uv + vCurrOffset).w;
|
||
|
if (currSampledHeight > currRayHeight)
|
||
|
{
|
||
|
float delta1 = currSampledHeight - currRayHeight;
|
||
|
float delta2 = (currRayHeight + stepSize) - lastSampledHeight;
|
||
|
float ratio = delta1 / (delta1 + delta2);
|
||
|
vCurrOffset = (vLastOffset * ratio) + (vCurrOffset * (1.0f - ratio));
|
||
|
break;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
currRayHeight -= stepSize;
|
||
|
vLastOffset = vCurrOffset;
|
||
|
vCurrOffset += (vMaxOffset * stepSize);
|
||
|
lastSampledHeight = currSampledHeight;
|
||
|
}
|
||
|
}
|
||
|
float2 parallaxOcclusion_0 = vCurrOffset;
|
||
|
uvOffset = parallaxOcclusion_0;
|
||
|
float3x3 param_5 = TBN;
|
||
|
float3 param_6 = TextureSamplerTexture.Sample(TextureSamplerSampler, v_uv + uvOffset).xyz;
|
||
|
float param_7 = 1.0f / _269_u_bumpStrength;
|
||
|
float3 _461 = perturbNormal(param_5, param_6, param_7);
|
||
|
output4 = float4(_461.x, _461.y, _461.z, output4.w);
|
||
|
float2 output6 = v_uv + uvOffset;
|
||
|
float4 tempTextureRead1 = TextureSampler1Texture.Sample(TextureSampler1Sampler, output6);
|
||
|
float3 rgb1 = tempTextureRead1.xyz;
|
||
|
float3 viewDirectionW = normalize(_269_u_cameraPosition - v_output1.xyz);
|
||
|
float shadow = 1.0f;
|
||
|
float glossiness = 1.0f * u_Float;
|
||
|
float3 diffuseBase = 0.0f.xxx;
|
||
|
float3 specularBase = 0.0f.xxx;
|
||
|
float3 normalW = output4.xyz;
|
||
|
float3 param_8 = viewDirectionW;
|
||
|
float3 param_9 = normalW;
|
||
|
float4 param_10 = light0_vLightData;
|
||
|
float3 param_11 = light0_vLightDiffuse.xyz;
|
||
|
float3 param_12 = light0_vLightSpecular.xyz;
|
||
|
float3 param_13 = light0_vLightGround;
|
||
|
float param_14 = glossiness;
|
||
|
lightingInfo info = computeHemisphericLighting(param_8, param_9, param_10, param_11, param_12, param_13, param_14);
|
||
|
shadow = 1.0f;
|
||
|
diffuseBase += (info.diffuse * shadow);
|
||
|
specularBase += (info.specular * shadow);
|
||
|
float3 diffuseOutput = diffuseBase * rgb1;
|
||
|
float3 specularOutput = specularBase * u_Color;
|
||
|
float3 output3 = diffuseOutput + specularOutput;
|
||
|
glFragColor = float4(output3, 1.0f);
|
||
|
}
|
||
|
|
||
|
SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
|
||
|
{
|
||
|
gl_FrontFacing = stage_input.gl_FrontFacing;
|
||
|
vMainuv = stage_input.vMainuv;
|
||
|
v_output1 = stage_input.v_output1;
|
||
|
v_uv = stage_input.v_uv;
|
||
|
v_output2 = stage_input.v_output2;
|
||
|
frag_main();
|
||
|
SPIRV_Cross_Output stage_output;
|
||
|
stage_output.glFragColor = glFragColor;
|
||
|
return stage_output;
|
||
|
}
|