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

Успадковує: Resource < RefCounted < Object

Успадковано від: GLTFDocumentExtensionConvertImporterMesh

GLTFDocument класу розширення.

Опис

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.

Посібники

Методи

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


Описи методів

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

Частина процесу експорту. Цей метод запускається після _export_preflight() і перед _export_post_convert().

Запускається під час перетворення даних із вузла сцени Godot. Цей метод можна використовувати для обробки даних вузла сцени Godot у формат, який може використовуватися _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 🔗

Частина процесу експорту. Цей метод запускається після _get_saveable_image_formats() і перед _export_post(). Якщо цей GLTFDocumentExtension використовується для експорту зображень, він запускається після _serialize_texture_json().

Цей метод можна використовувати для зміни остаточного JSON кожного вузла. Дані мають зберігатися в gltf_node перед серіалізацією JSON, але оригінальний Godot Node також надається, якщо доступний. node може мати значення null, якщо він недоступний, наприклад, під час експорту даних glTF, не згенерованих зі сцени 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 🔗

Частина процесу експорту. Дозволяє класам GLTFDocumentExtension забезпечувати зіставлення властивостей вузлів у дереві сцени Godot з покажчиками JSON на властивості glTF, як визначено об’єктною моделлю glTF.

Повертає екземпляр GLTFObjectModelProperty, який визначає, як має бути відображено властивість. Якщо ваше розширення не може обробити властивість, поверніть null або екземпляр без жодних покажчиків JSON (див. GLTFObjectModelProperty.has_json_pointers()). Вам слід використовувати GLTFObjectModelProperty.set_types(), щоб установити типи та встановити покажчик(и) JSON за допомогою властивості GLTFObjectModelProperty.json_pointers.

Параметри надають контекст для властивості, включаючи NodePath, вузол Godot, індекс вузла GLTF і цільовий об’єкт. target_object дорівнюватиме godot_node, якщо субоб’єкт не знайдено, інакше він вказуватиме на субоб’єкт. Наприклад, якщо шлях ^"A/B/C/MeshInstance3D:mesh:surface_0/material:emission_intensity", він отримає вузол, потім сітку, а потім матеріал, тому target_object буде ресурсом Material, а target_depth матиме 2, оскільки для досягнення цілі було пройдено 2 рівні.


Error _export_post(state: GLTFState) virtual 🔗

Частина процесу експорту. Цей метод запускається останнім, після всіх інших частин процесу експорту.

Цей метод можна використовувати для зміни остаточного JSON створеного файлу glTF.


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

Частина процесу експорту. Цей метод запускається після _convert_scene_node() і перед _export_preserialize().

Цей метод можна використовувати для зміни перетворених структур даних вузла перед серіалізацією з будь-якими додатковими даними з дерева сцени.


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

Частина процесу експорту. Цей метод запускається першим, перед усіма іншими частинами процесу експорту.

Повернене значення використовується для визначення того, чи слід використовувати цей екземпляр GLTFDocumentExtension для експорту заданого файлу glTF. Якщо @GlobalScope.OK, експорт використовуватиме цей екземпляр GLTFDocumentExtension. Якщо не перевизначено, повертається @GlobalScope.OK.


Error _export_preserialize(state: GLTFState) virtual 🔗

Частина процесу експорту. Цей метод запускається після _export_post_convert() і перед _get_saveable_image_formats().

Цей метод можна використовувати для зміни стану перед виконанням серіалізації. Він запускається кожного разу, коли створюється буфер за допомогою GLTFDocument.generate_buffer() або записується у файлову систему за допомогою GLTFDocument.write_to_filesystem().


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

Частина процесу імпорту. Цей метод запускається після _import_pre_generate() і перед _import_node().

Запускається під час генерації вузла сцени Godot з GLTFNode. Повернений вузол буде додано до дерева сцени. На цьому кроці можна створити кілька вузлів, якщо їх додати як дочірні вузли повернутого вузла.

**Примітка: ** Параметр scene_parent може мати значення null, якщо це єдиний кореневий вузол.


String _get_image_file_extension() virtual 🔗

Повертає розширення файлу для збереження даних зображення, наприклад, ".png". Якщо визначено, коли це розширення використовується для обробки зображень і зображення зберігаються в окремому файлі, байти зображення буде скопійовано до файлу з цим розширенням. Якщо це встановлено, має бути клас ResourceImporter, здатний імпортувати файл. Якщо не визначено або пусте, Godot збереже зображення у файл PNG.


PackedStringArray _get_saveable_image_formats() virtual 🔗

Частина процесу експорту. Цей метод запускається після _convert_scene_node() і перед _export_node().

Повертає масив форматів зображень, які можна зберегти/експортувати цим розширенням. Це розширення буде вибрано як засіб експорту зображень, лише якщо GLTFDocument.image_format GLTFDocument міститься в цьому масиві. Якщо цей GLTFDocumentExtension вибрано як засіб експорту зображень, один із методів _save_image_at_path() або _serialize_image_to_bytes() буде запущено наступним, інакше _export_node() буде запущено наступним. Якщо назва формату містить "Lossy", відображатиметься повзунок якості з втратами.


PackedStringArray _get_supported_extensions() virtual 🔗

Частина процесу імпорту. Цей метод запускається після _import_preflight() і перед _parse_node_extensions().

Повертає масив розширень glTF, які підтримуються цим класом GLTFDocumentExtension. Це використовується для перевірки того, чи можна завантажити файл glTF із потрібними розширеннями.


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

Частина імпортного процесу. Цей метод працює після _generate_scene_node() і перед _імпорт_пост().

Цей метод може бути використаний для внесення змін до кожного з створених вузлів сцени Godot.


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

Частина процесу імпорту. Дозволяє класам GLTFDocumentExtension забезпечувати зіставлення покажчиків JSON на властивості glTF, як визначено об’єктною моделлю glTF, на властивості вузлів у дереві сцени Godot.

Повертає екземпляр GLTFObjectModelProperty, який визначає, як має бути відображено властивість. Якщо ваше розширення не може обробити властивість, поверніть null або екземпляр без будь-яких NodePaths (див. GLTFObjectModelProperty.has_node_paths()). Для встановлення типів слід використовувати GLTFObjectModelProperty.set_types(), а функція GLTFObjectModelProperty.append_path_to_property() корисна для більшості простих випадків.

У багатьох випадках partial_paths міститиме початок шляху, дозволяючи розширенню завершити шлях. Наприклад, для /nodes/3/extensions/MY_ext/prop Godot передасть вам NodePath, який веде до вузла 3, тому клас GLTFDocumentExtension має розпізнати лише останню частину шляху MY_ext/prop. У цьому прикладі розширення має перевірити split.size() > 4 і split[0] == "nodes" і split[2] == "extensions" і split[3] == "MY_ext" на початку функції, щоб перевірити, чи цей покажчик JSON застосовується до нього, тоді воно може використовувати partial_paths і обробляти split[4].


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

Частина імпортного процесу. Цей метод працює останнім, після всіх інших частин процесу імпорту.

Цей метод може бути використаний для зміни кінцевої сцени Godot, створеної процесом імпорту.


Error _import_post_parse(state: GLTFState) virtual 🔗

Частина процесу імпорту. Цей метод запускається після _parse_node_extensions() і перед _import_pre_generate().

Цей метод можна використовувати для зміни будь-яких даних, імпортованих на даний момент після аналізу кожного вузла, але перед генерацією сцени або будь-якого з її вузлів.


Error _import_pre_generate(state: GLTFState) virtual 🔗

Частина імпортного процесу. Цей метод працює після _parse_node_extensions() і перед _generate_scene_node().

Цей метод може бути використаний для зміни будь-яких даних, що імпортуються так далеко після парсингу, перед створенням вузлів, а потім запуску кінцевого / без імпортного кроку.


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

Частина процесу імпорту. Цей метод запускається першим, перед усіма іншими частинами процесу імпорту.

Повернене значення використовується для визначення того, чи слід використовувати цей екземпляр GLTFDocumentExtension для імпорту даного файлу glTF. Якщо @GlobalScope.OK, імпорт використовуватиме цей екземпляр GLTFDocumentExtension. Якщо не перевизначено, повертається @GlobalScope.OK.


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

Частина процесу імпорту. Цей метод запускається після _parse_node_extensions() і перед _parse_texture_json().

Запускається під час аналізу даних зображення з файлу glTF. Дані можуть бути отримані з окремого файлу, URI або буфера, а потім передаються як масив байтів.


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

Частина імпортного процесу. Цей метод працює після _supported_extensions() і перед _import_post_parse().

Запускає при парсуванні розширення вузлів GLTFNode. Цей метод можна використовувати для обробки розширення даних JSON у форматі, який можна використовувати за допомогою метод_generate_scene_node. Вартість повернення повинна бути членом Error.


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

Частина процесу імпорту. Цей метод запускається після _parse_image_data() і перед _generate_scene_node().

Запускається під час аналізу JSON текстури з масиву текстур glTF. Це можна використовувати для встановлення індексу вихідного зображення для використання як текстури.


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

Частина процесу експорту. Цей метод запускається після _get_saveable_image_formats() і перед _serialize_texture_json().

Цей метод запускається під час збереження зображень окремо від файлу glTF. Коли зображення вбудовані, замість них виконується _serialize_image_to_bytes(). Зауважте, що ці методи запускаються лише тоді, коли GLTFDocumentExtension вибрано як експортер зображень.


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

Частина процесу експорту. Цей метод запускається після _get_saveable_image_formats() і перед _serialize_texture_json().

Цей метод запускається під час вбудовування зображень у файл glTF. Коли зображення зберігаються окремо, замість них виконується _save_image_at_path(). Зауважте, що ці методи запускаються лише тоді, коли GLTFDocumentExtension вибрано як експортер зображень.

Цей метод має встановити тип MIME зображення в image_dict за допомогою ключа "mimeType". Наприклад, для зображення PNG буде встановлено значення "image/png". Поверненим значенням має бути PackedByteArray, що містить дані зображення.


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

Частина експортного процесу. Цей метод працює після _image_at_path() або _serialize_image_to_bytes(), а перед _export_node(). Зверніть увагу, що цей метод тільки працює, коли це GLTFDocumentExtension вибрано як експортер зображень.

Цей метод можна використовувати для налаштування розширень для текстури JSON шляхом редагування texture_json. Розширення також повинна бути додана, як використовується розширення з GLTFState.add_used_extension(), обов'язково, щоб встановити 0 до true, якщо ви не надаєте зворотному зв'язку.