本文内容
场景源资产最佳实践
本主题提供的最佳实践有助于确保您在数字内容创建应用程序 (DCC) 中创建的场景源资产可以在 Open 3D Engine (O3DE) 中处理和使用。
一般性建议
- Use FBX - 虽然 O3DE 可以通过开放式资产导入库支持多种 场景格式 ,但 FBX 是场景源资产的最佳选择。FBX 为 O3DE 可以使用的数据提供了完整的支持。
- World Scale - 确保您的场景使用正确的 世界比例。O3DE 的世界比例尺为 1 米/世界单位。许多 DCC 应用程序的默认比例为每个世界单位 1 厘米。
- Coordinate System - O3DE 使用 右手向上坐标系。DCC 应用程序使用不同的坐标系。您可以将 DCC 应用程序设置为与 O3DE 一致的坐标系,或者在 DCC 应用程序的导出器选项中对场景进行转换。
- Transform - 在大多数情况下,资产应放置在场景原点的地面上,直立并朝向正视图轴(Y 轴)。
- Scene assets - 确保您的源场景资产包含所有节点,并且只包含您打算在资产中使用的节点。大多数 DCC 应用程序允许您只导出所选内容,或通过导出界面指定要导出的节点。默认情况下, Asset Processor会尝试处理场景源资产中的所有节点。
- Scene data - 确保您的资产只包含可为 O3DE 处理的数据。此表列出了 O3DE 支持的场景数据。其中有一些硬限制和一些取决于硬件资源的限制。在很多情况下,不支持的数据会被忽略。在某些情况下,不支持的数据或超出限制的数据会导致警告、处理错误或性能问题。
- Node names - 场景源资产中包含的节点(网格和骨骼)名称应为字母数字字符串。如果需要,请使用下划线 (
_
) 作为分隔符。使用特殊字符或点 (.
) 作为分隔符会在处理资产时产生问题。使用对您有意义的节点名称。在某些工具中,例如 场景设置,您可能需要从场景源资产中选择特定节点。如果节点的名称合理,在列表中查找就会容易得多。 - User Defined Properties (UDP) - 用户定义的属性可存储在场景源资产中,用于帮助确定资产的处理方式。UDP 对于要作为程序预制板处理的复杂源场景资产特别有用。更多信息请访问 用户定义属性 主题。
如果在处理场景源资产时遇到问题,请检查 Asset Processor中的 Event Log 是否有警告和错误。事件日志可能包含有助于调试场景源资产问题的信息。
Meshes
有很多选项可以配置网格处理设置。请查看场景设置 网格选项卡主题了解更多信息。
网格密度 - 虽然 O3DE 理论上支持每个网格数十亿个顶点,但请确保您的网格密度适合您的目标平台。
清理网格数据 - 确保网格数据的一致性。某些 DCC 应用程序在创建和导出网格时会出现以下问题:
- 多边形线(只有两个点的多边形)
- 非曲面几何(共享两个以上面的边)
- 全局小面和小边
- 意外的非凸多边形
- 自相交多边形
- 非预期开放边
大多数 DCC 应用程序都提供了工具和脚本,您可以在导出到 FBX 场景源资产之前使用它们来检查这些问题。
三角面和四边面 - 网格应尽可能由三边或四边多边形组成。但在从 DCC 应用程序导出或在 O3DE 中处理时,n-gons 可能会被三角化,产生非预期的结果,如非凸面。
法线 - 如果需要,确保源场景资产中的网格具有自定义法线。在处理网格时,可以为网格生成法线。不过,生成的法线是平均值,可能无法准确表现某些模型,如边缘有折痕的硬表面。有些 DCC 应用程序会区分描述网格表面位置的网格点和描述网格表面纹理图集的顶点。对于同时支持点属性和顶点属性的 DCC 应用程序,法线应作为点属性应用。
UVs - O3DE 附带的着色器最多支持两个 UV 集。可在自定义着色器中添加对其他 UV 集的支持。UV 集应使用简单的名称,如
UV0
,UV1
等。对于同时支持点属性和顶点属性的 DCC 应用程序,UV 应作为顶点属性应用。Vertex Color Streams - 顶点颜色流可表示着色器中使用的颜色,也可用于打包每个顶点的属性,例如布网格的约束和质量值。顶点颜色流应使用浮点颜色值和合理的名称,以确保您能轻松确定哪些流用于表示表面颜色,哪些流用于表示其他顶点属性。
Level of detail (LOD) - LOD 是经过优化的网格,具有逐渐减少的多边形数和简化的材质,应采用 LOD 以获得最佳的运行性能。有关 LOD 的更多信息,请查看 “场景设置 ”主题中的 细节级别 (LOD)部分。
切线 - 切线(和位切线)是顶点属性,与网格法线和法线贴图相结合,可确保变形网格着色正确。切线是逼真Actor的关键网格属性。切线可以根据网格的法线自动生成,也可以从源场景资产中导入自定义切线。有关切线的更多信息,请查看场景设置主题中的 Tangents 部分。
材质 - 虽然 O3DE 可以从场景源资产中处理材质设置,但 DCC 应用程序中的材质属性和 O3DE 中的材质属性之间通常不是一一对应的关系。您可以使用 DCC 应用程序中最接近的等效物理渲染(PBR)材质,然后修改 O3DE 中的材质,或者在 DCC 应用程序中创建与 O3DE 材质属性一一对应的材质。
Actors
Actor是与骨骼绑定的网格。虽然本节专门讨论了 .actor
资产类型,但 “actor ”是骨架、蒙皮网格和动作的组合。有关处理Actor的更多信息,请查看场景设置
Actors 选项卡主题获取更多信息。
- 根骨骼 - 应在Actor的骨骼中添加根骨。根运动提取需要它。更多信息请查看 数据驱动跟运动教程主题。
- 根变换 - 根骨的位置应位于场景原点(0,0,0),根骨在每个轴上的旋转应为 0。
- 骨骼名称 - 网格节点的命名建议同样适用于此。名称应为字母数字字符串。必要时使用下划线 (
_
) 作为分隔符。使用特殊字符或点 (.
) 作为分隔符会在处理时产生问题。使用对你有意义的骨名称。在某些工具(如 场景设置)中,您可能需要从场景源资产中选择特定的骨骼。如果骨骼的名称合理,就会更容易在列表中找到它们。 - 层次结构 - 不要在根骨骼上方的层次结构中使用变换、组或父节点。根骨骼必须是骨骼层次结构的顶层父节点,以确保运动提取正常工作。
- 朝向 - 调整Actor的方向,使其面向正视图轴(Y 轴)下方。
- 坐标系更改 - 如果您使用 坐标系更改修改器来修正Actor的方向,也请为Actor的每个动作使用具有相同设置的坐标系更改修改器。这样才能确保动画的方向正确。
- 删除历史记录(折叠修改器、冻结几何图形) - 如果您的 DCC 应用程序有一些构造历史或修改器堆栈的概念,您应该在将网格绑定到骨架之前删除历史记录、折叠修改器堆栈或缓存/冻结几何体。
- 冻结或归零变换 - Actor的骨架应该有一个绑定姿势。Actor的附肢通常会在这个姿势下伸展,以确保皮肤顶点可以被捕捉并轻松绘制皮肤权重。在将皮肤网格绑定到骨架之前,所有骨骼上的变换都应在此姿势下冻结或归零。
- 绑定姿势 - 确保皮肤网格在绑定姿势中与骨骼绑定。应用于Actor的所有动画(骨骼变换)都应相对于该姿势。
重要:必须确保Actor源场景资产中只包含蒙皮网格和影响蒙皮网格的骨骼。Actor骨骼可能具有复杂的动画控制和求解器,当 Asset Processor 尝试处理它们时可能会出现问题。虽然可以通过在 “场景设置 ”中选择要处理的特定网格和骨骼层次来解决潜在问题,但最好还是提供干净的场景源资产。
一种解决方案是为动画装备和捕捉骨架(用于变形蒙皮网格)创建单独的层次结构。然后,在Actor源场景资产中只包含蒙皮网格和捕捉骨架。没有捕捉到任何骨骼的网格和不影响任何蒙皮网格的叶状骨骼默认不会与Actor一起处理。
Motions
一般来说,Actor的最佳实践也适用于此,因为动作通常使用与应用动作的Actor相同的骨架。我们可以将动作重定向到不同的Actor身上。更多信息请查看 重定向动作 主题。
有关处理动作的更多信息,请查看场景设置 Motions选项卡主题了解更多信息。
- 根运动 - 任何使Actor偏离场景原点的变换都应键入根骨骼,以便提取根运动。有关详细信息,请查看 数据驱动的根运动 教程主题。
- 烘焙动画 - 所有动画都应烘焙,也就是说,骨骼变换应在每一帧进行抠像。许多 DCC 应用程序都有导出选项,可以在导出时烘焙动画。
- 坐标系更改 - 如果您使用 坐标系更改修改器来修正Actor的方向,也请为Actor的每个动作使用具有相同设置的坐标系更改修改器。这样才能确保动画的方向正确。
PhysX
物理碰撞体根据选定的网格、使用 _phys
命名约定的网格或源场景资产中具有 collision = true
UDP 属性的网格生成。物理网格有三种类型:三角形网格、基元网格和凸壳网格。每种类型都有自己的用例。由于 PhysX 碰撞体是根据场景源资产中的网格生成的,因此最重要的是所选网格要遵循
网格部分概述的网格密度、干净的网格数据、三角形和四边形以及 LOD 的建议。
如果碰撞体(及其相应的网格资产)要作为动态刚体进行模拟,那么将对象置于场景源资产中,使世界原点定义刚体的质心(COM),可能会有所帮助。质心可以在 “PhysX 动态刚体 ”组件中调整,但在场景源资产中通过定位资产来定义质心要容易得多。
PhysX 碰撞体是一个复杂的主题,阅读教程 处理 PhysX 碰撞体资产有助于全面了解碰撞体类型及其处理方法。