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...
OccluderInstance3D
Eredita: VisualInstance3D < Node3D < Node < Object
Fornisce l'occlusion culling per i nodi 3D, migliorando le prestazioni in aree chiuse.
Descrizione
L'occlusion culling può migliorare le prestazioni di rendering in aree chiuse/semi-aperte nascondendo la geometria oscurata da altri oggetti.
Il sistema di occlusion culling è essenzialmente statico. Gli OccluderInstance3D possono essere spostati o nascosti durante l'esecuzione, ma ciò attiverà un ricalcolo interno che può richiedere diversi frame. Si consiglia di spostare gli OccluderInstance3D solo sporadicamente (ad esempio, per scopi di generazione procedurale), piuttosto che farlo a ogni frame.
Il sistema di occlusion culling funziona renderizzando gli occluder sulla CPU in parallelo tramite Embree, disegnando il risultato in un buffer a bassa risoluzione e poi utilizzandolo per scartare i nodi 3D individualmente. Nell'editor 3D, è possibile vedere in anteprima il buffer di occlusion culling scegliendo Prospettiva > Mostra avanzate... > Buffer di occlusion culling nell'angolo in alto a sinistra della viewport 3D. La qualità del buffer si può regolare nelle Impostazioni del progetto.
Precalcolo: Selezionare un nodo OccluderInstance3D, quindi premere il pulsante Precalcola occlusori in alto all'editor 3D. Saranno considerati solo i materiali opachi; i materiali trasparenti (con alpha blend o alpha test) saranno ignorati dall'occlusion culling.
Nota: L'occlusion culling è efficace solo se ProjectSettings.rendering/occlusion_culling/use_occlusion_culling è impostato su true. Abilitare l'occlusion culling ha un impatto sulla CPU. Abilitarlo solo se si prevede effettivamente di utilizzarlo. Le scene ampie e aperte, con pochi o nessun oggetto che blocca la vista, generalmente non usufruiranno molto dall'occlusion culling. Le scene ampie e aperte generalmente usufruiscono di più dai LOD di mesh e dai campi di visibilità (GeometryInstance3D.visibility_range_begin e GeometryInstance3D.visibility_range_end) rispetto all'occlusione culling.
Nota: A causa di limiti di memoria, l'occlusion culling non è supportato normalmente nei modelli di esportazione web. È possibile abilitarlo compilando modelli personalizzati di esportazione web con module_raycast_enabled=yes.
Tutorial
Proprietà
|
||
|
||
Metodi
get_bake_mask_value(layer_number: int) const |
|
void |
set_bake_mask_value(layer_number: int, value: bool) |
Descrizioni delle proprietà
Gli strati visivi da considerare durante la preparazione per gli occlusori. Solo i MeshInstance3D i cui VisualInstance3D.layers corrispondono a questa bake_mask saranno inclusi nella mesh occlusore generata. Per impostazione predefinita, tutti gli oggetti con materiali opachi sono considerati per la preparazione degli occlusori.
Per migliorare le prestazioni ed evitare artefatti, si consiglia di escludere gli oggetti dinamici o piccoli dal processo di preparazione spostandoli su uno strato visivo separato ed escludendo tale strato nella bake_mask.
float bake_simplification_distance = 0.1 🔗
La distanza di semplificazione da utilizzare per semplificare il poligono occlusore generato (in unità 3D). Valori più elevati generano una mesh occlusore meno dettagliata, il che migliora le prestazioni ma riduce la precisione del culling.
La geometria dell'occlusore viene renderizzata dalla CPU, quindi è importante mantenerla il più semplice possibile. Poiché il buffer viene renderizzato a bassa risoluzione, le mesh occlusore meno dettagliate generalmente funzionano comunque bene. Il valore predefinito è piuttosto aggressivo, quindi potrebbe essere necessario diminuirlo in caso di falsi negativi (oggetti occlusi anche se visibili dalla telecamera). Un valore di 0.01 agirà in modo conservativo e manterrà la geometria percettivamente inalterata nel buffer dell'occlusion culling. A seconda della scena, un valore di 0.01 potrebbe comunque semplificare notevolmente la mesh rispetto a disattivare completamente la semplificazione.
Impostando questo valore su 0.0 la semplificazione viene completamente disabilitata, ma i vertici nella stessa posizione verranno comunque uniti. La mesh verrà inoltre reindicizzata per ridurre sia il numero di vertici sia di indici.
Nota: Questo metodo utilizza la libreria meshoptimizer, in modo simile alla generazione del LOD.
Occluder3D occluder 🔗
void set_occluder(value: Occluder3D)
Occluder3D get_occluder()
La risorsa occlusore per questo OccluderInstance3D. È possibile generare una risorsa occlusore selezionando un nodo OccluderInstance3D e quindi premendo il pulsante Precalcola occlusori nella parte superiore dell'editor.
È anche possibile disegnare il proprio poligono occlusore 2D aggiungendo una nuova risorsa PolygonOccluder3D alla proprietà occluder nell'Ispettore.
In alternativa, è possibile selezionare un occlusore primitivo da usare: QuadOccluder3D, BoxOccluder3D o SphereOccluder3D.
Descrizioni dei metodi
bool get_bake_mask_value(layer_number: int) const 🔗
Restituisce se lo strato specificato di bake_mask è abilitato o meno, dato un layer_number compreso tra 1 e 32.
void set_bake_mask_value(layer_number: int, value: bool) 🔗
In base a value, abilita o disabilita lo strato specificato in bake_mask, dato un layer_number compreso tra 1 e 32.