vs.1.1 //load the first index mov a0.x, v6.x //transform pos by first bone dp4 r0.x, v0, c[a0.x + 20] //20 being the base of the bone constants dp4 r0.y, v0, c[a0.x + 21] dp4 r0.z, v0, c[a0.x + 22] mov r0.w, c89.y //transform normal by first bone dp3 r4.x, v1, c[a0.x + 20] dp3 r4.y, v1, c[a0.x + 21] dp3 r4.z, v1, c[a0.x + 22] mov r4.w, c89.y //load the second index mov a0.x, v6.y //transform pos by second bone dp4 r1.x, v0, c[a0.x + 20] //20 being the base of the bone constants dp4 r1.y, v0, c[a0.x + 21] dp4 r1.z, v0, c[a0.x + 22] mov r1.w,c89.y //transform normal by second bone dp3 r5.x, v1, c[a0.x + 20] dp3 r5.y, v1, c[a0.x + 21] dp3 r5.z, v1, c[a0.x + 22] mov r5.w,c89.y //load the third index mov a0.x, v6.z //transform pos by third bone dp4 r2.x, v0, c[a0.x + 20] //20 being the base of the bone constants dp4 r2.y, v0, c[a0.x + 21] dp4 r2.z, v0, c[a0.x + 22] mov r2.w, c89.y //transform normal by third bone dp3 r6.x, v1, c[a0.x + 20] dp3 r6.y, v1, c[a0.x + 21] dp3 r6.z, v1, c[a0.x + 22] mov r6.w, c89.y //load the fourth index mov a0.x, v6.w //transform pos by fourth bone dp4 r3.x, v0, c[a0.x + 20] //20 being the base of the bone constants dp4 r3.y, v0, c[a0.x + 21] dp4 r3.z, v0, c[a0.x + 22] mov r3.w, c89.y //transform normal by fourth bone dp3 r7.x, v1, c[a0.x + 20] dp3 r7.y, v1, c[a0.x + 21] dp3 r7.z, v1, c[a0.x + 22] mov r7.w, c89.y //blend the poition values mul r0, r0, v7.x mad r0, r1, v7.y, r0 mad r0, r2, v7.z, r0 mad r0, r3, v7.w, r0 //blend the normal values and store the result in r1 mul r1, r4, v7.x mad r1, r5, v7.y, r1 mad r1, r6, v7.z, r1 mad r1, r7, v7.w, r1 //////////////////////////////////////////////// // transform vertex pos into homogeneous xyzw // //////////////////////////////////////////////// dp4 oPos.x, r0, c0 dp4 oPos.y, r0, c1 dp4 oPos.z, r0, c2 dp4 r0.x, r0, c3 mov oPos.w, r0.x mad r0.x, r0.x , c90.x, c90.y min r0.x, r0.x , c90.w max r0.x, r0.x , c90.z mov oFog.x,r0.x ; Rotate the normal into world space (no need to translate or scale) dp3 r4.x, r1, c12 dp3 r4.y, r1, c13 dp3 r4.z, r1, c14 //r3 holds the final reflected light component mov r3, c89.x