MetaCore/docs/designs/metacore-material-render-pipeline-selection.md

201 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 12Windows 高性能目标。
- 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 映射层负责显示”。