v3.0.0

本页面为自动翻译,可能包含错误。如果发现问题,请通过“编辑此页面”链接帮助修正。

Turian 3.0.0 改变了网格渲染器绑定材质的方式:按材质槽位,而不是按子网 格索引。网格渲染器现在绘制 materials[submesh.material_slot],因此一 个拥有数千个子网格但共享少数几个材质的模型,只需要那少数几个槽位。这正 是让展平成一个网格的整个场景——数百种材质——能够完整渲染,而不是在前 32 个处停止的原因。

变更内容

  • MeshRendererComponent —— materials 数组现在按材质槽位Submesh.material_slot)索引,而不是按子网格索引。GPU 渲染器和软件 渲染器都会查找 materials[submesh.material_slot]
  • 材质上限 —— 每个渲染器的限制从 32 提升到 160MAX_MATERIALS)。拥有超过 32 个材质的网格现在会全部绑定并渲染。
  • GPU 子网格 —— 不再限制为 32 个;一个网格的所有子网格每帧都会被绘 制。
  • 场景文件 —— material_guids 现在按材质槽位存储(此前是按子网 格)。场景的 version 字段从 1 升级到 2
  • 烹饪后的网格格式(TMSH)未变 —— 无需重新烹饪。只有场景/组件格式发 生了变化。

谁会受到影响

任何将材质分配给多材质模型的场景所在的项目,以及任何假定旧的按位置(按 子网格)绑定方式来读写 MeshRendererComponent.materials / material_count 的游戏代码。

升级步骤

1. 更新到 3.0.0

下载 3.0.0 SDK。 SDK 是自包含的,因此在迁移期间你可以让 2.x SDK 与之并存(参见 发布政策)。

2. 迁移场景文件

旧场景仍然可以加载——v1 场景的材质绑定会在内存中重建,并记录一条警告。要 一次性对整个项目持久化这一转换,请在资源已至少导入过一次的项目上运行迁 移工具(在 Studio 中打开项目,或运行 turian-cli import,都会做到这一 点——迁移工具需要每个模型烹饪后的产物才能按槽位重建材质):

turian-cli migrate path/to/project

该命令会扫描每个场景,重写仍处于旧格式的场景,并报告它所修改的内容。请 提交生成的差异。(在 Studio 中打开场景也会在加载时迁移它,并将其标记为 已修改,因此保存也会将其持久化——CLI 只是批量版本。)

手动的逐子网格覆盖会被重置。 2.x 的逐子网格格式无法明确地映射到材 质槽位,因此迁移会根据模型的槽位默认值重建每个模型渲染器的表格, 并记录一条警告。如果你曾手动将非默认材质分配给某个特定子网格,请在迁 移后在检查器中按槽位重新分配。使用自动分配材质的项目(常见情况)不需 要进一步操作。

3. 更新游戏代码

如果你的代码按子网格索引分配或读取渲染器材质:

// 2.x —— materials[i] 绑定到子网格 i
renderer.materials[submesh_index] = my_material_ref;

// 3.0.0 —— materials[slot] 按子网格的 material_slot 绑定
renderer.materials[material_slot] = my_material_ref;
renderer.material_count = slot_count; // 唯一材质槽位的数量

单材质网格不受影响:materials[0] 仍然应用于整个网格(没有子网格表的网 格完全使用槽位 0 绘制)。未设置或超出范围的槽位会回退到默认材质。检查器 现在每个材质槽位显示一行。

4. 检查大型/展平模型

拥有超过 32 个子网格或材质的模型在 2.x 中会被裁剪——只绘制前 32 个子网 格。迁移后它们会完整渲染:预计会出现此前缺失的几何体,每个表面都拥有 自己的槽位材质。

之后不要降级

3.0.0 保存的场景存储按槽位的 material_guidsversion: 2;2.x 会将 这些条目当作按子网格读取,并绑定错误的材质。项目只应向前迁移一次;如果 需要先做实验,请在分支上进行。


← 所有文档 编辑此页面