MultiMesh

Hereda: Resource < RefCounted < Object

Provides high-performance drawing of a mesh multiple times using GPU instancing.

Descripción

MultiMesh provides low-level mesh instancing. Drawing thousands of MeshInstance3D nodes can be slow, since each object is submitted to the GPU then drawn individually.

MultiMesh is much faster as it can draw thousands of instances with a single draw call, resulting in less API overhead.

As a drawback, if the instances are too far away from each other, performance may be reduced as every single instance will always render (they are spatially indexed as one, for the whole object).

Since instances may have any behavior, the AABB used for visibility must be provided by the user.

Note: A MultiMesh is a single object, therefore the same maximum lights per object restriction applies. This means, that once the maximum lights are consumed by one or more instances, the rest of the MultiMesh instances will not receive any lighting.

Note: Blend Shapes will be ignored if used in a MultiMesh.

Tutoriales

Propiedades

PackedFloat32Array

buffer

PackedFloat32Array()

PackedColorArray

color_array

AABB

custom_aabb

AABB(0, 0, 0, 0, 0, 0)

PackedColorArray

custom_data_array

int

instance_count

0

Mesh

mesh

PhysicsInterpolationQuality

physics_interpolation_quality

0

PackedVector2Array

transform_2d_array

PackedVector3Array

transform_array

TransformFormat

transform_format

0

bool

use_colors

false

bool

use_custom_data

false

int

visible_instance_count

-1

Métodos

AABB

get_aabb() const

Color

get_instance_color(instance: int) const

Color

get_instance_custom_data(instance: int) const

Transform3D

get_instance_transform(instance: int) const

Transform2D

get_instance_transform_2d(instance: int) const

void

reset_instance_physics_interpolation(instance: int)

void

reset_instances_physics_interpolation()

void

set_buffer_interpolated(buffer_curr: PackedFloat32Array, buffer_prev: PackedFloat32Array)

void

set_instance_color(instance: int, color: Color)

void

set_instance_custom_data(instance: int, custom_data: Color)

void

set_instance_transform(instance: int, transform: Transform3D)

void

set_instance_transform_2d(instance: int, transform: Transform2D)


Enumeraciones

enum TransformFormat: 🔗

TransformFormat TRANSFORM_2D = 0

Utiliza esto cuando uses las transformadas 2D.

TransformFormat TRANSFORM_3D = 1

Utiliza esto cuando uses las transformadas 3D.


enum PhysicsInterpolationQuality: 🔗

PhysicsInterpolationQuality INTERP_QUALITY_FAST = 0

Always interpolate using Basis lerping, which can produce warping artifacts in some situations.

PhysicsInterpolationQuality INTERP_QUALITY_HIGH = 1

Attempt to interpolate using Basis slerping (spherical linear interpolation) where possible, otherwise fall back to lerping.


Descripciones de Propiedades

PackedFloat32Array buffer = PackedFloat32Array() 🔗

There is currently no description for this property. Please help us by contributing one!

Note: The returned array is copied and any changes to it will not update the original property value. See PackedFloat32Array for more details.


PackedColorArray color_array 🔗

Obsoleto: Accessing this property is very slow. Use set_instance_color() and get_instance_color() instead.

array que contiene cada Color usado por todas las instancias de esta malla.

Note: The returned array is copied and any changes to it will not update the original property value. See PackedColorArray for more details.


AABB custom_aabb = AABB(0, 0, 0, 0, 0, 0) 🔗

  • void set_custom_aabb(value: AABB)

  • AABB get_custom_aabb()

AABB personalizado para este recurso MultiMesh. Establecer esto manualmente evita costosas recalculaciones de AABB en tiempo de ejecución.


PackedColorArray custom_data_array 🔗

Obsoleto: Accessing this property is very slow. Use set_instance_custom_data() and get_instance_custom_data() instead.

Array que contiene cada valor de datos personalizado usado por todas las instancias de esta malla, como un PackedColorArray.

Note: The returned array is copied and any changes to it will not update the original property value. See PackedColorArray for more details.


int instance_count = 0 🔗

  • void set_instance_count(value: int)

  • int get_instance_count()

Número de instancias que se dibujarán. Esto limpia y (re)dimensiona los búferes. Establecer el formato de datos o las banderas después no tendrá efecto.

Por defecto, todas las instancias se dibujan, pero puedes limitar esto con visible_instance_count.


Mesh mesh 🔗

  • void set_mesh(value: Mesh)

  • Mesh get_mesh()

Recurso Mesh a instanciar.

La apariencia de las instancias individuales puede modificarse usando set_instance_color() y set_instance_custom_data().


PhysicsInterpolationQuality physics_interpolation_quality = 0 🔗

Elige si usar un método de interpolación que favorezca la velocidad o la calidad.

Cuando uses bajas tasas de tick de física (típicamente por debajo de 20) o altas tasas de rotación de objetos, puedes obtener mejores resultados con la configuración de alta calidad.

Nota: La calidad rápida no equivale a baja calidad. Excepto en los casos especiales mencionados anteriormente, la calidad debería ser comparable a la alta calidad.


PackedVector2Array transform_2d_array 🔗

Obsoleto: Accessing this property is very slow. Use set_instance_transform_2d() and get_instance_transform_2d() instead.

Array que contiene cada valor Transform2D usado por todas las instancias de esta malla, como un PackedVector2Array. Cada transformación se divide en 3 valores Vector2 correspondientes a x, y, y origin de las transformaciones.

Note: The returned array is copied and any changes to it will not update the original property value. See PackedVector2Array for more details.


PackedVector3Array transform_array 🔗

Obsoleto: Accessing this property is very slow. Use set_instance_transform() and get_instance_transform() instead.

Array que contiene cada valor Transform3D usado por todas las instancias de esta malla, como un PackedVector3Array. Cada transformación se divide en 4 valores Vector3 correspondientes a x, y, z, y origin de las transformaciones.

Note: The returned array is copied and any changes to it will not update the original property value. See PackedVector3Array for more details.


TransformFormat transform_format = 0 🔗

Formato de transformación usado para transformar la malla, ya sea 2D o 3D.


bool use_colors = false 🔗

  • void set_use_colors(value: bool)

  • bool is_using_colors()

Si true, el MultiMesh usará datos de color (véase set_instance_color()). Solo se puede establecer cuando instance_count es 0 o menos. Esto significa que necesitas llamar a este método antes de establecer el conteo de instancias, o restablecerlo temporalmente a 0.


bool use_custom_data = false 🔗

  • void set_use_custom_data(value: bool)

  • bool is_using_custom_data()

Si true, el MultiMesh usará datos personalizados (véase set_instance_custom_data()). Solo se puede establecer cuando instance_count es 0 o menos. Esto significa que necesitas llamar a este método antes de establecer el conteo de instancias, o restablecerlo temporalmente a 0.


int visible_instance_count = -1 🔗

  • void set_visible_instance_count(value: int)

  • int get_visible_instance_count()

Limita el número de instancias dibujadas, -1 dibuja todas las instancias. Cambiar esto no cambia el tamaño de los búferes.


Descripciones de Métodos

AABB get_aabb() const 🔗

Returns the visibility axis-aligned bounding box in local space.


Color get_instance_color(instance: int) const 🔗

Obtiene el multiplicador de color de una instancia específica.


Color get_instance_custom_data(instance: int) const 🔗

Devuelve los datos personalizados que se han establecido para una instancia específica.


Transform3D get_instance_transform(instance: int) const 🔗

Returns the Transform3D of a specific instance.


Transform2D get_instance_transform_2d(instance: int) const 🔗

Devuelve la Transform2D de una instancia específica.


void reset_instance_physics_interpolation(instance: int) 🔗

When using physics interpolation, this function allows you to prevent interpolation on an instance in the current physics tick.

This allows you to move instances instantaneously, and should usually be used when initially placing an instance such as a bullet to prevent graphical glitches.


void reset_instances_physics_interpolation() 🔗

When using physics interpolation, this function allows you to prevent interpolation for all instances in the current physics tick.

This allows you to move all instances instantaneously, and should usually be used when initially placing instances to prevent graphical glitches.


void set_buffer_interpolated(buffer_curr: PackedFloat32Array, buffer_prev: PackedFloat32Array) 🔗

An alternative to setting the buffer property, which can be used with physics interpolation. This method takes two arrays, and can set the data for the current and previous tick in one go. The renderer will automatically interpolate the data at each frame.

This is useful for situations where the order of instances may change from physics tick to tick, such as particle systems.

When the order of instances is coherent, the simpler alternative of setting buffer can still be used with interpolation.


void set_instance_color(instance: int, color: Color) 🔗

Sets the color of a specific instance by multiplying the mesh's existing vertex colors. This allows for different color tinting per instance.

Note: Each component is stored in 32 bits in the Forward+ and Mobile rendering methods, but is packed into 16 bits in the Compatibility rendering method.

For the color to take effect, ensure that use_colors is true on the MultiMesh and BaseMaterial3D.vertex_color_use_as_albedo is true on the material. If you intend to set an absolute color instead of tinting, make sure the material's albedo color is set to pure white (Color(1, 1, 1)).


void set_instance_custom_data(instance: int, custom_data: Color) 🔗

Sets custom data for a specific instance. custom_data is a Color type only to contain 4 floating-point numbers.

Note: Each number is stored in 32 bits in the Forward+ and Mobile rendering methods, but is packed into 16 bits in the Compatibility rendering method.

For the custom data to be used, ensure that use_custom_data is true.

This custom instance data has to be manually accessed in your custom shader using INSTANCE_CUSTOM.


void set_instance_transform(instance: int, transform: Transform3D) 🔗

Establece el Transform3D para una instancia específica.


void set_instance_transform_2d(instance: int, transform: Transform2D) 🔗

Establece el Transform2D para una instancia específica.