void DrawModelInstanced( Model model, System.Span<Transform> transforms, RenderAttributes attributes )
void DrawModelInstanced( Model model, int count, RenderAttributes attributes )

book_4_sparkGenerated
code_blocksInput

Description

The DrawModelInstanced method in the CommandList class is used to draw multiple instances of a model using GPU instancing. This method is particularly useful for rendering a large number of identical objects efficiently by leveraging the GPU's ability to process multiple instances in parallel. The method assumes the use of standard implemented shaders, and it is important to use the CalculateInstancingObjectToWorldMatrix function within shaders to access the instance transform.

There is a limitation of 1,048,576 transform slots per frame when using this method, which should be considered when planning the rendering of large numbers of instances.

Usage

To use the DrawModelInstanced method, you need to provide the following parameters:

  • model: The Model object that you want to draw multiple instances of.
  • transforms: A Span<Transform> containing the transforms for each instance of the model. This allows you to specify the position, rotation, and scale for each instance.
  • attributes: A RenderAttributes object that contains additional rendering attributes that may affect how the model is drawn.

Ensure that your shaders are set up to handle instancing and that you are within the transform slot limit per frame.

Example

// Example usage of DrawModelInstanced
var commandList = new CommandList();
var model = new Model("path/to/model");
var transforms = new Span<Transform>(new Transform[]
{
    new Transform(Vector3.Zero, Rotation.Identity, 1.0f),
    new Transform(new Vector3(1, 0, 0), Rotation.Identity, 1.0f),
    // Add more transforms as needed
});
var attributes = new RenderAttributes();

commandList.DrawModelInstanced(model, transforms, attributes);