vs_2_0 dcl_position v0 dcl_normal v1 dcl_texcoord6 v14 dcl_texcoord7 v15 dcl_position1 v6 dcl_normal1 v10 dcl_position2 v7 dcl_normal2 v11 dcl_position3 v8 dcl_normal3 v12 dcl_position4 v9 dcl_normal4 v13 #include "../../VertexShader.h" ;------------------------------------------------------------------------------ ; Geometry transform ;------------------------------------------------------------------------------ ; Calculate bone indices mad r7, vIndices, c23.x, c23.y ; Sum weighted blendshape position deltas mul rTemp, vBlend0, c24.x mad rTemp, vBlend1, c24.y, rTemp mad rTemp, vBlend2, c24.z, rTemp mad rTemp, vBlend3, c24.w, rTemp mad rTemp.xyz, c26.x, rTemp, vPos mov rTemp.w, C_ONE ; Skin position by bone 0 MOVA a0.x, r7.x m4x3 r0.xyz, rTemp, c[a0.x] mul pPos.xyz, r0.xyz, vWeights.xxx ; Calculate the second bone weight from the first sub r8.x, C_ONE, vWeights.x ; Skin position by bone 1 MOVA a0.x, r7.y m4x3 r0.xyz, rTemp, c[a0.x] mad pPos.xyz, r0.xyz, r8.x, pPos mov pPos.w, C_ONE ; Sum weighted blendshape normal deltas mul rTemp, vBlendNorm0, c25.x mad rTemp, vBlendNorm1, c25.y, rTemp mad rTemp, vBlendNorm2, c25.z, rTemp mad rTemp, vBlendNorm3, c25.w, rTemp mad rTemp, c26.x, rTemp, vNormal ; Skin normal by bone 0 MOVA a0.x, r7.x m3x3 pNormal.xyz, rTemp, c[a0.x] NormalizeVector(pNormal) ; Transform skinned position to projection space m4x4 OPOS, pPos, C_PROJECTION_MATRIX FIXUP_OPOS #include "..\..\VertexShader.h" ;------------------------------------------------------------------------------ ; Defines ;------------------------------------------------------------------------------ #define C_LIGHT_POSITION c10 #define C_LIGHT_DIR c11 #define C_SHADING_TYPE c12 #define C_TEXGEN_MATRIX_1 c13 #define C_TEXGEN_MATRIX_2 c14 #define C_TEXGEN_MATRIX_3 c15 #define C_ATTENUATION_RANGE c16 ;------------------------------------------------------------------------------ ; Diffuse color ;------------------------------------------------------------------------------ ; Initialize diffuse color mov rFinalDiffuse, C_MATERIAL_COLOR ; Calculate the vertex-to-light vector, and project along the light's direction add rVertexToLight, C_LIGHT_POSITION, -pPos dp3 rAtten.x, C_LIGHT_DIR, rVertexToLight ; Clip vertices behind the light to zero sge rTemp.x, rAtten.x, C_LIGHT_POSITION.w mul rFinalDiffuse.w, rFinalDiffuse.w, rTemp.x ; Apply N-dot-L shading to the diffuse alpha NormalizeVector(rVertexToLight) dp3 rLightCoeff.x, pNormal, C_LIGHT_DIR ; Directional light shading dp3 rLightCoeff.y, pNormal, rVertexToLight ; Point light shading mov rLightCoeff.z, C_ZERO dp3 rLightCoeff, rLightCoeff, C_SHADING_TYPE ; Select type of shading to apply max rLightCoeff.x, rLightCoeff.x, C_ZERO.x mul rFinalDiffuse.w, rFinalDiffuse.w, rLightCoeff.x ; Scale projected vertex-to-light vector and apply to the diffuse alpha mad rAtten.x, rAtten.x, C_ATTENUATION_RANGE.x, C_ATTENUATION_RANGE.y max rAtten.x, rAtten.x, C_ZERO min rAtten.x, rAtten.x, C_ONE mul rFinalDiffuse.w, rFinalDiffuse.w, rAtten.x ; Copy the final color to output mov oD0, rFinalDiffuse #include "..\..\VertexShader.h" ;------------------------------------------------------------------------------ ; Fog calculation ;------------------------------------------------------------------------------ #include "..\..\VertexShader.h" ;------------------------------------------------------------------------------ ; Defines ;------------------------------------------------------------------------------ #define C_LIGHT_POSITION c10 #define C_LIGHT_DIR c11 #define C_SHADING_TYPE c12 #define C_TEXGEN_MATRIX_1 c13 #define C_TEXGEN_MATRIX_2 c14 #define C_TEXGEN_MATRIX_3 c15 #define C_ATTENUATION_RANGE c16 #define C_INTERPOLATION_RANGE c17 ;------------------------------------------------------------------------------ ; Texture coordinates ;------------------------------------------------------------------------------ ; Apply texture matrix to position to generate texture coordinates #ifdef _XBOX dp4 oT0.x, pPos, C_TEXGEN_MATRIX_1 #else dp4 oT0, pPos, C_TEXGEN_MATRIX_1 #endif dp4 oT0.y, pPos, C_TEXGEN_MATRIX_2 ; Third texture coordinate needed for perspective divide dp4 oT0.w, pPos, C_TEXGEN_MATRIX_3