vs.1.1 # STATIC: "INTRO" "0..1" # STATIC: "HALF_LAMBERT" "0..1" # DYNAMIC: "DOWATERFOG" "0..1" # DYNAMIC: "LIGHT_COMBO" "0..21" # DYNAMIC: "SKINNING" "0..1" ;------------------------------------------------------------------------------ ; $SHADER_SPECIFIC_CONST_0 = xyz = mouth forward direction vector, w = illum factor ;------------------------------------------------------------------------------ #include "macros.vsh" $WARPPARAM = $SHADER_SPECIFIC_CONST_2; $ENTITY_ORIGIN = $SHADER_SPECIFIC_CONST_3; ;------------------------------------------------------------------------------ ; Vertex blending ;------------------------------------------------------------------------------ alloc $worldPos alloc $worldNormal &SkinPositionAndNormal( $worldPos, $worldNormal ); ;------------------------------------------------------------------------------ ; Optional intro warping ;------------------------------------------------------------------------------ if ( $INTRO == 1 ) { alloc $tmp sub $tmp.xyz, $worldPos, $ENTITY_ORIGIN mul $tmp.xy, $tmp, $WARPPARAM add $worldPos.xyz, $tmp, $ENTITY_ORIGIN free $tmp } ;------------------------------------------------------------------------------ ; Transform the position from world to view space ;------------------------------------------------------------------------------ alloc $projPos dp4 $projPos.x, $worldPos, $cViewProj0 dp4 $projPos.y, $worldPos, $cViewProj1 dp4 $projPos.z, $worldPos, $cViewProj2 dp4 $projPos.w, $worldPos, $cViewProj3 mov oPos, $projPos ;------------------------------------------------------------------------------ ; Fog ;------------------------------------------------------------------------------ &CalcFog( $worldPos, $projPos ); free $projPos ;------------------------------------------------------------------------------ ; Lighting ;------------------------------------------------------------------------------ alloc $linearColor &DoDynamicLightingToLinear( $worldPos, $worldNormal, $linearColor ); ;------------------------------------------------------------------------------ ; Factor in teeth darkening factors ;------------------------------------------------------------------------------ alloc $tmp mul $linearColor.xyz, $SHADER_SPECIFIC_CONST_0.w, $linearColor ; FIXME Color darkened by illumination factor dp3 $tmp, $worldNormal, $SHADER_SPECIFIC_CONST_0 ; Figure out mouth forward dot normal max $tmp, $cZero, $tmp ; clamp from 0 to 1 mul $linearColor.xyz, $tmp, $linearColor ; Darken by forward dot normal too ;------------------------------------------------------------------------------ ; Output color (gamma correction) ;------------------------------------------------------------------------------ alloc $gammaColor &LinearToGamma( $linearColor, $gammaColor ); free $linearColor mul oD0.xyz, $gammaColor.xyz, $cOverbrightFactor mov oD0.w, $cOne ; make sure all components are defined free $gammaColor free $worldPos free $worldNormal free $tmp ;------------------------------------------------------------------------------ ; Texture coordinates ;------------------------------------------------------------------------------ mov oT0, $vTexCoord0