226 lines
5.2 KiB
Markdown
226 lines
5.2 KiB
Markdown
# 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`。**
|
||
|
||
这是第一阶段最合理、风险最低、推进速度最快的选型。
|