104 lines
3.3 KiB
Plaintext
104 lines
3.3 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 _59 = {};
|
|
|
|
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 _68 = Texture.sample(Sampler, in.in_var_TEXCOORD0);
|
|
float _69 = _68.w;
|
|
if (_69 < 0.00999999977648258209228515625)
|
|
{
|
|
discard_fragment();
|
|
}
|
|
float3 _122;
|
|
do
|
|
{
|
|
float3 _79 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1;
|
|
float _80 = length(_79);
|
|
float _81 = _80 * _80;
|
|
float _87;
|
|
if (_80 > 2.0)
|
|
{
|
|
_87 = 0.5 / _81;
|
|
}
|
|
else
|
|
{
|
|
_87 = 1.0 / _81;
|
|
}
|
|
float _92;
|
|
if (_80 > 4.0)
|
|
{
|
|
_92 = _87 * 0.5;
|
|
}
|
|
else
|
|
{
|
|
_92 = _87;
|
|
}
|
|
float _94 = (_80 > 15.0) ? 0.0 : _92;
|
|
float _96 = (_94 > 1.0) ? 1.0 : _94;
|
|
if (length(in.in_var_TEXCOORD2) < 0.100000001490116119384765625)
|
|
{
|
|
_122 = (in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _96;
|
|
break;
|
|
}
|
|
float3 _103 = fast::normalize(_79);
|
|
_122 = ((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_103, in.in_var_TEXCOORD2), 0.0)) * _96) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_103 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _96);
|
|
break;
|
|
} while(false);
|
|
float3 _139 = ((in.in_var_TEXCOORD3.xyz / float3(in.in_var_TEXCOORD3.w)) * 0.5) + float3(0.5);
|
|
float3 _141;
|
|
_141.x = _139.x;
|
|
float2 _142 = _141.xy;
|
|
_142.y = -_139.y;
|
|
float _149;
|
|
int _152;
|
|
int _154;
|
|
_149 = 0.0;
|
|
_152 = 0;
|
|
_154 = -4;
|
|
float _150;
|
|
int _153;
|
|
for (; _154 <= 4; _149 = _150, _152 = _153, _154++)
|
|
{
|
|
_153 = _152;
|
|
_150 = _149;
|
|
for (int _163 = -4; _163 <= 4; )
|
|
{
|
|
_153++;
|
|
_150 += float((in.in_var_TEXCOORD3.z - 0.001000000047497451305389404296875) > DirectionalShadowDepthMap.sample(DirectionalShadowSampler, (_142 + float2(float(_163) * 0.000244140625, float(_154) * 0.000244140625))).x);
|
|
_163++;
|
|
continue;
|
|
}
|
|
}
|
|
out.out_var_SV_Target0 = float4(powr(_68.xyz * ((float3(0.100000001490116119384765625) + _122) + ((Uniforms.directionalLightColor.xyz * precise::max(dot(Uniforms.directionalLight.xyz, in.in_var_TEXCOORD2), 0.0)) * (1.0 - (_149 / float(_152))))), float3(0.4545454680919647216796875)), _69);
|
|
return out;
|
|
}
|
|
|