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; }; Output main(Input input) { Output output; output.TexCoord = input.UV; output.Position = mul(ViewProjection, mul(float4(input.Position, 1.0), scene[input.InstanceIndex].Model)); return output; }