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.

GLTFDocumentExtension

Eredita: Resource < RefCounted < Object

Ereditato da: GLTFDocumentExtensionConvertImporterMesh

Classe di estensione GLTFDocument.

Descrizione

Extends the functionality of the GLTFDocument class by allowing you to run arbitrary code at various stages of glTF import or export.

To use, make a new class extending GLTFDocumentExtension, override any methods you need, make an instance of your class, and register it using GLTFDocument.register_gltf_document_extension().

Note: All GLTFDocumentExtension classes are duplicated when beginning the import or export process. Except for configuration values, these classes must be stateless in order to function properly. If you need to store data, use the set_additional_data and get_additional_data methods in GLTFState or GLTFNode.

Tutorial

Metodi

void

_convert_scene_node(state: GLTFState, gltf_node: GLTFNode, scene_node: Node) virtual

Array[Dictionary]

_export_get_property_list(root_node: Node) virtual

Error

_export_node(state: GLTFState, gltf_node: GLTFNode, json: Dictionary, node: Node) virtual

GLTFObjectModelProperty

_export_object_model_property(state: GLTFState, node_path: NodePath, godot_node: Node, gltf_node_index: int, target_object: Object, target_depth: int) virtual

Error

_export_post(state: GLTFState) virtual

Error

_export_post_convert(state: GLTFState, root: Node) virtual

Error

_export_preflight(state: GLTFState, root: Node) virtual

Error

_export_preserialize(state: GLTFState) virtual

Node3D

_generate_scene_node(state: GLTFState, gltf_node: GLTFNode, scene_parent: Node) virtual

String

_get_image_file_extension() virtual

PackedStringArray

_get_saveable_image_formats() virtual

PackedStringArray

_get_supported_extensions() virtual

Error

_import_node(state: GLTFState, gltf_node: GLTFNode, json: Dictionary, node: Node) virtual

GLTFObjectModelProperty

_import_object_model_property(state: GLTFState, split_json_pointer: PackedStringArray, partial_paths: Array[NodePath]) virtual

Error

_import_post(state: GLTFState, root: Node) virtual

Error

_import_post_parse(state: GLTFState) virtual

Error

_import_pre_generate(state: GLTFState) virtual

Error

_import_preflight(state: GLTFState, extensions: PackedStringArray) virtual

Error

_parse_image_data(state: GLTFState, image_data: PackedByteArray, mime_type: String, ret_image: Image) virtual

Error

_parse_node_extensions(state: GLTFState, gltf_node: GLTFNode, extensions: Dictionary) virtual

Error

_parse_texture_json(state: GLTFState, texture_json: Dictionary, ret_gltf_texture: GLTFTexture) virtual

Error

_save_image_at_path(state: GLTFState, image: Image, file_path: String, image_format: String, lossy_quality: float) virtual

PackedByteArray

_serialize_image_to_bytes(state: GLTFState, image: Image, image_dict: Dictionary, image_format: String, lossy_quality: float) virtual

Error

_serialize_texture_json(state: GLTFState, texture_json: Dictionary, gltf_texture: GLTFTexture, image_format: String) virtual


Descrizioni dei metodi

void _convert_scene_node(state: GLTFState, gltf_node: GLTFNode, scene_node: Node) virtual 🔗

Parte del processo di esportazione. Questo metodo viene eseguito dopo _export_preflight() e prima di _export_post_convert().

Viene eseguito quando si convertono i dati da un nodo di una scena di Godot. Questo metodo può essere utilizzato per elaborare i dati dei nodi in una scena di Godot in un formato che può essere utilizzato da _export_node().


Array[Dictionary] _export_get_property_list(root_node: Node) virtual 🔗

Runs prior to the export process. This method is run before _export_preflight() when exporting a scene from the editor, or it may not be run at all in other situations.

Unlike the rest of the export methods, this does not run when calling a GLTFDocument's export methods in sequence with everything else, but rather runs before that entire process occurs, allowing configuration to occur beforehand, potentially minutes or hours in advance of _export_preflight(). This allows extensions to decide which properties to show in the editor export settings dialog based on the contents of the scene, hiding any settings that are not relevant for that scene. The root_node parameter may be null, in which case all properties should be shown.


Error _export_node(state: GLTFState, gltf_node: GLTFNode, json: Dictionary, node: Node) virtual 🔗

Parte del processo di esportazione. Questo metodo viene eseguito dopo _get_saveable_image_formats() e prima di _export_post(). Se questo GLTFDocumentExtension viene utilizzato per esportare le immagini, viene eseguito dopo _serialize_texture_json().

Questo metodo può essere utilizzato per modificare il JSON finale di ogni nodo. I dati devono essere principalmente memorizzati in gltf_node prima di serializzare il JSON, ma viene anche fornito il nodo originale di Godot (node) se disponibile. Il nodo potrebbe essere null se non disponibile, ad esempio quando si esportano dati glTF non generati da una scena di Godot.


GLTFObjectModelProperty _export_object_model_property(state: GLTFState, node_path: NodePath, godot_node: Node, gltf_node_index: int, target_object: Object, target_depth: int) virtual 🔗

Parte del processo di esportazione. Consente alle classi GLTFDocumentExtension di fornire mappature per le proprietà dei nodi nell'albero di scene di Godot, ai puntatori JSON alle proprietà glTF, come definito dal modello d'oggetto glTF.

Restituisce un'istanza GLTFObjectModelProperty che definisce come la proprietà deve essere mappata. Se l'estensione non riesce a gestire la proprietà, restituire null o un'istanza senza puntatori JSON (vedi GLTFObjectModelProperty.has_json_pointers()). Dovresti usare GLTFObjectModelProperty.set_types() per impostare i tipi, e impostare i puntatori JSON tramite la proprietà GLTFObjectModelProperty.json_pointers.

I parametri forniscono un contesto per la proprietà, inclusi il NodePath, il nodo Godot, l'indice del nodo GLTF e l'oggetto di destinazione. target_object sarà uguale a godot_node se non è possibile trovare alcun sotto-oggetto, altrimenti punterà a un sotto-oggetto. Ad esempio, se il percorso è ^"A/B/C/MeshInstance3D:mesh:surface_0/material:emission_intensity", otterrà il nodo, po la mesh e po il materiale, poi target_object sarà la risorsa Material e target_depth sarà 2 perché sono stati attraversati 2 livelli per arrivare alla destinazione.


Error _export_post(state: GLTFState) virtual 🔗

Parte del processo di esportazione. Questo metodo viene eseguito per ultimo, dopo tutte le altre parti del processo di esportazione.

Questo metodo può essere utilizzato per modificare il JSON finale del file glTF generato.


Error _export_post_convert(state: GLTFState, root: Node) virtual 🔗

Parte del processo di esportazione. Questo metodo viene eseguito dopo _convert_scene_node() e prima di _export_preserialize().

Questo metodo può essere utilizzato per apportare modifiche alle strutture dati del nodo convertito prima della serializzazione, con eventuali dati aggiuntivi dall'albero di scene.


Error _export_preflight(state: GLTFState, root: Node) virtual 🔗

Parte del processo di esportazione. Questo metodo viene eseguito per primo, prima di tutte le altre parti del processo di esportazione.

Il valore restituito serve per determinare se questa istanza di GLTFDocumentExtension deve essere utilizzata per esportare un determinato file glTF. Se @GlobalScope.OK, l'esportazione utilizzerà questa istanza di GLTFDocumentExtension. Se non sovrascritto, viene restituito @GlobalScope.OK.


Error _export_preserialize(state: GLTFState) virtual 🔗

Parte del processo di esportazione. Questo metodo viene eseguito dopo _export_post_convert() e prima di _get_saveable_image_formats().

Questo metodo può essere utilizzato per alterare lo stato prima di eseguire la serializzazione. È eseguito ogni volta che si genera un buffer con GLTFDocument.generate_buffer() o si scrive sul file system con GLTFDocument.write_to_filesystem().


Node3D _generate_scene_node(state: GLTFState, gltf_node: GLTFNode, scene_parent: Node) virtual 🔗

Parte del processo di importazione. Questo metodo viene eseguito dopo _import_pre_generate() e prima di _import_node().

È eseguito quando si genera un nodo di scena di Godot da un GLTFNode. Il nodo restituito sarà aggiunto all'albero di scene. In questo passaggio è possibile generare più nodi se vengono aggiunti come figli del nodo restituito.

Nota: Il parametro scene_parent potrebbe essere null se questo è il singolo nodo radice.


String _get_image_file_extension() virtual 🔗

Restituisce l'estensione di file da usare per salvare i dati dell'immagine, ad esempio, ".png". Se definita, quando questa estensione è usata per gestire le immagini e le immagini sono salvate in un file separato, i byte saranno copiati in un file con questa estensione. Se tutto ciò è impostato, dovrebbe esserci una classe ResourceImporter in grado di importare il file. Se non definita o vuota, Godot salverà l'immagine in un file PNG.


PackedStringArray _get_saveable_image_formats() virtual 🔗

Parte del processo di esportazione. Questo metodo viene eseguito dopo _convert_scene_node() e prima di _export_node().

Restituisce un array dei formati immagine che possono essere salvati o esportati da questa estensione. Questa estensione sarà selezionata come esportatore di immagini solo se il GLTFDocument.image_format di GLTFDocument è presente in questo array. Se questa GLTFDocumentExtension è selezionata come esportatore di immagini, uno dei metodi _save_image_at_path() o _serialize_image_to_bytes() sarà eseguito in seguito, altrimenti sarà eseguito _export_node(). Se il nome del formato contiene "Lossy", sarà visualizzato il cursore della qualità lossy.


PackedStringArray _get_supported_extensions() virtual 🔗

Parte del processo di importazione. Questo metodo viene eseguito dopo _import_preflight() e prima di _parse_node_extensions().

Restituisce un array delle estensioni glTF supportate da questa classe GLTFDocumentExtension. Serve per verificare se è possibile caricare un file glTF con le estensioni richieste.


Error _import_node(state: GLTFState, gltf_node: GLTFNode, json: Dictionary, node: Node) virtual 🔗

Parte del processo di importazione. Questo metodo viene eseguito dopo _generate_scene_node() e prima di _import_post().

Questo metodo può essere utilizzato per apportare modifiche a ciascuno dei nodi di scena Godot generati.


GLTFObjectModelProperty _import_object_model_property(state: GLTFState, split_json_pointer: PackedStringArray, partial_paths: Array[NodePath]) virtual 🔗

Parte del processo di importazione. Consente alle classi GLTFDocumentExtension di fornire mappature per i puntatori JSON alle proprietà glTF, come definito dal modello d'oggetto glTF, alle proprietà dei nodi nell'albero di scene di Godot.

Restituisce un'istanza GLTFObjectModelProperty che definisce come la proprietà deve essere mappata. Se l'estensione non riesce a gestire la proprietà, restituisci null o un'istanza senza NodePath (vedi GLTFObjectModelProperty.has_node_paths()). Dovresti usare GLTFObjectModelProperty.set_types() per impostare i tipi. La funzione GLTFObjectModelProperty.append_path_to_property() è per lo più utile nei casi semplici.

In molti casi, partial_paths conterrà l'inizio di un percorso, consentendo all'estensione di completarlo. Ad esempio, per /nodes/3/extensions/MY_ext/prop, Godot ti passerà un NodePath che porta al nodo 3, quindi la classe GLTFDocumentExtension deve risolvere solo l'ultima parte MY_ext/prop del percorso. In questo esempio, l'estensione dovrebbe verufucare split.size() > 4 e split[0] == "nodes" e split[2] == "extensions" e split[3] == "MY_ext" all'inizio della funzione per verificare se questo puntatore JSON si applica ad essa, successivamente può usare partial_paths e gestire split[4].


Error _import_post(state: GLTFState, root: Node) virtual 🔗

Parte del processo di importazione. Questo metodo viene eseguito per ultimo, dopo tutte le altre parti del processo di importazione.

Questo metodo può essere utilizzato per modificare la scena finale di Godot generata dal processo di importazione.


Error _import_post_parse(state: GLTFState) virtual 🔗

Parte del processo di importazione. Questo metodo viene eseguito dopo _parse_node_extensions() e prima di _import_pre_generate().

Questo metodo può essere utilizzato per modificare uno qualsiasi dei dati importati finora dopo aver analizzato ogni nodo, ma prima di generare la scena o uno qualsiasi dei suoi nodi.


Error _import_pre_generate(state: GLTFState) virtual 🔗

Parte del processo di importazione. Questo metodo viene eseguito dopo _import_post_parse() e prima di _generate_scene_node().

Questo metodo può essere utilizzato per modificare o leggere da una qualsiasi delle strutture dati elaborate, prima di generare i nodi e successivamente eseguire il passaggio finale di importazione per ogni nodo.


Error _import_preflight(state: GLTFState, extensions: PackedStringArray) virtual 🔗

Parte del processo di importazione. Questo metodo viene eseguito per primo, prima di tutte le altre parti del processo di importazione.

Il valore restituito serve per determinare se questa istanza di GLTFDocumentExtension deve essere utilizzata per importare un determinato file glTF. Se è @GlobalScope.OK, l'importazione utilizzerà questa istanza di GLTFDocumentExtension. Se non sovrascritto, viene restituito @GlobalScope.OK.


Error _parse_image_data(state: GLTFState, image_data: PackedByteArray, mime_type: String, ret_image: Image) virtual 🔗

Parte del processo di importazione. Questo metodo viene eseguito dopo _parse_node_extensions() e prima di _parse_texture_json().

È eseguito durante l'elaborazione dei dati immagine da un file glTF. I dati potrebbero provenire da un file separato, un URI o un buffer, e sono passati come array di byte.


Error _parse_node_extensions(state: GLTFState, gltf_node: GLTFNode, extensions: Dictionary) virtual 🔗

Parte del processo di importazione. Questo metodo viene eseguito dopo _get_supported_extensions() e prima di _import_post_parse().

È eseguito durante l'elaborazione delle estensioni di nodo di un GLTFNode. Questo metodo può essere utilizzato per elaborare i dati JSON dell'estensione in un formato che può essere utilizzato da _generate_scene_node(). Il valore restituito deve essere un membro dell'enumerazione Error.


Error _parse_texture_json(state: GLTFState, texture_json: Dictionary, ret_gltf_texture: GLTFTexture) virtual 🔗

Parte del processo di importazione. Questo metodo viene eseguito dopo _parse_image_data() e prima di _generate_scene_node().

Viene eseguito durante l'analisi del JSON della texture dall'array di texture glTF. Può essere utilizzato per impostare l'indice dell'immagine sorgente da utilizzare come texture.


Error _save_image_at_path(state: GLTFState, image: Image, file_path: String, image_format: String, lossy_quality: float) virtual 🔗

Parte del processo di esportazione. Questo metodo viene eseguito dopo _get_saveable_image_formats() e prima di _serialize_texture_json().

Questo metodo viene eseguito quando si salvano le immagini separatamente dal file glTF. Quando le immagini sono incorporate, viene invece eseguito _serialize_image_to_bytes(). Nota che questi metodi vengono eseguiti solo quando questo GLTFDocumentExtension è selezionato come esportatore di immagini.


PackedByteArray _serialize_image_to_bytes(state: GLTFState, image: Image, image_dict: Dictionary, image_format: String, lossy_quality: float) virtual 🔗

Parte del processo di esportazione. Questo metodo viene eseguito dopo _get_saveable_image_formats() e prima di _serialize_texture_json().

Questo metodo viene eseguito quando si incorporano immagini nel file glTF. Quando si salvano le immagini separatamente, viene invece eseguito _save_image_at_path(). Nota che questi metodi vengono eseguiti solo quando questo GLTFDocumentExtension è selezionato come esportatore di immagini.

Questo metodo deve impostare il tipo MIME dell'immagine nel image_dict con la chiave "mimeType". Ad esempio, per un'immagine PNG, verrebbe impostato su "image/png". Il valore restituito deve essere un PackedByteArray contenente i dati dell'immagine.


Error _serialize_texture_json(state: GLTFState, texture_json: Dictionary, gltf_texture: GLTFTexture, image_format: String) virtual 🔗

Parte del processo di esportazione. Questo metodo viene eseguito dopo _save_image_at_path() o _serialize_image_to_bytes() e prima di _export_node(). Nota che questo metodo viene eseguito solo quando questo GLTFDocumentExtension è selezionato come esportatore di immagini.

Questo metodo può essere utilizzato per configurare le estensioni per la texture JSON modificando texture_json. L'estensione deve anche essere aggiunta come estensione utilizzata con GLTFState.add_used_extension(), assicurati di impostare required su true se non stai fornendo un'alternativa di riserva.