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.

EditorSceneFormatImporter

继承: RefCounted < Object

派生: EditorSceneFormatImporterBlend, EditorSceneFormatImporterFBX2GLTF, EditorSceneFormatImporterGLTF, EditorSceneFormatImporterUFBX

从第三方的 3D 文件中导入场景。

描述

EditorSceneFormatImporter 允许为第三方 3D 格式定义导入器脚本。

要使用 EditorSceneFormatImporter,请先使用 EditorPlugin.add_scene_format_importer_plugin() 方法注册它。

方法

PackedStringArray

_get_extensions() virtual required const

void

_get_import_options(path: String) virtual

Variant

_get_option_visibility(path: String, for_animation: bool, option: String) virtual const

Object

_import_scene(path: String, flags: int, options: Dictionary) virtual required

void

add_import_option(name: String, value: Variant)

void

add_import_option_advanced(type: Variant.Type, name: String, default_value: Variant, hint: PropertyHint = 0, hint_string: String = "", usage_flags: int = 6)


枚举

flags ImportFlags: 🔗

ImportFlags IMPORT_SCENE = 1

未使用的标志(启用它没有任何效果)。

ImportFlags IMPORT_ANIMATION = 2

从 3D 场景中导入动画。当将场景作为 AnimationLibrary(动画库)进行导入时,此选项会始终处于启用状态。

ImportFlags IMPORT_FAIL_ON_MISSING_DEPENDENCIES = 4

未使用的标志(启用它没有任何效果)。

ImportFlags IMPORT_GENERATE_TANGENT_ARRAYS = 8

如果设为 true,当输入的网格体(meshes)没有切线数据时,将使用 Mikktspace 算法来生成顶点切线。如果条件允许,更推荐让 3D 建模软件在导出模型时直接生成切线,而不是依赖这个选项。法线贴图(normal maps)和高度贴图(height maps),以及任何需要切线的材质或着色器(shader)功能,都必须要有切线数据才能正确显示。

如果你不需要那些依赖切线的材质功能,禁用此选项可以在源 3D 文件不包含切线的情况下,减小输出文件的大小,并加快导入速度。

ImportFlags IMPORT_USE_NAMED_SKIN_BINDS = 16

如果勾选此项,动画将使用带名称的 Skin(皮肤)资源。MeshInstance3D(网格实例 3D)节点在这里包含 3 个关键属性:一个指向 Skeleton3D(骨骼 3D)节点的骨架 NodePath(节点路径,通常是 ..)、一个网格(mesh),以及一个皮肤(skin)。

  • Skeleton3D 节点包含一个骨骼列表,其中记录了骨骼的名称、姿态(pose)和静止状态(rest),以及父级骨骼的信息。

  • 网格(mesh)包含了显示模型所需的所有原始顶点数据。就网格本身而言,它知道顶点是如何进行权重绘制(weight-painted)的,并且使用了一些通常从 3D 建模软件导入的内部编号。

  • 皮肤(skin)包含了将这个网格绑定到该 Skeleton3D 上所需的必要信息。对于 3D 建模软件选定的每一个内部骨骼 ID,它都包含两项内容。首先,是一个被称为“绑定姿态矩阵”、“反向绑定矩阵”或简称 IBM 的矩阵。其次,Skin 还包含每根骨骼的名称(如果启用了此标志),或者包含该骨骼在 Skeleton3D 列表中的索引(如果禁用了此标志)。

综合这些信息,就足以告诉 Godot 如何利用 Skeleton3D 节点中的骨骼姿态,来渲染每个 MeshInstance3D。请注意,每个 MeshInstance3D 可以共享绑定信息(这在从 Blender 导出的模型中很常见),或者每个 MeshInstance3D 也可以使用独立的 Skin 对象(这在从 Maya 等其他工具导出的模型中很常见)。

ImportFlags IMPORT_DISCARD_MESHES_AND_MATERIALS = 32

在导入时忽略网格(Meshes)和材质(Materials)。当将场景作为 AnimationLibrary(动画库)进行导入时,此选项会始终处于启用状态。

ImportFlags IMPORT_FORCE_DISABLE_MESH_COMPRESSION = 64

如果为 true,则不会使用网格压缩。如果你在网格法线或 UV 中发现块状伪影,或者如果你的网格在每个方向都大于几千米,请考虑启用。


方法说明

PackedStringArray _get_extensions() virtual required const 🔗

返回该场景导入器支持的文件扩展名。


void _get_import_options(path: String) virtual 🔗

覆盖后可以添加通用导入选项。这些选项将出现在编辑器的主导入面板中。请通过 add_import_option()add_import_option_advanced() 添加选项。

注意:所有 EditorSceneFormatImporterEditorScenePostImportPlugin 实例都会为所有文件添加选项。path 非空时,最好检查文件的扩展名。

用户编辑项目设置时 path 将为空。建议在 path 为空时添加所有选项,以便用户自定义导入默认值。


Variant _get_option_visibility(path: String, for_animation: bool, option: String) virtual const 🔗

显示给定的选项应返回 true,隐藏给定的选项应返回 false,忽略应返回 null


Object _import_scene(path: String, flags: int, options: Dictionary) virtual required 🔗

在此处执行批量场景导入逻辑,例如使用 GLTFDocumentFBXDocument


void add_import_option(name: String, value: Variant) 🔗

添加特定的导入选项(仅限名称和默认值)。该函数只能在 _get_import_options() 中调用。


void add_import_option_advanced(type: Variant.Type, name: String, default_value: Variant, hint: PropertyHint = 0, hint_string: String = "", usage_flags: int = 6) 🔗

添加特定的导入选项。该函数只能在 _get_import_options() 中调用。