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.
85 lines
3.6 KiB
85 lines
3.6 KiB
vs.1.1
|
|
|
|
# DYNAMIC: "DOWATERFOG" "0..1"
|
|
# DYNAMIC: "SKINNING" "0..1"
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Constants specified by the app
|
|
; $SHADER_SPECIFIC_CONST_0-$SHADER_SPECIFIC_CONST_2 = Shadow texture matrix
|
|
; $SHADER_SPECIFIC_CONST_3 = Tex origin
|
|
; $SHADER_SPECIFIC_CONST_4 = Tex Scale
|
|
; $SHADER_SPECIFIC_CONST_5 = [Shadow falloff offset, 1/Shadow distance, Shadow scale, 0 ]
|
|
;------------------------------------------------------------------------------
|
|
|
|
#include "macros.vsh"
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Vertex blending (whacks r1-r7, positions in r7, normals in r8)
|
|
;------------------------------------------------------------------------------
|
|
&AllocateRegister( \$worldPos );
|
|
&AllocateRegister( \$worldNormal );
|
|
&SkinPositionAndNormal( $worldPos, $worldNormal );
|
|
|
|
; Transform the position from world to view space
|
|
&AllocateRegister( \$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 );
|
|
&FreeRegister( \$projPos );
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Transform position into texture space (from 0 to 1)
|
|
;------------------------------------------------------------------------------
|
|
&AllocateRegister( \$texturePos );
|
|
dp4 $texturePos.x, $worldPos, $SHADER_SPECIFIC_CONST_0
|
|
dp4 $texturePos.y, $worldPos, $SHADER_SPECIFIC_CONST_1
|
|
dp4 $texturePos.z, $worldPos, $SHADER_SPECIFIC_CONST_2
|
|
&FreeRegister( \$worldPos );
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Figure out the shadow fade amount
|
|
;------------------------------------------------------------------------------
|
|
&AllocateRegister( \$shadowFade );
|
|
sub $shadowFade, $texturePos.z, $SHADER_SPECIFIC_CONST_5.x
|
|
mul $shadowFade, $shadowFade, $SHADER_SPECIFIC_CONST_5.y
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Offset it into the texture
|
|
;------------------------------------------------------------------------------
|
|
&AllocateRegister( \$actualTextureCoord );
|
|
mul $actualTextureCoord.xyz, $SHADER_SPECIFIC_CONST_4, $texturePos
|
|
add oT0.xyz, $actualTextureCoord, $SHADER_SPECIFIC_CONST_3
|
|
;mov oT0.xyz, $texturePos
|
|
&FreeRegister( \$actualTextureCoord );
|
|
|
|
;------------------------------------------------------------------------------
|
|
; We're doing clipping by using texkill
|
|
;------------------------------------------------------------------------------
|
|
mov oT1.xyz, $texturePos ; also clips when shadow z < 0 !
|
|
sub oT2.xyz, $cOne, $texturePos
|
|
sub oT2.z, $cOne, $shadowFade.z ; clips when shadow z > shadow distance
|
|
&FreeRegister( \$texturePos );
|
|
|
|
;------------------------------------------------------------------------------
|
|
; We're doing backface culling by using texkill also (wow yucky)
|
|
;------------------------------------------------------------------------------
|
|
; Transform z component of normal in texture space
|
|
; If it's negative, then don't draw the pixel
|
|
dp3 oT3, $worldNormal, -$SHADER_SPECIFIC_CONST_2
|
|
&FreeRegister( \$worldNormal );
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Shadow color, falloff
|
|
;------------------------------------------------------------------------------
|
|
mov oD0, $cModulationColor
|
|
mul oD0.w, $shadowFade.x, $SHADER_SPECIFIC_CONST_5.z
|
|
&FreeRegister( \$shadowFade );
|
|
|