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

5.2 KiB
Raw Blame History

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

这是第一阶段最合理、风险最低、推进速度最快的选型。