//#include "common.h" //#include "lmodel.h" //#include "shadow.h" half pp ( float v ) { return v; } half2 pp ( float2 v ) { return v; } half3 pp ( float3 v ) { return v; } half4 pp ( float4 v ) { return v; } half4 cmp_pp( half4 v, half4 a, half4 b ) { return half4( (v[0]>=0)?a[0]:b[0], (v[1]>=0)?a[1]:b[1],(v[2]>=0)?a[2]:b[2], (v[3]>=0)?a[3]:b[3] ); } float4 cmp( float4 v, float4 a, float4 b ) { return float4( (v[0]>=0)?a[0]:b[0], (v[1]>=0)?a[1]:b[1],(v[2]>=0)?a[2]:b[2], (v[3]>=0)?a[3]:b[3] ); } // m_sunmask c0 4 // m_shadow c4 4 // Ldynamic_color c8 1 // Ldynamic_dir c9 1 // T c10 1 // s_smap s0 1 // s_position s1 1 // s_normal s2 1 // s_lmap s3 1 // s_accumulator s4 1 float4 Ldynamic_color; float4 Ldynamic_dir; float3 T; float4x4 m_shadow; float3x4 m_sunmask; uniform sampler2D s_accumulator; uniform sampler2D s_lmap; uniform sampler2D s_normal; uniform sampler2D s_position; uniform sampler2D s_smap; float4 main( float2 tc : TEXCOORD0 ) : COLOR { float4x4 c = { { 1, 3.33333325, 1.53846157, -1 }, { -0.000585937523, 0, 1, 1024 }, { 1.44269502, 0.625, 0.400000006, 0.600000024 }, { 0.000585937523, -0.000585937523, 0.25, 0 } }; float4 r0, r1, r2, r3, r4, result; r0 = tex2D( s_position, tc ); r1 = (r0.y) * (m_shadow[1]); r1 = ((m_shadow[0]) * (r0.x)) + (r1); r1 = ((m_shadow[2]) * (r0.z)) + (r1); r1 = (r1) + (m_shadow[3]); r0.w = 1/( r1.w ); r2.xy = ((r1) * (r0.w)) + (c[1].x); r3 = tex2D( s_smap, r2 ); r2.xy = (r2) * (c[1].w); r3 = ((r1.z) * (r0.w)) + (-r3); r3 = cmp( r3, c[1].y, c[1].z ); r2.xy = frac( r2 ); r2.zw = pp((-r2.xyxy) + (c[0].x)); r4 = pp((r2.xyyw) * (r2.wzxz)); r1.w = pp(dot( (float4) r3, r4 )); r2.xy = ((r1) * (r0.w)) + (c[3]); r3 = tex2D( s_smap, r2 ); r2.xy = (r2) * (c[1].w); r3 = ((r1.z) * (r0.w)) + (-r3); r3 = cmp( r3, c[1].y, c[1].z ); r2.xy = frac( r2 ); r2.zw = pp((-r2.xyxy) + (c[0].x)); r4 = pp((r2.xyyw) * (r2.wzxz)); r2.x = pp(dot( (float4) r3, r4 )); r1.w = pp((r1.w) + (r2.x)); r2.xy = ((r1) * (r0.w)) + (c[3].yxzw); r3 = tex2D( s_smap, r2 ); r2.xy = (r2) * (c[1].w); r3 = ((r1.z) * (r0.w)) + (-r3); r3 = cmp( r3, c[1].y, c[1].z ); r2.xy = frac( r2 ); r2.zw = pp((-r2.xyxy) + (c[0].x)); r4 = pp((r2.xyyw) * (r2.wzxz)); r2.x = pp(dot( (float4) r3, r4 )); r1.w = pp((r1.w) + (r2.x)); r1.xy = ((r1) * (r0.w)) + (-c[1].x); r2 = tex2D( s_smap, r1 ); r1.xy = (r1) * (c[1].w); r2 = ((r1.z) * (r0.w)) + (-r2); r2 = cmp( r2, c[1].y, c[1].z ); r1.xy = frac( r1 ); r3.xy = pp((-r1) + (c[0].x)); r4.xy = pp((r1) * (r3.yxzw)); r4.z = pp((r1.y) * (r1.x)); r4.w = pp((r3.y) * (r3.x)); r0.w = pp(dot( (float4) r2, r4 )); r0.w = pp((r1.w) + (r0.w)); r1.xy = (r0.y) * (m_sunmask[1]); r1.xy = ((m_sunmask[0]) * (r0.x)) + (r1); r1.xy = ((m_sunmask[2]) * (r0.z)) + (r1); r1.xy = (r1) + (m_sunmask[3]); r1 = pp(tex2D( s_normal, r1 )); r0.w = pp((r0.w) * (r1.w)); r0.w = pp((r0.w) * (c[3].z)); r1.x = pp(dot( (float3) r0, r0 )); r1.x = pp( 1/sqrt( r1.x ) ); r0.xyz = pp( ((r0) * (-r1.x)) + (-Ldynamic_dir) ); r1.x = pp(dot( (float3) r0, r0 )); r1.x = pp( 1/sqrt( r1.x ) ); r2 = pp(tex2D( s2, tc )); r3.xyz = pp(normalize(r2)); r1.y = pp(saturate( dot( (float3) r3, -Ldynamic_dir ) )); r2.xyz = (r3) * (r1.y); r0.xyz = ((r0) * (r1.x)) + (-r2); r2.xyz = normalize(r0); r0.x = dot( (float3) T, r2 ); r0.y = (-r0.x) + (c[0].x); r0.y = (r0.y) * (c[0].y); r0.x = ((r0.x) * (c[0].z)) + (r0.y); r0.y = (r1.y) + (c[0].w); r0.x = (r0.x) * (r0.y); r0.y = 1/( r1.y ); r0.x = (r0.x) * (r0.y); r0.x = (r0.x) * (c[2].x); r0.x = pow( 2, r0.x ); r0.x = (r1.y) * (r0.x); r0.y = (r1.y) * (r1.y); r0.x = ((r0.x) * (c[2].y)) + (r0.y); r0.y = saturate( ( (r1.y) * (c[2].z) ) + (c[2].w) ); r0.y = (r1.y) * (r0.y); r0.x = pp( ((r0.y) * (-Ldynamic_dir.w)) + (r0.x) ); r1 = (r0.x) * (Ldynamic_color); r2 = pp(tex2D( s_accumulator, tc )); result = pp( ((r1) * (r0.w)) + (r2) ); return result; }