You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.1 KiB
97 lines
3.1 KiB
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
|
|
|
|
|
|
|