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.
Checking the stable version of the documentation...
EditorSceneFormatImporter
继承: RefCounted < Object
派生: EditorSceneFormatImporterBlend, EditorSceneFormatImporterFBX2GLTF, EditorSceneFormatImporterGLTF, EditorSceneFormatImporterUFBX
从第三方的 3D 文件中导入场景。
描述
EditorSceneFormatImporter 允许为第三方 3D 格式定义导入器脚本。
要使用 EditorSceneFormatImporter,请先使用 EditorPlugin.add_scene_format_importer_plugin() 方法注册它。
方法
_get_extensions() virtual required const |
|
void |
_get_import_options(path: String) virtual |
_get_option_visibility(path: String, for_animation: bool, option: String) virtual const |
|
_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() 添加选项。
注意:所有 EditorSceneFormatImporter 和 EditorScenePostImportPlugin 实例都会为所有文件添加选项。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 🔗
在此处执行批量场景导入逻辑,例如使用 GLTFDocument 和 FBXDocument。
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() 中调用。