Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

MultiMesh

Hérite de : Resource < RefCounted < Object

Fournit du dessin haute performance d'un maillage plusieurs fois en utilisant l’instanciation par le GPU.

Description

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.

Tutoriels

Propriétés

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éthodes

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)


Énumérations

enum TransformFormat: 🔗

TransformFormat TRANSFORM_2D = 0

Utiliser ceci de l'utilisation de transformations 2D.

TransformFormat TRANSFORM_3D = 1

Utiliser ceci de l'utilisation de transformations 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.


Descriptions des propriétés

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 🔗

Obsolète : Accessing this property is very slow. Use set_instance_color() and get_instance_color() instead.

Tableau contenant chaque Color utilisée par toutes les instances de ce maillage.

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 personnalisée pour cette ressource MultiMesh. Définir ceci manuellement empêche des calculs coûteux d'AABB durant l'exécution.


PackedColorArray custom_data_array 🔗

Obsolète : Accessing this property is very slow. Use set_instance_custom_data() and get_instance_custom_data() instead.

Tableau contenant chaque valeur de données personnalisées utilisées par toutes les instances de ce maillage, en tant que 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()

Nombre d'instances qui seront dessinées. Cela videra et re-dimensionnera les buffers. Définir le format des données ou les drapeaux après ceci n'aura aucun effet.

Par défaut, toutes les instantes sont dessinées mais vous pouvez limiter cela avec visible_instance_count.


Mesh mesh 🔗

  • void set_mesh(value: Mesh)

  • Mesh get_mesh()

Ressource Mesh à instancier.

Les apparences des instances individuelles peuvent être modifiées en utilisant set_instance_color() et set_instance_custom_data().


PhysicsInterpolationQuality physics_interpolation_quality = 0 🔗

Choisissez si vous utilisez une méthode d'interpolation qui favorise la vitesse ou la qualité.

Lors de l'utilisation de faibles vitesses de tics de physique (généralement inférieur à 20) ou de vitesses élevées de rotation d'objets, vous pouvez obtenir de meilleurs résultats à partir du réglage en haute qualité.

**Note: ** Une qualité rapide n'équivaut pas à une qualité basse. Sauf dans les cas spéciaux mentionnés ci-dessus, la qualité devrait être comparable à la haute qualité.


PackedVector2Array transform_2d_array 🔗

Obsolète : Accessing this property is very slow. Use set_instance_transform_2d() and get_instance_transform_2d() instead.

Tableau contenant chaque valeur de Transform2D utilisées par toutes les instances de ce maillage, en tant que PackedVector2Array. Chaque transformation est divisée en 3 valeurs Vector2 correspondant aux x, y, et origin de la transformation.

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 🔗

Obsolète : Accessing this property is very slow. Use set_instance_transform() and get_instance_transform() instead.

Tableau contenant chaque valeur de Transform3D utilisées par toutes les instances de ce maillage, en tant que PackedVector3Array. Chaque transformation est divisée en 4 valeurs Vector3 correspondant aux valeurs x, y, z, et origin de la transformation.

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 🔗

Le format de la transformation utilisée pour le transformation du maillage, soit en 2D ou en 3D.


bool use_colors = false 🔗

  • void set_use_colors(value: bool)

  • bool is_using_colors()

Si true, le MultiMesh utilisera des données de couleur (voir set_instance_color()). Peut seulement être défini lorsque instance_count vaut 0 ou moins. Cela signifie que vous devez appeler cette méthode avant de définir le nombre d'instances, ou de le réinitialiser temporairement à 0.


bool use_custom_data = false 🔗

  • void set_use_custom_data(value: bool)

  • bool is_using_custom_data()

Si true, MultiMesh utilisera des données personnalisées (voir set_instance_custom_data()). Peut seulement être défini lorsque instance_count vaut 0 ou moins. Cela signifie que vous devez appeler cette méthode avant de définir le nombre d'instances, ou de le réinitialiser temporairement à 0.


int visible_instance_count = -1 🔗

  • void set_visible_instance_count(value: int)

  • int get_visible_instance_count()

Limite le nombre d'instances affichées, et -1 les dessine toutes. Changer cela ne change pas la taille des mémoires tampons.


Descriptions des méthodes

AABB get_aabb() const 🔗

Renvoie la boîte délimitante de visibilité alignée sur les axes, dans l'espace local.


Color get_instance_color(instance: int) const 🔗

Obtient le multiplicateur de couleur d'une instance spécifique.


Color get_instance_custom_data(instance: int) const 🔗

Renvoie les données personnalisées qui ont été définies pour cette instance spécifique.


Transform3D get_instance_transform(instance: int) const 🔗

Renvoie la Transform3D d'une instance spécifique.


Transform2D get_instance_transform_2d(instance: int) const 🔗

Renvoie la Transform2D de l'instance spécifiée.


void reset_instance_physics_interpolation(instance: int) 🔗

Lorsque de l'utilisation de l'interpolation de la physique, cette fonction vous permet d'empêcher l'interpolation sur une instance dans le tic de physique actuel.

Cela vous permet de déplacer des instances instantanément, et devrait généralement être utilisé lors de la mise en place initiale d'une instance telle qu'une balle pour empêcher des problèmes graphiques.


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) 🔗

Définit la couleur d'une instance spécifique en multipliant les couleurs des sommets existants du maillage. Cela permet d'avoir une teinte de couleur différente par instance.

Note : Chaque composante est stockée sur 32 bits dans les méthodes de rendu Forward+ et Mobile, mais est compactée sur 16 bits dans la méthode de rendu Compatiblité.

Pour que la couleur soit modifiée, assurez-vous que use_colors vaille true sur le MultiMesh et que BaseMaterial3D.vertex_color_use_as_albedo vaille true dans le matériau. Si vous avez l'intention de définir une couleur absolue au lieu de teinter, assurez-vous que la couleur d'albedo du matériau soit définie à un blanc pur (Color(1, 1, 1)).


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

Définit des données personnalisées pour une instance spécifique. custom_data est un type Color qui contient seulement 4 nombres flottants.

Note : Chaque composante est stockée sur 32 bits dans les méthodes de rendu Forward+ et Mobile, mais est compactée sur 16 bits dans la méthode de rendu Compatiblité.

Pour que les données personnalisées soient utilisées, assurez-vous que use_custom_data vaille true.

Ces données d'instance personnalisées doivent être accédées manuellement dans votre shader personnalisé en utilisant INSTANCE_CUSTOM.


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

Définit la Transform3D pour une instance spécifique.


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

Définit la Transform2D pour l'instance spécifiée.