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.
Checking the stable version of the documentation...
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
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Méthodes
get_aabb() const |
|
get_instance_color(instance: int) const |
|
get_instance_custom_data(instance: int) const |
|
get_instance_transform(instance: int) const |
|
get_instance_transform_2d(instance: int) const |
|
void |
reset_instance_physics_interpolation(instance: int) |
void |
|
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() 🔗
void set_buffer(value: PackedFloat32Array)
PackedFloat32Array get_buffer()
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) 🔗
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.
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.
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 🔗
void set_physics_interpolation_quality(value: PhysicsInterpolationQuality)
PhysicsInterpolationQuality get_physics_interpolation_quality()
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 🔗
void set_transform_format(value: TransformFormat)
TransformFormat get_transform_format()
Le format de la transformation utilisée pour le transformation du maillage, soit en 2D ou en 3D.
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 🔗
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 🔗
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
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.