6.0 KiB
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 12:Windows 高性能目标。
- WebGPU:未来 B/S 和浏览器嵌入目标。
MetaCore 不应在第一阶段直接把业务逻辑写死到某个底层图形 API。
第一阶段材质资源模型
第一阶段最低应包含:
MaterialTypeBaseColorBaseColorTextureNormalTextureMetallicRoughnessMetallicRoughnessTextureAoTextureEmissiveColorEmissiveTextureDoubleSidedAlphaModeAlphaCutoff
这些字段属于 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 中形成可信闭环。
成功标准
第一阶段材质与渲染链路成立的标准:
- 导入一个 glTF / GLB 模型后,Mesh、Material、Texture 关系能进入 MetaCore 资产系统。
- 拖入场景后,Scene 中的 MeshRenderer 通过资源引用表达模型和材质。
- 保存、关闭、重新打开项目后,材质表现保持一致。
- 编辑器视口和 Player 中的 Filament 渲染结果一致到可接受程度。
- Cook 能追踪材质与贴图依赖,并生成运行时可消费的二进制资产。
- 材质资源本身不绑定 Filament 内部对象生命周期,可以在未来演进映射层。
设计底线
MetaCore 自己拥有材质系统,Filament 是当前主渲染后端。
不要把关系写反:
- 不是“Filament 材质参数直接等于 MetaCore 材质资产”。
- 也不是“glTF 临时解析对象直接等于场景材质”。
- 而是“MetaCore 资产系统吸收导入结果,再由 Filament 映射层负责显示”。