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

6.0 KiB
Raw Blame History

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 只是当前主渲染后端和材质落地目标,不是编辑期资产结构本身。

换句话说:

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。导入链路应尽量保持

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 映射层负责显示”。