/* * File: SkinnedPrelit.txt Vertex Shader * * Author: Ben Cohen (04/08/2000) * * Description: Skinned animation pre-lit shader * * Constants: * * c0 - constants vector {0,1.0,0.5,256} * c1 - screen offsets {0.53125, 0.53125, 0.03125, 0.0} * c2-c5 - World->screen transformation matrix. * c6 - Light direction * c7 - Directional light colour * c8 - Ambient light Colour * c9-c12 - Bone matrix 0 (transposed) * c13... - Bone matrix 1 - n (transposed) * * Streams: * * v0 - Position vector {x,y,z,w} * v1 - weight {x,y,z,w} * v2 - Bone index packed * v3 - Colour * v4 - Texture co-ords {u,v} ************************************************/ vs.1.1 #define BONE_INDEX_PACKED v2 #define BONE_INDEX r3 #define VERTEX_POSITION v0 #define BONE_WEIGHT v1 #define CV_ZERO c[CV_CONSTANT].xxxx #define CV_ONE c[CV_CONSTANT].yyyy #define CV_256 c[CV_CONSTANT].wwww #define R_EYE_POSITION r3 #define R_EYE_DISTANCE r4 #include "Shader_def.h" ; transform position mul BONE_INDEX, BONE_INDEX_PACKED, CV_256 mov a0.x, BONE_INDEX.x dp4 r0.x, VERTEX_POSITION, c[a0.x + 0] dp4 r0.y, VERTEX_POSITION, c[a0.x + 1] dp4 r0.z, VERTEX_POSITION, c[a0.x + 2] dp4 r0.w, VERTEX_POSITION, c[a0.x + 3] mul r0, r0, BONE_WEIGHT.x mov a0.x, BONE_INDEX.y dp4 r1.x, VERTEX_POSITION, c[a0.x + 0] dp4 r1.y, VERTEX_POSITION, c[a0.x + 1] dp4 r1.z, VERTEX_POSITION, c[a0.x + 2] dp4 r1.w, VERTEX_POSITION, c[a0.x + 3] mad r0, r1, BONE_WEIGHT.y, r0 mov a0.x, BONE_INDEX.z dp4 r1.x, VERTEX_POSITION, c[a0.x + 0] dp4 r1.y, VERTEX_POSITION, c[a0.x + 1] dp4 r1.z, VERTEX_POSITION, c[a0.x + 2] dp4 r1.w, VERTEX_POSITION, c[a0.x + 3] mad r0, r1, BONE_WEIGHT.z, r0 /* Fog calculation */ dp4 R_EYE_POSITION.x, r0, c[CV_WORLDVIEW_0] dp4 R_EYE_POSITION.y, r0, c[CV_WORLDVIEW_1] dp4 R_EYE_POSITION.z, r0, c[CV_WORLDVIEW_2] dp3 R_EYE_DISTANCE, R_EYE_POSITION, R_EYE_POSITION rsq R_EYE_DISTANCE, R_EYE_DISTANCE rcp R_EYE_DISTANCE, R_EYE_DISTANCE /* Fog */ mad oFog.x, -R_EYE_DISTANCE.y, c[CV_FOG_DATA].z, c[CV_FOG_DATA].y ; transform position dp4 oPos.x, r0, c[CV_WORLDVIEWPROJ_0] dp4 oPos.y, r0, c[CV_WORLDVIEWPROJ_1] dp4 oPos.z, r0, c[CV_WORLDVIEWPROJ_2] dp4 oPos.w, r0, c[CV_WORLDVIEWPROJ_3] ; Copy vertex colour mov oD0, v3 ; Copy texture co-ords across mov oT0, v4