struct Input { float3 Position : TEXCOORD0; float3 Normal : TEXCOORD1; float4 Color : TEXCOORD2; float2 UV : TEXCOORD3; uint Bones : TEXCOORD4; uint weights : TEXCOORD5; uint InstanceIndex : SV_InstanceID; }; struct Output { float2 TexCoord : TEXCOORD0; float4 Position : SV_Position; }; struct Scene { float4x4 Model; }; StructuredBuffer scene: register(t0, space0); cbuffer Uniforms : register(b0, space1) { float4x4 ViewProjection; float time; }; #define IDENTITY_MATRIX float4x4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) Output main(Input input) { Output output; output.TexCoord = input.UV; output.Position = mul(mul(float4(input.Position, 1.0), transpose(scene[input.InstanceIndex].Model)), transpose(ViewProjection)); return output; }