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

Eredita: Resource < RefCounted < Object

Fornisce il disegno ad alte prestazioni di una mesh più volte tramite l'istanzamento sulla GPU.

Descrizione

MultiMesh fornisce istanze di mesh di basso livello. Disegnare migliaia di nodi MeshInstance3D può essere lento, poiché ogni oggetto viene inviato alla GPU e poi disegnato individualmente.

MultiMesh è molto più veloce poiché può disegnare migliaia di istanze con una singola chiamata di disegno, con conseguente minore sovraccarico sull'API.

Come svantaggio, se le istanze sono troppo distanti tra loro, le prestazioni potrebbero essere ridotte poiché ogni singola istanza sarà sempre renderizzata (sono indicizzate spazialmente come una, per l'intero oggetto).

Poiché le istanze possono avere qualsiasi comportamento, l'AABB utilizzato per la visibilità deve essere fornito dall'utente.

Nota: Un MultiMesh è un singolo oggetto, pertanto si applica la stessa restrizione di luci massime per oggetto. Ciò significa che una volta che le luci massime sono consumate da una o più istanze, il resto delle istanze di MultiMesh non riceveranno alcuna illuminazione.

Nota: Le forme di fusione saranno ignorate se utilizzate in un MultiMesh.

Tutorial

Proprietà

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

Metodi

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)


Enumerazioni

enum TransformFormat: 🔗

TransformFormat TRANSFORM_2D = 0

Usa questo quando esegui trasformazioni 2D.

TransformFormat TRANSFORM_3D = 1

Usa questo quando esegui trasformazioni 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.


Descrizioni delle proprietà

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 🔗

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

Array contenente ciascun Color utilizzato da tutte le istanze di questa mesh.

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

L'AABB personalizzato per questa risorsa MultiMesh. Impostandolo manualmente si evitano costosi ricalcoli dell'AABB in fase di esecuzione.


PackedColorArray custom_data_array 🔗

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

L'array contenente ciascun valore di dati personalizzati utilizzato da tutte le istanze di questa mesh, sotto forma di 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()

Numero di istanze che saranno disegnate. Questo svuota e (ri)dimensiona i buffer. Impostare il formato dei dati o dei flag successivamente non avrà alcun effetto.

Per impostazione predefinita, sono disegnate tutte le istanze, ma è possibile limitarlo con visible_instance_count.


Mesh mesh 🔗

  • void set_mesh(value: Mesh)

  • Mesh get_mesh()

Risorsa Mesh da istanziare.

L'aspetto delle singole istanze può essere modificato utilizzando set_instance_color() e set_instance_custom_data().


PhysicsInterpolationQuality physics_interpolation_quality = 0 🔗

Scegli se usare un metodo di interpolazione che favorisca la velocità o la qualità.

Quando usi frequenze basse per i tick di fisica (tipicamente inferiori a 20) o alte frequenze di rotazione degli oggetti, potresti ottenere risultati migliori con l'impostazione dell'alta qualità.

Nota: Una qualità veloce non equivale a una bassa qualità. Tranne nei casi speciali menzionati sopra, la qualità dovrebbe essere paragonabile a una qualità alta.


PackedVector2Array transform_2d_array 🔗

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

L'array contenente ciascun valore Transform2D utilizzato da tutte le istanze di questa mesh, sotto forma di PackedVector2Array. Ogni trasformazione è divisa in 3 valori Vector2 corrispondenti a x, y e origin delle trasformazioni.

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 🔗

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

L'array contenente ciascun valore Transform3D utilizzato da tutte le istanze di questa mesh, sotto forma di PackedVector3Array. Ogni trasformazione è divisa in 4 valori Vector3 corrispondenti a x, y, z e origin delle trasformazioni.

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 🔗

Il formato della trasformazione utilizzata per trasformare la mesh, 2D o 3D.


bool use_colors = false 🔗

  • void set_use_colors(value: bool)

  • bool is_using_colors()

Se true, il MultiMesh utilizzerà i dati dei colori (vedi set_instance_color()). Può essere impostato solo quando instance_count è 0 o inferiore. Ciò significa che è necessario chiamare questo metodo prima di impostare il conteggio delle istanze o reimpostarlo temporaneamente su 0.


bool use_custom_data = false 🔗

  • void set_use_custom_data(value: bool)

  • bool is_using_custom_data()

Se true, il MultiMesh utilizzerà i dati personalizzati (vedi set_instance_custom_data()). Può essere impostato solo quando instance_count è 0 o inferiore. Ciò significa che è necessario chiamare questo metodo prima di impostare il conteggio delle istanze o reimpostarlo temporaneamente su 0.


int visible_instance_count = -1 🔗

  • void set_visible_instance_count(value: int)

  • int get_visible_instance_count()

Limita il numero di istanze disegnate, -1 disegna tutte le istanze. Cambiando questo non si cambiano le dimensioni dei buffer.


Descrizioni dei metodi

AABB get_aabb() const 🔗

Restituisce la bounding box di visibilità allineato all'asse nello spazio locale.


Color get_instance_color(instance: int) const 🔗

Ottiene il moltiplicatore di colore di un'istanza specifica.


Color get_instance_custom_data(instance: int) const 🔗

Restituisce i dati personalizzati impostati per un'istanza specifica.


Transform3D get_instance_transform(instance: int) const 🔗

Restituisce il Transform3D di un'istanza specifica.


Transform2D get_instance_transform_2d(instance: int) const 🔗

Restituisce il Transform2D di un'istanza specifica.


void reset_instance_physics_interpolation(instance: int) 🔗

Quando si usa l'interpolazione della fisica, questa funzione consente di impedire l'interpolazione su un'istanza nel tick attuale di fisica.

Ciò consente di spostare le istanze istantaneamente e dovrebbe essere solitamente utilizzato quando si posiziona inizialmente un'istanza, come un proiettile, per impedire errori grafici.


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

Un'alternativa a impostare la proprietà buffer, che può essere utilizzata con l'interpolazione della fisica. Questo metodo prende due array e può impostare i dati per il tick attuale e quello precedente in una volta sola. Il renderer interpolerà automaticamente i dati a ogni frame.

Ciò è utile per le situazioni in cui l'ordine delle istanze può cambiare da tick a tick, come i sistemi di particelle.

Quando l'ordine delle istanze è coerente, è possibile comunque utilizzare l'alternativa più semplice di impostare buffer con l'interpolazione.


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

Imposta il colore di un'istanza specifica moltiplicando i colori dei vertici esistenti della mesh. Ciò consente diverse tinte di colore per istanza.

Nota: Ogni componente è memorizzato in 32 bit nei metodi di rendering Forward+ e Mobile, ma è compresso in 16 bit nel metodo di rendering Compatibilità.

Affinché il colore abbia effetto, assicurati che use_colors sia true sul MultiMesh e che BaseMaterial3D.vertex_color_use_as_albedo sia true sul materiale. Se intendi impostare un colore assoluto anziché una tinta, assicurati che il colore dell'albedo del materiale sia impostato su bianco puro (Color(1, 1, 1)).


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

Imposta i dati personalizzati per un'istanza specifica. custom_data è un tipo Color che contiene solo 4 numeri in virgola mobile.

Nota: Ogni componente è memorizzato in 32 bit nei metodi di rendering Forward+ e Mobile, ma è compresso in 16 bit nel metodo di rendering Compatibilità.

Per utilizzare i dati personalizzati, assicurati che use_custom_data sia true.

Questi dati di istanza personalizzati devono essere accessibili manualmente nel tuo shader personalizzato tramite INSTANCE_CUSTOM.


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

Imposta il Transform3D per un'istanza specifica.


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

Imposta il Transform2D per un'istanza specifica.