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

226 lines
5.2 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
状态:草案
范围M3 场景编辑、材质与光照工作流
## 目的
这份文档用于明确 MetaCore 第一阶段材质与渲染管线的选型策略。
目标不是一步到位做出完整的 Unity URP 等价物,而是:
- 第一阶段先把基础 PBR 材质工作流跑通
- 让材质、灯光、模型和场景搭建形成稳定闭环
- 在不锁死未来架构的前提下,借力现有可行方案
## 结论先说
**第一阶段使用 `panda3d-simplepbr` 作为基础 PBR Shader 实现,是正确且务实的选择。**
但这必须满足一个前提:
**MetaCore 自己定义材质系统,`simplepbr` 只是第一版渲染后端实现,不是最终渲染架构。**
## 为什么这个选型合理
对于第一阶段来说,你当前最需要的不是一整套宏大的渲染管线,而是:
- 模型导入后能有像样的材质表现
- 场景中灯光表现稳定
- 编辑器和运行时对材质的理解尽量一致
- 工程团队能尽快把材质工作流做起来
`panda3d-simplepbr` 非常适合作为这个阶段的起点,因为它解决的是:
- 基础 PBR 材质
- 基础灯光
- 贴图和阴影的第一版工程问题
这正好对应 MetaCore 当前的 M3 目标。
## 为什么它不能作为最终方案
MetaCore 的长期目标不是“接一个现成 shader 包就结束”,而是:
- 拥有自己的材质资源模型
- 拥有自己的渲染配置抽象
- 逐步演进为类 Unity URP 的可控渲染管线
因此必须把两层分清楚:
### 第一层MetaCore 材质系统
由 MetaCore 自己定义:
- 材质资源结构
- 参数命名与参数槽位
- 贴图槽定义
- 默认材质类型
- 材质序列化与资源管理
### 第二层:第一版 shader / render backend
当前先借助:
- `panda3d-simplepbr`
以后可以逐步替换为:
- MetaCore 自己的 render pipeline
- 更像 Unity URP 的 pass / feature / renderer 组织
## 第一阶段推荐落地方式
### 1. 先定义 MetaCore 自己的材质资源模型
不要先把材质资源直接设计成 `simplepbr` 参数表。
第一阶段就应当有 MetaCore 自己的材质抽象层。
最低应包含:
- `MaterialType`
- `BaseColor`
- `BaseColorTexture`
- `NormalTexture`
- `Metallic`
- `Roughness`
- `MetallicRoughnessTexture`
- `AoTexture`
- `EmissiveColor`
- `EmissiveTexture`
- `DoubleSided`
- `AlphaMode`
这层定义的是“MetaCore 材质是什么”不是“simplepbr 怎么用”。
### 2. simplepbr 只做第一版 shader 映射
也就是:
- MetaCore 材质参数
-> 映射到 Panda3D / simplepbr 需要的参数
这样后面如果你替换渲染后端:
- 资源不需要全改
- 编辑器也不需要推翻
### 3. 优先保证编辑器和运行时一致性
第一阶段不要追求特效广度,先保证:
- 编辑器里看到的材质结果
- Player 里看到的材质结果
尽量一致。
对工业项目来说,这比“先上很多高级效果”更重要。
## 第一阶段材质系统必须支持的能力
### P0
- 基础 PBR 材质资源
- BaseColor
- BaseColorTexture
- NormalTexture
- Metallic / Roughness
- Emissive
- 材质资源保存与加载
- 材质复用
- 材质在场景对象上的指派
### P1
- AO 贴图
- Alpha 模式
- 双面材质
- 基础材质实例工作流
### P2
- 更高级的渲染 feature
- 后处理
- 特效扩展
- 更完整的 shadow / transparency 组织
## 第一阶段光照建议
基于当前阶段,先把这几个做稳:
- Directional Light
- Point Light
- Spot Light
- 基础阴影
- 基础环境光 / IBL
重点不是参数数量,而是:
- 稳定
- 一致
- 可编辑
- 可序列化
## 与 M3 的关系
这个选型属于:
**M3 场景编辑、材质与光照工作流**
它的作用是让 MetaCore 在这一阶段具备真正的材质生产力,而不是继续停留在“对象能显示颜色”的水平。
所以这条线的优先级:
- 明显高于继续扩 RuntimeData
- 明显高于继续加更多行业 adapter
- 应该和模型导入、层级编辑并列为引擎基础主线
## 推荐实现顺序
建议按下面顺序推进:
1. 定义 MetaCore 材质资源结构
2. 建立材质资源持久化
3. 建立材质到 simplepbr 参数的映射
4. 打通编辑器材质编辑入口
5. 打通场景对象材质指派
6. 验证编辑器与 Player 一致性
7. 再考虑材质实例、更多贴图槽和更丰富 feature
## 第一阶段明确不要做的事
这些都属于以后,不应在当前阶段过早展开:
- 完整的类 URP 自定义 render feature 体系
- 大而全的后处理系统
- 复杂透明与特效管线
- 完整 shader graph
- 面向所有项目类型的通用渲染框架
## 长期方向
长期方向应该明确为:
**MetaCore 第一阶段借助 `panda3d-simplepbr` 跑通基础 PBR 材质工作流,后续逐步演进为 MetaCore 自己的类 URP 渲染管线。**
这句话同时保证了:
- 当前可执行
- 中期可演进
- 长期不被第三方实现细节绑死
## 最终建议
当前最好的策略不是:
- 直接做 URP
- 也不是完全依附 `simplepbr`
而是:
**MetaCore 自己拥有材质系统,第一版渲染后端借力 `panda3d-simplepbr`。**
这是第一阶段最合理、风险最低、推进速度最快的选型。