# 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 只是当前主渲染后端和材质落地目标,不是编辑期资产结构本身。** 换句话说: ```text 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。 ## 第一阶段材质资源模型 第一阶段最低应包含: - `MaterialType` - `BaseColor` - `BaseColorTexture` - `NormalTexture` - `Metallic` - `Roughness` - `MetallicRoughnessTexture` - `AoTexture` - `EmissiveColor` - `EmissiveTexture` - `DoubleSided` - `AlphaMode` - `AlphaCutoff` 这些字段属于 MetaCore 材质语义,不属于 Filament 内部实现细节。 ## 与 glTF / gltfio 的关系 当前模型导入主线是 glTF / GLB / gltfio。导入链路应尽量保持: ```text 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 映射层负责显示”。