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
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à
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Metodi
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) |
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() 🔗
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 🔗
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) 🔗
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.
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.
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 🔗
void set_physics_interpolation_quality(value: PhysicsInterpolationQuality)
PhysicsInterpolationQuality get_physics_interpolation_quality()
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 🔗
void set_transform_format(value: TransformFormat)
TransformFormat get_transform_format()
Il formato della trasformazione utilizzata per trasformare la mesh, 2D o 3D.
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 🔗
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 🔗
Limita il numero di istanze disegnate, -1 disegna tutte le istanze. Cambiando questo non si cambiano le dimensioni dei buffer.
Descrizioni dei metodi
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.