Backlog/projects/content/_shaders/msl/lit_mesh.frag.msl

84 lines
2.8 KiB
Plaintext

#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct type_Uniforms
{
float4 viewPos;
float4 lightPosition;
float4 directionalLight;
float4 directionalLightColor;
float2 screenSize;
float time;
};
constant float3 _56 = {};
struct main0_out
{
float4 out_var_SV_Target0 [[color(0)]];
};
struct main0_in
{
float2 in_var_TEXCOORD0 [[user(locn0)]];
float3 in_var_TEXCOORD1 [[user(locn1)]];
float3 in_var_TEXCOORD2 [[user(locn2)]];
float4 in_var_TEXCOORD3 [[user(locn3)]];
};
fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], texture2d<float> Texture [[texture(0)]], texture2d<float> DirectionalShadowDepthMap [[texture(1)]], sampler Sampler [[sampler(0)]], sampler DirectionalShadowSampler [[sampler(1)]])
{
main0_out out = {};
float4 _65 = Texture.sample(Sampler, in.in_var_TEXCOORD0);
float _66 = _65.w;
if (_66 < 0.00999999977648258209228515625)
{
discard_fragment();
}
float3 _119;
do
{
float3 _76 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1;
float _77 = length(_76);
float _78 = _77 * _77;
float _84;
if (_77 > 2.0)
{
_84 = 0.5 / _78;
}
else
{
_84 = 1.0 / _78;
}
float _89;
if (_77 > 4.0)
{
_89 = _84 * 0.5;
}
else
{
_89 = _84;
}
float _91 = (_77 > 15.0) ? 0.0 : _89;
float _93 = (_91 > 1.0) ? 1.0 : _91;
if (length(in.in_var_TEXCOORD2) < 0.100000001490116119384765625)
{
_119 = (in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _93;
break;
}
float3 _100 = fast::normalize(_76);
_119 = ((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_100, in.in_var_TEXCOORD2), 0.0)) * _93) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_100 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _93);
break;
} while(false);
float3 _136 = ((in.in_var_TEXCOORD3.xyz / float3(in.in_var_TEXCOORD3.w)) * 0.5) + float3(0.5);
float3 _138;
_138.x = _136.x;
float2 _139 = _138.xy;
_139.y = -_136.y;
out.out_var_SV_Target0 = float4(powr(_65.xyz * ((float3(0.100000001490116119384765625) + _119) + ((Uniforms.directionalLightColor.xyz * precise::max(dot(Uniforms.directionalLight.xyz, in.in_var_TEXCOORD2), 0.0)) * (1.0 - float((in.in_var_TEXCOORD3.z - 0.004999999888241291046142578125) > DirectionalShadowDepthMap.sample(DirectionalShadowSampler, _139).x)))), float3(0.4545454680919647216796875)), _66);
return out;
}