blob: 1d610989a3891e1251757b8c7bd302174cca6baf [file] [log] [blame]
/* 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;
}