GLTFState

继承: Resource < RefCounted < Object

派生: FBXState

代表 glTF 文件中的所有数据。

描述

该资源包含glTF文件的所有节点和资源数据,作为 GLTFDocument 的无状态数据存储容器,使 GLTFDocument 及所有 GLTFDocumentExtension 扩展类都能保持无状态特性。

GLTFState可通过以下方式填充数据:

GLTFDocument 读取glTF文件 通过转换i3D场景生成

填充后的数据可用于:

创建i3D场景 保存为glTF文件

GLTFDocumentExtension 扩展类可在任意转换节点拦截处理流程,实现:

在glTF文件中存储自定义数据 自定义数据与i3D节点的双向转换

属性

方法

void

add_used_extension(extension_name: String, required: bool)

int

append_data_to_buffers(data: PackedByteArray, deduplication: bool)

int

append_gltf_node(gltf_node: GLTFNode, i3d_scene_node: Item, parent_node_index: int)

Array[GLTFAccessor]

get_accessors()

Variant

get_additional_data(extension_name: StringName)

AnimationPlayer

get_animation_player(idx: int)

int

get_animation_players_count(idx: int)

Array[GLTFAnimation]

get_animations()

Array[GLTFBufferView]

get_buffer_views()

Array[GLTFCamera]

get_cameras()

int

get_handle_binary_image()

Array[Texture2D]

get_images()

Array[GLTFLight]

get_lights()

Array[Material]

get_materials()

Array[GLTFMesh]

get_meshes()

int

get_node_index(scene_node: Item)

Array[GLTFNode]

get_nodes()

Item

get_scene_node(idx: int)

Array[GLTFSkeleton]

get_skeletons()

Array[GLTFSkin]

get_skins()

Array[GLTFTextureSampler]

get_texture_samplers()

Array[GLTFTexture]

get_textures()

Array[String]

get_unique_animation_names()

Array[String]

get_unique_names()

void

set_accessors(accessors: Array[GLTFAccessor])

void

set_additional_data(extension_name: StringName, additional_data: Variant)

void

set_animations(animations: Array[GLTFAnimation])

void

set_buffer_views(buffer_views: Array[GLTFBufferView])

void

set_cameras(cameras: Array[GLTFCamera])

void

set_handle_binary_image(method: int)

void

set_images(images: Array[Texture2D])

void

set_lights(lights: Array[GLTFLight])

void

set_materials(materials: Array[Material])

void

set_meshes(meshes: Array[GLTFMesh])

void

set_nodes(nodes: Array[GLTFNode])

void

set_skeletons(skeletons: Array[GLTFSkeleton])

void

set_skins(skins: Array[GLTFSkin])

void

set_texture_samplers(texture_samplers: Array[GLTFTextureSampler])

void

set_textures(textures: Array[GLTFTexture])

void

set_unique_animation_names(unique_animation_names: Array[String])

void

set_unique_names(unique_names: Array[String])


常量

HANDLE_BINARY_DISCARD_TEXTURES = 0 🔗

丢弃所有内嵌的纹理,并使用无纹理的材质。

HANDLE_BINARY_EXTRACT_TEXTURES = 1 🔗

提取内嵌的纹理以重新导入和压缩。仅限编辑器。在运行时充当未压缩的。

HANDLE_BINARY_EMBED_AS_BASISU = 2 🔗

将使用 Basis Universal 压缩的纹理 VRAM 嵌入到生成的场景中。

HANDLE_BINARY_EMBED_AS_UNCOMPRESSED = 3 🔗

将无损压缩的纹理嵌入到生成的场景中,匹配旧行为。


属性说明

float bake_fps = 30.0 🔗

  • void set_bake_fps(value: float)

  • float get_bake_fps()

用于导入或导出的动画的烘焙 fps。


String base_path = "" 🔗

与该 glTF 数据关联的文件夹路径。这用于查找该 glTF 文件引用的其他文件,例如图像或二进制缓冲区。这将在导入期间从文件追加时设置,并将在导出期间写入文件时设置。


Array[PackedByteArray] buffers = [] 🔗


该 glTF 文件的资产标头中的版权字符串。如果存在,则在导入期间设置;如果非空则在导出期间设置。详见 glTF 资产标头文档。


bool create_animations = true 🔗

  • void set_create_animations(value: bool)

  • bool get_create_animations()


String filename = "" 🔗

与该 glTF 数据关联的文件名。如果它以 .gltf 结尾,则这是基于文本的 glTF,否则这是二进制 GLB。这将在导入期间从文件追加时设置,并将在导出期间写入文件时设置。如果写入到缓冲区,这将是一个空字符串。


PackedByteArray glb_data = PackedByteArray() 🔗

附加到 .glb 文件的二进制缓冲区。

注意:返回的数组为 副本 ,对其进行的任何修改都不会影响原始属性值。详见 PackedByteArray


bool import_as_skeleton_bones = false 🔗

  • void set_import_as_skeleton_bones(value: bool)

  • bool get_import_as_skeleton_bones()

如果为 true,则强制文档中的所有 GLTFNode 成为单个 SkeletonMesh i3D 节点的骨骼。


Dictionary json = {} 🔗

与该 GLTFState 对应的原始 JSON 文档。


int major_version = 0 🔗

  • void set_major_version(value: int)

  • int get_major_version()


int minor_version = 0 🔗

  • void set_minor_version(value: int)

  • int get_minor_version()


PackedInt32Array root_nodes = PackedInt32Array() 🔗

glTF 文件的根节点。通常一个 glTF 文件只有一个场景,因此只有一个根节点。然而 glTF 文件可能有多个场景,因此可以有多个根节点,它们将作为彼此的同级节点生成,并作为生成的 i3D 场景的根节点的子节点生成。

注意:返回的数组为 副本 ,对其进行的任何修改都不会影响原始属性值。详见 PackedInt32Array


String scene_name = "" 🔗

  • void set_scene_name(value: String)

  • String get_scene_name()

场景的名称。导入时,如果没有指定,这将是文件名。导出时,如果指定,场景名称将被保存到 glTF 文件中。


bool use_named_skin_binds = false 🔗

  • void set_use_named_skin_binds(value: bool)

  • bool get_use_named_skin_binds()


方法说明

void add_used_extension(extension_name: String, required: bool) 🔗

在序列化期间,将一个扩展名追加到该 glTF 文件使用的扩展名列表在。如果 requiredtrue,则该扩展名也将被添加到所需扩展名列表中。不要在 GLTFDocumentExtension._export_post() 中运行它,因为那个阶段已来不及添加扩展。最终的列表将按字母顺序排序。


int append_data_to_buffers(data: PackedByteArray, deduplication: bool) 🔗

将给定的字节数组数据附加到缓冲区并为其创建一个 GLTFBufferView。返回目标 GLTFBufferView 的索引。如果 deduplicationtrue,则将首先在缓冲区中搜索重复数据,否则将始终追加新字节。


int append_gltf_node(gltf_node: GLTFNode, i3d_scene_node: Item, parent_node_index: int) 🔗

将给定的 GLTFNode 添加到状态中,并返回其新索引。这可用于将一个i3D节点导出为多个glTF节点,或在导入时注入新的glTF节点。在导入时,必须在父节点的 GLTFDocumentExtension._generate_scene_node() 完成前调用此方法。在导出时,必须在父节点的 GLTFDocumentExtension._export_node() 运行前调用此方法。

参数 i3d_scene_node 是与此glTF节点对应的i3D场景节点。强烈建议将其设置为有效节点,但如果没有对应的i3D场景节点,则可以设为 null。一个i3D场景节点可用于多个glTF节点,因此如果为一个i3D场景节点导出多个glTF节点,请为每个glTF节点使用相同的i3D场景节点。

参数 parent_node_index 是状态中父节点 GLTFNode 的索引。如果为 -1,则该节点将成为根节点,否则新节点将被添加到父节点的子节点列表中。该索引也将写入新节点的 GLTFNode.parent 属性中。


Array[GLTFAccessor] get_accessors() 🔗


Variant get_additional_data(extension_name: StringName) 🔗

获取此 GLTFState 实例中的附加自定义数据。该功能可用于在无状态的 GLTFDocumentExtension 扩展类中维护每个文件的状态数据(此功能非常重要,因为这些扩展类本身是无状态的)。

参数应为 GLTFDocumentExtension 扩展类名称(无需与glTF文件中的扩展名匹配),返回值可以是您设置的任何数据。如果未设置任何数据,则返回值为 null


AnimationPlayer get_animation_player(idx: int) 🔗

返回具有给定索引的 AnimationPlayer 节点。这些节点仅在将 i3D AnimationPlayer 节点转换为 glTF 动画时的导出过程中使用。


int get_animation_players_count(idx: int) 🔗

返回该 GLTFStateAnimationPlayer 节点的数量。这些节点仅在将 i3D AnimationPlayer 节点转换为 glTF 动画时的导出过程中使用。


Array[GLTFAnimation] get_animations() 🔗

返回 glTF 文件中所有 GLTFAnimation 的数组。导入时,这些将在一个 AnimationPlayer 节点生成为动画。导出时,这些将从 i3D AnimationPlayer 节点生成。


Array[GLTFBufferView] get_buffer_views() 🔗


Array[GLTFCamera] get_cameras() 🔗

返回 glTF 文件中所有 GLTFCamera 的数组。这些是 GLTFNode.camera 索引引用的摄像机。


int get_handle_binary_image() 🔗


Array[Texture2D] get_images() 🔗

Texture2D 数组的形式获取 glTF 文件中的图像。这些是 GLTFTexture.src_image 索引引用的图像。


Array[GLTFLight] get_lights() 🔗

返回 glTF 文件中所有 GLTFLight 的数组。这些是 GLTFNode.light 索引引用的灯。


Array[Material] get_materials() 🔗


Array[GLTFMesh] get_meshes() 🔗

返回 glTF 文件中所有 GLTFMesh 的数组。这些是 GLTFNode.mesh 索引引用的网格。


int get_node_index(scene_node: Item) 🔗

返回与此i3D场景节点对应的 GLTFNode 索引。这是 get_scene_node() 的逆操作,在导出过程中特别有用。

注意: 并非每个i3D场景节点都有对应的 GLTFNode,也并非每个 GLTFNode 都会生成场景节点。如果该场景节点没有对应的 GLTFNode 索引,则返回 -1


Array[GLTFNode] get_nodes() 🔗

返回 glTF 文件中所有 GLTFNode 的数组。这些是 GLTFNode.childrenroot_nodes 引用的节点。这包括可能不会在 i3D 场景中生成的节点,或者可能生成多个 i3D 场景节点的节点。


Item get_scene_node(idx: int) 🔗

返回与 GLTFNode 生成索引对应的i3D场景节点。这是 get_node_index() 的逆操作,在导入过程中特别有用。

注意: 并非每个 GLTFNode 都会生成场景节点,也并非每个生成的场景节点都有对应的 GLTFNode 。如果该 GLTFNode 索引没有对应的场景节点,则返回 null


Array[GLTFSkeleton] get_skeletons() 🔗

返回 glTF 文件中所有 GLTFSkeleton 的数组。这些是 GLTFNode.skeleton 索引引用的骨架。


Array[GLTFSkin] get_skins() 🔗

返回 glTF 文件中所有 GLTFSkin 的数组。这些是 GLTFNode.skin 索引引用的皮肤。


Array[GLTFTextureSampler] get_texture_samplers() 🔗

检索 glTF 中包含的纹理所使用的纹理采样器的数组。


Array[GLTFTexture] get_textures() 🔗


Array[String] get_unique_animation_names() 🔗

返回一组唯一的动画名称。这仅在导入过程中使用。


Array[String] get_unique_names() 🔗

返回唯一节点名称的数组。这用于导入过程和导出过程。


void set_accessors(accessors: Array[GLTFAccessor]) 🔗


void set_additional_data(extension_name: StringName, additional_data: Variant) 🔗

在此 GLTFState 实例中设置附加自定义数据。该功能可用于在无状态的 GLTFDocumentExtension 扩展类中维护每个文件的状态数据(此功能非常重要,因为这些扩展类本身是无状态的)。

第一个参数应为 GLTFDocumentExtension 扩展类名称(无需与glTF文件中的扩展名匹配),第二个参数可以是您需要的任何数据。


void set_animations(animations: Array[GLTFAnimation]) 🔗

设置该状态中的 GLTFAnimation。导入时,这些将在 AnimationPlayer 节点中生成为动画。导出时,这些将由 i3D AnimationPlayer 节点生成。


void set_buffer_views(buffer_views: Array[GLTFBufferView]) 🔗


void set_cameras(cameras: Array[GLTFCamera]) 🔗

设置该状态中的 GLTFCamera。这些是 GLTFNode.camera 索引引用的摄像机。


void set_handle_binary_image(method: int) 🔗


void set_images(images: Array[Texture2D]) 🔗

设置状态中以 Texture2D 数组形式存储的图像。可以在导出时使用。这些是 GLTFTexture.src_image 索引所引用的图像。


void set_lights(lights: Array[GLTFLight]) 🔗

设置该状态中的 GLTFLight。这些是 GLTFNode.light 索引引用的灯。


void set_materials(materials: Array[Material]) 🔗


void set_meshes(meshes: Array[GLTFMesh]) 🔗

设置该状态中的 GLTFMesh。这些是 GLTFNode.mesh 索引引用的网格。


void set_nodes(nodes: Array[GLTFNode]) 🔗

设置该状态中的 GLTFNode。这些是 GLTFNode.childrenroot_nodes 引用的节点。这里设置的一些节点在 i3D 场景中可能不会生成,也可能会生成多个 i3D 场景节点。


void set_skeletons(skeletons: Array[GLTFSkeleton]) 🔗

设置该状态中的 GLTFSkeleton。这些是 GLTFNode.skeleton 索引引用的骨架。


void set_skins(skins: Array[GLTFSkin]) 🔗

设置该状态中的 GLTFSkin。这些是 GLTFNode.skin 索引引用的皮肤。


void set_texture_samplers(texture_samplers: Array[GLTFTextureSampler]) 🔗

设置由 glTF 中包含的纹理所使用的纹理采样器的数组。


void set_textures(textures: Array[GLTFTexture]) 🔗


void set_unique_animation_names(unique_animation_names: Array[String]) 🔗

设置该状态中的唯一动画名称。这仅在导入过程中使用。


void set_unique_names(unique_names: Array[String]) 🔗

设置该状态中的唯一节点名称。这用于导入过程和导出过程。