201 lines
6.0 KiB
Markdown
201 lines
6.0 KiB
Markdown
# MetaCore 材质与渲染管线选型说明
|
||
|
||
生成时间:2026-03-28
|
||
更新时间:2026-05-20
|
||
状态:当前主线更新
|
||
范围:材质、模型导入、Filament 渲染与发布管线
|
||
|
||
## 目的
|
||
|
||
这份文档用于明确 MetaCore 当前材质与渲染管线的选型策略。早期文档曾以 Panda3D / simplepbr 作为第一阶段 PBR 起点;当前工程主线已经迁移到 Google Filament,因此后续渲染、材质、glTF 和运行时视觉能力应围绕 Filament 展开。
|
||
|
||
目标不是一步到位做出完整 Unity URP 或 Unreal 渲染管线,而是:
|
||
|
||
- 先打通 glTF / GLB -> MetaCore 资产 -> ECS 场景 -> Filament 渲染的主链路。
|
||
- 让模型、材质、贴图、灯光和场景保存形成稳定闭环。
|
||
- 保持 MetaCore 自己的材质资源模型,不让 Filament 反向决定编辑器资产结构。
|
||
- 为 Vulkan、OpenGL、DirectX 12、WebGPU 等后端能力预留空间。
|
||
|
||
## 结论先说
|
||
|
||
**MetaCore 当前第一渲染主线是 Google Filament。**
|
||
|
||
但这必须满足一个前提:
|
||
|
||
**MetaCore 自己定义材质系统,Filament 只是当前主渲染后端和材质落地目标,不是编辑期资产结构本身。**
|
||
|
||
换句话说:
|
||
|
||
```text
|
||
MetaCore Material Asset
|
||
-> MetaCore Render Material Description
|
||
-> Filament Material / MaterialInstance
|
||
-> Vulkan / OpenGL / DirectX 12 / WebGPU 后端
|
||
```
|
||
|
||
## 为什么选择 Filament
|
||
|
||
Filament 比早期 Panda3D/simplepbr 路线更适合作为 MetaCore 的长期渲染核心:
|
||
|
||
- 原生面向现代 PBR。
|
||
- glTF / GLB 与材质语义更贴近当前资产导入主线。
|
||
- 支持成熟的光照、IBL、色彩管理和材质系统。
|
||
- 具备多后端能力,可承接 Vulkan、OpenGL、DirectX 12、WebGPU 等方向。
|
||
- 更适合后续做工业仿真、数字孪生和高质量实时可视化。
|
||
|
||
## 分层原则
|
||
|
||
### 1. MetaCore 材质系统
|
||
|
||
由 MetaCore 自己定义:
|
||
|
||
- 材质资源结构。
|
||
- 参数命名与参数槽位。
|
||
- 贴图槽定义。
|
||
- 默认材质类型。
|
||
- 材质序列化、版本兼容和资源管理。
|
||
- 编辑器 Inspector 和资产引用方式。
|
||
|
||
这层解决“MetaCore 材质是什么”。
|
||
|
||
### 2. Filament 映射层
|
||
|
||
由渲染桥负责:
|
||
|
||
- 把 MetaCore 材质参数映射到 Filament `MaterialInstance`。
|
||
- 把 glTF / gltfio 解析出的材质关系落到 MetaCore 材质资源。
|
||
- 处理贴图加载、采样器、颜色空间、粗糙度金属度、法线、透明模式等细节。
|
||
- 处理编辑器视口和 Player 运行时的一致性。
|
||
|
||
这层解决“MetaCore 材质如何在 Filament 中显示”。
|
||
|
||
### 3. 图形 API 后端
|
||
|
||
具体后端由 Filament 承接:
|
||
|
||
- Vulkan:首选高性能目标。
|
||
- OpenGL:兼容和过渡。
|
||
- DirectX 12:Windows 高性能目标。
|
||
- WebGPU:未来 B/S 和浏览器嵌入目标。
|
||
|
||
MetaCore 不应在第一阶段直接把业务逻辑写死到某个底层图形 API。
|
||
|
||
## 第一阶段材质资源模型
|
||
|
||
第一阶段最低应包含:
|
||
|
||
- `MaterialType`
|
||
- `BaseColor`
|
||
- `BaseColorTexture`
|
||
- `NormalTexture`
|
||
- `Metallic`
|
||
- `Roughness`
|
||
- `MetallicRoughnessTexture`
|
||
- `AoTexture`
|
||
- `EmissiveColor`
|
||
- `EmissiveTexture`
|
||
- `DoubleSided`
|
||
- `AlphaMode`
|
||
- `AlphaCutoff`
|
||
|
||
这些字段属于 MetaCore 材质语义,不属于 Filament 内部实现细节。
|
||
|
||
## 与 glTF / gltfio 的关系
|
||
|
||
当前模型导入主线是 glTF / GLB / gltfio。导入链路应尽量保持:
|
||
|
||
```text
|
||
glTF / GLB
|
||
-> gltfio / importer
|
||
-> MetaCore Model Import Document
|
||
-> Mesh / Material / Texture 资源
|
||
-> Scene MeshRenderer 引用
|
||
-> Filament 渲染
|
||
```
|
||
|
||
导入器可以读取 glTF 的 PBR 语义,但最终应写入 MetaCore 自己的材质资源,而不是让场景对象直接绑定 gltfio 临时对象。
|
||
|
||
## 编辑期与发布期
|
||
|
||
### 编辑期
|
||
|
||
编辑器阶段优先使用 JSON 和可读元数据:
|
||
|
||
- 材质资源可读。
|
||
- 贴图引用可检查。
|
||
- MeshRenderer 的资源引用可 diff。
|
||
- 导入结果可调试、可重导入、可人工修复。
|
||
|
||
### 发布期
|
||
|
||
Cook 阶段再生成运行时二进制内容:
|
||
|
||
- cooked material
|
||
- cooked texture
|
||
- cooked mesh
|
||
- cooked scene
|
||
- CookManifest
|
||
|
||
Cook 结果服务运行时加载性能,不应阻塞编辑器阶段的快速迭代。
|
||
|
||
## 第一阶段必须支持
|
||
|
||
### P0
|
||
|
||
- 基础 PBR 材质资源。
|
||
- BaseColor / Metallic / Roughness / Normal / Emissive。
|
||
- glTF / GLB 材质导入。
|
||
- MeshRenderer 到 Mesh / Material / Texture 的资源引用。
|
||
- Filament 视口与 Player 运行时材质表现一致。
|
||
- 编辑期 JSON 资源保存与加载。
|
||
- Cook 阶段能追踪材质和贴图依赖。
|
||
|
||
### P1
|
||
|
||
- AO 贴图。
|
||
- Alpha Mask / Blend。
|
||
- 双面材质。
|
||
- IBL / 环境光配置。
|
||
- 材质预览。
|
||
- 材质实例与覆盖参数。
|
||
|
||
### P2
|
||
|
||
- Shader Graph 或节点材质。
|
||
- 自定义 Filament 材质模板。
|
||
- 后处理资源化。
|
||
- 平台化材质裁剪和质量档位。
|
||
|
||
## 明确不做
|
||
|
||
第一阶段不做:
|
||
|
||
- 完整 URP 等价物。
|
||
- 完整 Unreal 材质编辑器等价物。
|
||
- 大量自定义 shader feature。
|
||
- 复杂后处理栈。
|
||
- 多渲染管线并行维护。
|
||
|
||
第一阶段的目标是让模型和材质在编辑器、保存加载、Player 和 Cook 中形成可信闭环。
|
||
|
||
## 成功标准
|
||
|
||
第一阶段材质与渲染链路成立的标准:
|
||
|
||
1. 导入一个 glTF / GLB 模型后,Mesh、Material、Texture 关系能进入 MetaCore 资产系统。
|
||
2. 拖入场景后,Scene 中的 MeshRenderer 通过资源引用表达模型和材质。
|
||
3. 保存、关闭、重新打开项目后,材质表现保持一致。
|
||
4. 编辑器视口和 Player 中的 Filament 渲染结果一致到可接受程度。
|
||
5. Cook 能追踪材质与贴图依赖,并生成运行时可消费的二进制资产。
|
||
6. 材质资源本身不绑定 Filament 内部对象生命周期,可以在未来演进映射层。
|
||
|
||
## 设计底线
|
||
|
||
MetaCore 自己拥有材质系统,Filament 是当前主渲染后端。
|
||
|
||
不要把关系写反:
|
||
|
||
- 不是“Filament 材质参数直接等于 MetaCore 材质资产”。
|
||
- 也不是“glTF 临时解析对象直接等于场景材质”。
|
||
- 而是“MetaCore 资产系统吸收导入结果,再由 Filament 映射层负责显示”。
|