#include #include using namespace metal; struct type_Uniforms { float4 viewPos; float4 lightPosition; float4 directionalLight; float4 directionalLightColor; float2 screenSize; float time; }; struct Scene { float4x4 Model; uint textureMode; uint pad0; uint pad1; uint pad2; }; struct type_StructuredBuffer_Scene { Scene _m0[1]; }; constant float4 _86 = {}; constant float3 _88 = {}; 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)]]; uint in_var_TEXCOORD4 [[user(locn4)]]; }; fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], const device type_StructuredBuffer_Scene& scene [[buffer(1)]], texture2d Texture0 [[texture(0)]], texture2d Texture1 [[texture(1)]], texture2d Texture2 [[texture(2)]], texture2d DirectionalShadowDepthMap [[texture(3)]], sampler Sampler0 [[sampler(0)]], sampler Sampler1 [[sampler(1)]], sampler Sampler2 [[sampler(2)]], sampler DirectionalShadowSampler [[sampler(3)]]) { main0_out out = {}; int _98 = int(scene._m0[in.in_var_TEXCOORD4].textureMode); int _99 = _98 & 240; float4 _133; if (_99 == 16) { float3 _120 = float3(Texture0.sample(Sampler0, in.in_var_TEXCOORD0).x, Texture1.sample(Sampler1, in.in_var_TEXCOORD0).x, Texture2.sample(Sampler2, in.in_var_TEXCOORD0).x) + float3(-0.0625, -0.5, -0.5); _133 = float4(dot(_120, float3(1.164000034332275390625, 0.0, 1.7929999828338623046875)), dot(_120, float3(1.164000034332275390625, -0.212999999523162841796875, -0.53299999237060546875)), dot(_120, float3(1.164000034332275390625, 2.111999988555908203125, 0.0)), 1.0); } else { float4 _132; if (_99 == 0) { _132 = Texture0.sample(Sampler0, in.in_var_TEXCOORD0); } else { _132 = _86; } _133 = _132; } float4 _139; if ((_98 & 1) == 1) { _139 = powr(_133, float4(2.2000000476837158203125)); } else { _139 = _133; } if (_139.w < 0.00999999977648258209228515625) { discard_fragment(); } float3 _193; do { float3 _150 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1; float _151 = length(_150); float _152 = _151 * _151; float _158; if (_151 > 2.0) { _158 = 0.5 / _152; } else { _158 = 1.0 / _152; } float _163; if (_151 > 4.0) { _163 = _158 * 0.5; } else { _163 = _158; } float _165 = (_151 > 15.0) ? 0.0 : _163; float _167 = (_165 > 1.0) ? 1.0 : _165; if (length(in.in_var_TEXCOORD2) < 0.100000001490116119384765625) { _193 = (in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _167; break; } float3 _174 = fast::normalize(_150); _193 = ((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_174, in.in_var_TEXCOORD2), 0.0)) * _167) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_174 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _167); break; } while(false); float3 _210 = ((in.in_var_TEXCOORD3.xyz / float3(in.in_var_TEXCOORD3.w)) * 0.5) + float3(0.5); float3 _212; _212.x = _210.x; float2 _213 = _212.xy; _213.y = -_210.y; float _220; int _223; int _225; _220 = 0.0; _223 = 0; _225 = -4; float _221; int _224; for (; _225 <= 4; _220 = _221, _223 = _224, _225++) { _224 = _223; _221 = _220; for (int _234 = -4; _234 <= 4; ) { _224++; _221 += float((in.in_var_TEXCOORD3.z - 0.004999999888241291046142578125) > DirectionalShadowDepthMap.sample(DirectionalShadowSampler, (_213 + float2(float(_234) * 0.000244140625, float(_225) * 0.000244140625))).x); _234++; continue; } } out.out_var_SV_Target0 = float4(powr(select(_139.xyz * ((float3(0.100000001490116119384765625) + _193) + ((Uniforms.directionalLightColor.xyz * precise::max(dot(Uniforms.directionalLight.xyz, in.in_var_TEXCOORD2), 0.0)) * (1.0 - (_220 / float(_223))))), _139.xyz, bool3((_98 & 2) > 0)), float3(0.4545454680919647216796875)), _139.w); return out; }