GLTFDocumentExtension

Наследует: Resource < RefCounted < Object

Наследуется от: GLTFDocumentExtensionConvertImporterMesh

Класс расширения GLTFDocument.

Описание

Расширяет функциональность класса GLTFDocument, позволяя вам запускать произвольный код на различных этапах импорта или экспорта glTF.

Для использования создайте новый класс, расширяющий GLTFDocumentExtension, переопределите все необходимые методы, создайте экземпляр вашего класса и зарегистрируйте его с помощью GLTFDocument.register_gltf_document_extension().

Примечание: Как и сам GLTFDocument, все классы GLTFDocumentExtension должны быть без состояния для правильной работы. Если вам нужно хранить данные, используйте методы set_additional_data и get_additional_data в GLTFState или GLTFNode.

Обучающие материалы

Методы

void

_convert_scene_node(state: GLTFState, gltf_node: GLTFNode, scene_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().


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, но исходный Node Godot также предоставляется, если он доступен. 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() и перед _import_post().

Этот метод можно использовать для внесения изменений в каждый из сгенерированных узлов сцены 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 and split[0] == "nodes" and split[2] == "extensions" and 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 🔗

Часть процесса импорта. Этот метод запускается после _import_post_parse() и перед _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 🔗

Часть процесса импорта. Этот метод запускается после _get_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 🔗

Часть процесса экспорта. Этот метод запускается после _save_image_at_path() или _serialize_image_to_bytes() и перед _export_node(). Обратите внимание, что этот метод запускается только тогда, когда этот GLTFDocumentExtension выбран в качестве экспортера изображений.

Этот метод можно использовать для настройки расширений для текстуры JSON путем редактирования texture_json. Расширение также должно быть добавлено как используемое расширение с GLTFState.add_used_extension(), обязательно установите required на true, если вы не предоставляете запасной вариант.