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.

ResourceImporterScene

继承: ResourceImporter < RefCounted < Object

导入 glTF、FBX、COLLADA 或 Blender 3D 场景。

描述

另请参见 ResourceImporterOBJ,它被用于可作为独立的 Mesh 或场景导入的 OBJ 模型。

高级导入设置 对话框中提供了其他选项(例如将单个网格或材质提取到文件)。可以通过双击文件系统停靠面板中的 3D 场景或通过选择文件系统停靠面板中的 3D 场景,转至导入停靠面板并选择高级来访问该对话框。

注意:ResourceImporterScene 被用于 PackedScene,例如 .tscn.scn 文件 。

教程

属性

Dictionary

_subresources

{}

float

animation/fps

30

bool

animation/import

true

bool

animation/import_rest_as_RESET

false

bool

animation/remove_immutable_tracks

true

bool

animation/trimming

false

bool

array_mesh/deduplicate_surfaces

true

String

import_script/path

""

int

materials/extract

0

int

materials/extract_format

0

String

materials/extract_path

""

bool

mesh_library/use_node_names_as_mesh_names

false

bool

meshes/create_shadow_meshes

true

bool

meshes/ensure_tangents

true

bool

meshes/force_disable_compression

false

bool

meshes/generate_lods

true

int

meshes/light_baking

1

float

meshes/lightmap_texel_size

0.2

bool

nodes/apply_root_scale

true

bool

nodes/import_as_skeleton_bones

false

String

nodes/root_name

""

float

nodes/root_scale

1.0

Script

nodes/root_script

null

String

nodes/root_type

""

bool

nodes/use_name_suffixes

true

bool

nodes/use_node_type_suffixes

true

bool

skins/use_named_skins

true


属性说明

Dictionary _subresources = {} 🔗

包含场景子资源的属性。这是一个内部选项,在导入停靠面板中不可见。


float animation/fps = 30 🔗

用于通过线性插值将动画曲线烘焙为一系列点的每秒帧数。建议配置该值以匹配你在 3D 建模软件中用作基线的值。较高的值会导致更精确的快速运动变化的动画,但代价是文件大小和内存占用更大。由于插值,超过 30 FPS 通常不会有太大好处(因为动画在更高的渲染帧速率下仍然会显得平滑)。


bool animation/import = true 🔗

如果为 true,则从 3D 场景导入动画。


bool animation/import_rest_as_RESET = false 🔗

如果为 true,则添加一个名为 RESETAnimation,其中包含来自 Skeleton3D 节点的 Skeleton3D.get_bone_rest()。这对于提取参考姿势中的动画很有用。


bool animation/remove_immutable_tracks = true 🔗

如果为 true,则移除仅包含默认值的动画轨道。这可以减少某些 3D 场景的输出文件大小和内存占用,具体取决于其动画轨道的内容。


bool animation/trimming = false 🔗

如果为 true,如果没有关键帧更改,则修剪动画的开头和结尾。这可以减少某些 3D 场景的输出文件大小和内存占用,具体取决于其动画轨道的内容。


bool array_mesh/deduplicate_surfaces = true 🔗

如果 3D 模型文件仅包含一个网格(Mesh),则此选项无效。如果设为 true 且 3D 模型文件包含多个具有相同表面(Surface)名称和格式的网格,那么在合并网格时,表面将被合并在一起。这有助于减少生成网格中的表面数量,并避免材质重复。如果设为 false 且 3D 模型文件包含多个网格,表面将始终被保持分离。


String import_script/path = "" 🔗

导入脚本的路径,该脚本可以在导入过程完成后运行代码以进行自定义处理。有关详细信息,请参阅 使用导入脚本进行自动化


int materials/extract = 0 🔗

材质提取模式。

  • 0 (Keep Internal),不提取材质。

  • 1 (Extract Once),提取一次材质,后续导入时重用。

  • 2 (Extract and Overwrite),每次导入都提取并覆盖材质。


int materials/extract_format = 0 🔗

提取材质的文件格式。

  • 0 (Text),文本文件格式(*.tres)。

  • 1 (Binary),二进制文件格式(*.res)。

  • 2 (Material),二进制文件格式(*.material)。


String materials/extract_path = "" 🔗

提取材质的保存路径。留空时使用源场景路径。


bool mesh_library/use_node_names_as_mesh_names = false 🔗

如果设为 true,网格(Mesh)的名称将被设置为 3D 模型文件中节点的名称。如果设为 false,网格的名称将被设置为 3D 模型文件中网格自身的名称。当 3D 模型文件的作者未在 Blender 或其他 3D 建模软件中正确设置网格名称时,启用此选项是一种常见的变通方法。例如,某个文件可能包含一个名为 "Turret" 的节点,其网格名称为 "Cube.002",启用此选项后,网格名称将被设置为 "Turret",而不是 "Cube_002"。


bool meshes/create_shadow_meshes = true 🔗

如果为 true,则在导入时启用阴影网格体的生成。这可以通过在可能的情况下将顶点焊接在一起来优化阴影渲染,且不会降低质量。这反过来又减少了渲染阴影所需的内存带宽。阴影网格生成当前不支持使用比源网格更低的细节级别(但阴影渲染将在相关时使用 LOD)。


bool meshes/ensure_tangents = true 🔗

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

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


bool meshes/force_disable_compression = false 🔗

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


bool meshes/generate_lods = true 🔗

如果为 true,则生成网格的较低细节变体,这些变体将显示在远处以提高渲染性能。并非所有网格体都受益于 LOD,特别是如果它们从未从远处渲染。禁用该功能可以减少输出文件大小并加快导入速度。有关详细信息,请参阅 网格细节级别(LOD)


int meshes/light_baking = 1 🔗

在 3D 场景中配置网格体的 GeometryInstance3D.gi_mode。如果被设置为静态光照贴图,则将网格体的 GI 模式设置为静态并在导入时生成 UV2 以进行 LightmapGI 烘焙。


float meshes/lightmap_texel_size = 0.2 🔗

控制烘焙光照贴图上每个纹素的大小。较小的值会产生更精确的光照贴图,但代价是更大的光照贴图大小和更长的烘焙时间。

注意:仅当 meshes/light_baking 被设置为静态光照贴图时有效。


bool nodes/apply_root_scale = true 🔗

如果为 truenodes/root_scale 将被应用于后代节点、网格、动画、骨骼等。这意味着,如果你稍后在导入的场景中添加子节点,它将不会被缩放。如果为 falsenodes/root_scale 将乘以该根节点的缩放。


bool nodes/import_as_skeleton_bones = false 🔗

将导入场景中的所有节点视为单个 Skeleton3D 中的骨骼。可用于保证导入的动画以骨架骨骼而不是节点为目标。也可用于在 BoneMap 中分配 "Root" 骨骼。有关详细信息,请参阅 重定向 3D 骨架


String nodes/root_name = "" 🔗

覆盖根节点名称。如果为空,则根节点将使用场景指定的内容;如果场景未指定根名称,则根节点将使用该文件名。


float nodes/root_scale = 1.0 🔗

用于场景根的均一缩放。默认值 1.0 不会执行任何重新缩放。有关如何应用该缩放的详细信息,请参阅 nodes/apply_root_scale


Script nodes/root_script = null 🔗

如果设为有效的脚本,则会将该脚本附加到导入后的场景的根节点上。如果根节点的类型与脚本不兼容,则会将根节点替换为与脚本兼容的类型。也可以对场景中的其他非网格节点使用该设置,为他们附加脚本。


String nodes/root_type = "" 🔗

覆盖该根节点类型。如果为空,则根节点将使用场景指定的内容,如果场景未指定根类型,则根节点将使用 Node3D。建议使用继承自 Node3D 的节点类型。否则,你将无法直接在 3D 编辑器中定位节点。


bool nodes/use_name_suffixes = true 🔗

如果为 true,则会使用导入的节点、资源等对象的名称后缀来确定类型和属性,例如 -noimp 可以跳过节点和动画的导入、-alpha 可以启用材质的 Alpha 透明、-vcol 可以启用材质的顶点颜色。禁用该选项会让编辑器导入的文件更接近原始文件,更类似于在运行时导入文件。详见《使用名称后缀自定义节点类型》


bool nodes/use_node_type_suffixes = true 🔗

如果为 true,则会使用节点名称的后缀来确定节点类型,例如 -col 表示碰撞形状。仅在 nodes/use_name_suffixestrue 时使用。禁用该选项会让编辑器导入的文件更接近原始文件,更类似于在运行时导入文件。详见《使用名称后缀自定义节点类型》


bool skins/use_named_skins = true 🔗

如果勾选此项,动画将使用带有名称的 Skin(蒙皮)资源。在这里,MeshInstance3D 节点包含 3 个与之相关的关键属性:指向 Skeleton3D 节点的骨骼 NodePath(通常填 ..)、一个网格(Mesh),以及一个蒙皮(Skin):

  • Skeleton3D 节点包含一个带有名称的骨骼列表,记录了它们的姿态和初始状态(Rest),同时也包含节点自身的名称以及父级骨骼的信息。

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

  • 蒙皮(Skin)包含了将此网格绑定到该 Skeleton3D 上所需的必要信息。对于 3D 建模软件为每个内部骨骼选定的 ID,它都包含两样东西。首先是一个矩阵,被称为绑定姿态矩阵、逆绑定矩阵,简称 IBM。其次,Skin 还包含每根骨骼的名称(如果 skins/use_named_skins 设为 true),或者包含该骨骼在 Skeleton3D 列表中的索引编号(如果 skins/use_named_skins 设为 false)。

综合以上信息,就足以告诉 Godot 如何利用 Skeleton3D 节点中的骨骼姿态来渲染每个 MeshInstance3D 的网格了。需要注意的是,每个 MeshInstance3D 可能会共享绑定关系(这在从 Blender 导出的模型中很常见),也可能每个 MeshInstance3D 使用各自独立的 Skin 对象(这在从 Maya 等其他工具导出的模型中很常见)。