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.

ImporterMesh

Eredita: Resource < RefCounted < Object

Una Resource che contiene la geometria basata su array di vertici durante il processo di importazione.

Descrizione

ImporterMesh è un tipo di Resource analogo a ArrayMesh. Contiene una geometria basata su array di vertici, divisa in superfici. Ogni superficie contiene un array completamente separato e un materiale utilizzato per disegnarla. Per gli sviluppatori, una mesh con più superfici è preferita a una singola superficie, perché gli oggetti creati nei software di modifica 3D spesso contengono più materiali.

A differenza della sua controparte in fase di esecuzione, ImporterMesh contiene i dati della mesh prima che siano effettuati vari passaggi di importazione, come la generazione degli LOD e delle mesh per le ombre. Modifica i dati delle superfici chiamando clear(), seguito da add_surface() per ogni superficie.

Metodi

void

add_blend_shape(name: String)

void

add_surface(primitive: PrimitiveType, arrays: Array, blend_shapes: Array[Array] = [], lods: Dictionary = {}, material: Material = null, name: String = "", flags: int = 0)

void

clear()

ImporterMesh

from_mesh(mesh: Mesh) static

void

generate_lods(normal_merge_angle: float, normal_split_angle: float, bone_transform_array: Array)

int

get_blend_shape_count() const

BlendShapeMode

get_blend_shape_mode() const

String

get_blend_shape_name(blend_shape_idx: int) const

Vector2i

get_lightmap_size_hint() const

ArrayMesh

get_mesh(base_mesh: ArrayMesh = null)

Array

get_surface_arrays(surface_idx: int) const

Array

get_surface_blend_shape_arrays(surface_idx: int, blend_shape_idx: int) const

int

get_surface_count() const

int

get_surface_format(surface_idx: int) const

int

get_surface_lod_count(surface_idx: int) const

PackedInt32Array

get_surface_lod_indices(surface_idx: int, lod_idx: int) const

float

get_surface_lod_size(surface_idx: int, lod_idx: int) const

Material

get_surface_material(surface_idx: int) const

String

get_surface_name(surface_idx: int) const

PrimitiveType

get_surface_primitive_type(surface_idx: int)

ImporterMesh

merge_importer_meshes(importer_meshes: Array[ImporterMesh], relative_transforms: Array[Transform3D], deduplicate_surfaces: bool = true) static

void

set_blend_shape_mode(mode: BlendShapeMode)

void

set_lightmap_size_hint(size: Vector2i)

void

set_surface_material(surface_idx: int, material: Material)

void

set_surface_name(surface_idx: int, name: String)


Descrizioni dei metodi

void add_blend_shape(name: String) 🔗

Aggiunge un nome per una forma di fusione che sarà aggiunta con add_surface(). Deve essere chiamato prima di aggiungere la superficie.


void add_surface(primitive: PrimitiveType, arrays: Array, blend_shapes: Array[Array] = [], lods: Dictionary = {}, material: Material = null, name: String = "", flags: int = 0) 🔗

Crea una nuova superficie. Mesh.get_surface_count() diventerà il surf_idx per questa nuova superficie.

Le superfici sono renderizzate tramite un primitive, che può essere uno qualsiasi dei valori definiti in PrimitiveType.

L'argomento arrays è un array di array. Ciascuno degli elementi Mesh.ARRAY_MAX contiene un array con alcuni dei dati della mesh per questa superficie, come descritto dal membro corrispondente di ArrayType o null se non è utilizzato dalla superficie. Ad esempio, arrays[0] è l'array dei vertici. Il primo sottoarray di vertici è sempre obbligatorio; gli altri sono facoltativi. L'aggiunta di un array di indici mette questa superficie in "modalità indice", dove i vertici e gli altri array diventano le sorgenti di dati e l'array di indici definisce l'ordine dei vertici. Tutti i sottoarray devono avere la stessa lunghezza dell'array dei vertici (o essere un multiplo esatto della lunghezza dell'array dei vertici, quando più elementi di un sottoarray corrispondono a un singolo vertice) oppure essere vuoti, ad eccezione di Mesh.ARRAY_INDEX, se utilizzato.

L'argomento blend_shapes è un array di dati dei vertici per ogni forma di fusione. Ogni elemento è un array con la stessa struttura di arrays, ma Mesh.ARRAY_VERTEX, Mesh.ARRAY_NORMAL e Mesh.ARRAY_TANGENT sono impostati solo se sono impostati in arrays e tutte le altre voci sono null.

L'argomento lods è un dizionario con chiavi float e valori PackedInt32Array. Ogni voce nel dizionario rappresenta un livello LOD della superficie, dove il valore è l'array Mesh.ARRAY_INDEX da utilizzare per il livello LOD e la chiave è approssimativamente proporzionale alla distanza a cui vengono utilizzate le statistiche LOD. Ad esempio, aumentando la chiave di un LOD aumenta anche la distanza che gli oggetti devono avere dalla telecamera prima che il LOD venga utilizzato.

L'argomento flags è l'OR bit a bit di, a seconda delle esigenze: un valore di ArrayCustomFormat spostato a sinistra di ARRAY_FORMAT_CUSTOMn_SHIFT per ogni canale personalizzato in uso, Mesh.ARRAY_FLAG_USE_DYNAMIC_UPDATE, Mesh.ARRAY_FLAG_USE_8_BONE_WEIGHTS o Mesh.ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY.

Nota: Quando si utilizzano indici, si consiglia di usare solo punti, linee o triangoli.


void clear() 🔗

Rimuove tutte le superfici e le forme di fusione da questo ImporterMesh.


ImporterMesh from_mesh(mesh: Mesh) static 🔗

Converte la Mesh fornita in un ImporterMesh copiando tutte le sue superfici, le forme di fusione, i materiali e i metadati in un nuovo oggetto ImporterMesh.


void generate_lods(normal_merge_angle: float, normal_split_angle: float, bone_transform_array: Array) 🔗

Genera tutti i LOD per questo ImporterMesh.

normal_merge_angle è in gradi e utilizzato nello stesso modo delle impostazioni d'importazione in lods.

normal_split_angle non viene utilizzato e rimane solo per compatibilità con le versioni precedenti dell'API.

È possibile accedere al numero di lod generati tramite get_surface_lod_count() e ogni LOD è disponibile in get_surface_lod_size() e get_surface_lod_indices().

bone_transform_array è un Array che può essere vuoto o contenere Transform3D che, per ciascuno degli ID osso della mesh, applicherà lo skinning della mesh durante la generazione delle variazioni LOD della mesh. Questo viene solitamente utilizzato per tenere conto delle discrepanze di scala tra la mesh stessa e i suoi dati di skinning.


int get_blend_shape_count() const 🔗

Restituisce il numero di forme di fusione contenute nella mesh.


BlendShapeMode get_blend_shape_mode() const 🔗

Restituisce la modalità delle forme di fusione per questa Mesh.


String get_blend_shape_name(blend_shape_idx: int) const 🔗

Restituisce il nome della forma di fusione a questo indice.


Vector2i get_lightmap_size_hint() const 🔗

Restituisce il suggerimento delle dimensioni di questa mesh per l'unwrapping della lightmap nello spazio UV.


ArrayMesh get_mesh(base_mesh: ArrayMesh = null) 🔗

Restituisce i dati della mesh rappresentati da questo ImporterMesh come un ArrayMesh utilizzabile.

Questo metodo memorizza nella cache i dati restituiti della mesh, e le chiamate successive restituiranno i dati nella cache finché non viene chiamato clear().

Se i dati non sono ancora memorizzati nella cache e viene fornito base_mesh, base_mesh verrà utilizzato e modificato.


Array get_surface_arrays(surface_idx: int) const 🔗

Restituisce gli array per i vertici, normali, UV, ecc. che compongono la superficie richiesta. Vedi add_surface().


Array get_surface_blend_shape_arrays(surface_idx: int, blend_shape_idx: int) const 🔗

Restituisce una singola serie di array di forme di fusione per l'indice di forma di fusione richiesto per una superficie.


int get_surface_count() const 🔗

Restituisce il numero di superfici che la mesh mantiene.


int get_surface_format(surface_idx: int) const 🔗

Restituisce il formato della superficie che la mesh tiene.


int get_surface_lod_count(surface_idx: int) const 🔗

Restituisce il numero di LOD che la mesh contiene su una determinata superficie.


PackedInt32Array get_surface_lod_indices(surface_idx: int, lod_idx: int) const 🔗

Restituisce il buffer di indici di un LOD per una superficie.


float get_surface_lod_size(surface_idx: int, lod_idx: int) const 🔗

Restituisce il rapporto sullo schermo che attiva un LOD per una superficie.


Material get_surface_material(surface_idx: int) const 🔗

Restituisce un Material per una determinata superficie. La superficie è renderizzata utilizzando questo materiale.


String get_surface_name(surface_idx: int) const 🔗

Ottiene il nome assegnato a questa superficie.


PrimitiveType get_surface_primitive_type(surface_idx: int) 🔗

Restituisce il tipo di primitiva della superficie richiesta (vedi add_surface()).


ImporterMesh merge_importer_meshes(importer_meshes: Array[ImporterMesh], relative_transforms: Array[Transform3D], deduplicate_surfaces: bool = true) static 🔗

Unisce più ImporterMesh in un singolo ImporterMesh. Ogni mesh di input viene trasformata dalla corrispondente Transform3D presente nell'array relative_transforms, il quale deve avere le stesse dimensioni di importer_meshes. Sono supportate le scale negative, e l'ordine di avvolgimento nei dati della mesh verrà corretto per tenerne conto.

Se deduplicate_surfaces è true e più mesh contengono superfici con gli stessi nomi e formati, le superfici verranno unite durante l'unione delle mesh, e verrà utilizzato il materiale della prima superficie corrispondente. Ciò è utile per ridurre il numero di superfici nella mesh risultante ed evitare di duplicare i materiali. Le superfici con pesi d'ossa non saranno mai deduplicate. Se deduplicate_surfaces è false, le superfici saranno sempre mantenute separate e a ciascuna sarà assegnato un nome univoco.

Attenzione: Le forme di fusione e gli LOD non sono supportati e verranno scartati. Non utilizzare questa funzione per scartare forme di fusione e LOD, poiché il supporto per questi potrebbe essere aggiunto in futuro.


void set_blend_shape_mode(mode: BlendShapeMode) 🔗

Imposta la modalità delle forme di fusione.


void set_lightmap_size_hint(size: Vector2i) 🔗

Imposta il suggerimento sulla dimensione di questa mesh per l'unwrapping della lightmap nello spazio UV.


void set_surface_material(surface_idx: int, material: Material) 🔗

Imposta un Material per una determinata superficie. La superficie sarà renderizzata utilizzando questo materiale.


void set_surface_name(surface_idx: int, name: String) 🔗

Imposta un nome per una determinata superficie.