All pastes #549768 Raw Edit

Chao7

public text v1 · immutable
·published 2007-06-08 06:38 UTC
rendered paste body
//#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;
}