void trollSkinning_One_Weight_vp( float4 position : POSITION, float3 normal : NORMAL, float2 uv : TEXCOORD0, float3 tangent : TANGENT, float blendIdx : BLENDINDICES, out float4 oPosition : POSITION, out float2 oUv : TEXCOORD0, out float3 oTangent: TEXCOORD1, out float3 oBinormal: TEXCOORD2, out float3 oNormal : TEXCOORD3, out float3 V: TEXCOORD4, out float3 L: TEXCOORD5, uniform float3x4 worldMatrix3x4Array[67], uniform float4x4 viewProjectionMatrix, uniform float4 lightPos, uniform float4 cameraPos) { // transform by indexed matrix float4 blendPos = float4(mul(worldMatrix3x4Array[blendIdx], position).xyz, 1.0); // view / projection oPosition = mul(viewProjectionMatrix, blendPos); // transform normal oNormal = mul((float3x3)worldMatrix3x4Array[blendIdx], normal); oTangent = mul((float3x3)worldMatrix3x4Array[blendIdx], tangent); oNormal = normalize(oNormal); oTangent = normalize(oTangent); oBinormal = cross(oTangent, oNormal); // Lighting - support point and directional L = lightPos.xyz - blendPos.xyz * lightPos.w; V = cameraPos.xyz - blendPos.xyz; oUv = uv; } void trollSkinning_SMGen_One_Weight_vp( float4 position : POSITION, float blendIdx : BLENDINDICES, out float4 oPosition : POSITION, out float3 cPos:TEXCOORD0, // Support up to 24 bones of float3x4 // vs_1_1 only supports 96 params so more than this is not feasible uniform float3x4 worldMatrix3x4Array[67], uniform float4x4 viewMatrix, uniform float4x4 viewProjectionMatrix) { // transform by indexed matrix float4 blendPos = float4(mul(worldMatrix3x4Array[blendIdx], position).xyz, 1.0); // view / projection cPos = mul(viewMatrix, blendPos).xyz; oPosition = mul(viewProjectionMatrix, blendPos); }