void trollSkinning_One_Weight_vp( float4 position : POSITION, float3 normal : NORMAL, float2 uv : TEXCOORD0, float blendIdx : BLENDINDICES, out float4 oPosition : POSITION, out float2 oUv : TEXCOORD0, out float4 colour : COLOR, uniform float3x4 worldMatrix3x4Array[67], uniform float4x4 viewProjectionMatrix, uniform float4 lightPos[2], uniform float4 lightDiffuseColour[2], uniform float4 ambient) { // transform by indexed matrix float4 blendPos = float4(mul(worldMatrix3x4Array[blendIdx], position).xyz, 1.0); // view / projection oPosition = mul(viewProjectionMatrix, blendPos); // transform normal float3 norm = mul((float3x3)worldMatrix3x4Array[blendIdx], normal); // Lighting - support point and directional float3 lightDir0 = normalize( lightPos[0].xyz - (blendPos.xyz * lightPos[0].w)); float3 lightDir1 = normalize( lightPos[1].xyz - (blendPos.xyz * lightPos[1].w)); oUv = uv; colour = ambient + (saturate(dot(lightDir0, norm)) * lightDiffuseColour[0]) // +(saturate(dot(lightDir1, norm)) * lightDiffuseColour[1]) ; } 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); }