MetaCore/PLAN.md

6.7 KiB
Raw Blame History

MetaCore 最终开工计划

摘要

  • D:\MetaCore 新建全新纯 C++ 工程,完全不继承 EG 项目文件格式,也不做 EG 自动导入。
  • 对外目标:编辑器核心功能、布局逻辑、操作路径对齐现有 EG对内目标彻底模块化、职责清晰、修正旧项目中的耦合和不完整逻辑。
  • UI 职责固定为:ImGui + ImGuizmo 仅用于编辑器与开发工具,RmlUi 仅用于运行时/玩家界面。
  • 渲染固定为Panda3D 底层后端,simplepbr 只复用 shader 源码与参数语义MetaCore 用 C++ 重写 shader 调用、材质系统和 pass。

技术基线

  • 语言与构建:C++20CMakePresetsVS2022vcpkg
  • 底层后端:Panda3D 1.10.16 作为 v1 基线,后续升级 1.11
  • 编辑器 UIDear ImGui docking + ImGuizmo
  • 运行时 UIRmlUi
  • 渲染MetaCore 自研 MetaRendershader 来源参考 simplepbr
  • 数据格式JSON + .meta 资源描述
  • 首版不做脚本系统、VR、Prefab 工作流、完整打包链路、URP 级渲染

工程结构

  • MetaCore/
  • MetaCore/foundation日志、配置、GUID、文件系统、事件、任务、序列化辅助
  • MetaCore/platform/panda窗口、输入、模型纹理加载、Panda 节点适配、shader 绑定、渲染上下文
  • MetaCore/engine/assets:资产索引、.meta、依赖、导入缓存
  • MetaCore/engine/sceneScene、层级、实体、组件、场景保存加载
  • MetaCore/engine/renderShaderProgramShaderVariantKeyMaterialDescriptorMaterialInstance、各类 render pass
  • MetaCore/engine/runtime_uiRmlUi 文档、输入、字体、纹理、预览桥接
  • MetaCore/engine/editor_core选择、Gizmo 状态、命令栈、撤销重做、Inspector 数据模型、脏标记
  • MetaEditor/ImGui 编辑器外壳、菜单、Docking、各面板
  • MetaPlayer/:运行时播放器
  • third_party/simplepbr-shaders/:镜像 simplepbr.vert/.fragshadow.vert/.fragskybox.vert/.fragpost.verttonemap.frag 及许可说明

核心职责边界

  • ImGui菜单栏、Hierarchy、Inspector、Project/Assets、Console、Scene View 工具栏、调试工具、材质编辑器、RmlUi 资源编辑器/预览器
  • ImGuizmo视口中的平移/旋转/缩放操控;不负责命令记录和业务状态
  • RmlUi运行时主菜单、HUD、背包、任务、设置、弹窗、加载界面等玩家 UI
  • MetaCore 服务层:负责“改什么、怎么存、怎么撤销重做”,不让 UI 直接操作底层数据
  • Panda3D仅作为内部后端不出现在公共 API、项目 schema、用户术语里

域模型与接口

  • 核心对象:ProjectSceneEntityIdSceneObjectHandleAssetId
  • 首版组件:TransformComponentMeshRendererComponentLightComponentCameraComponentUIDocumentComponentCollisionComponentEditorMetadataComponent
  • 核心服务:ProjectServiceSceneServiceAssetServiceEditorLayoutServiceSelectionServiceTransformGizmoServiceCommandServiceViewportServiceInspectorService
  • 渲染接口:IMetaRenderBackendShaderProgramMaterialInstanceFrameUniformsLightUniformsTonemapSettings
  • 首版预留不交付:PrefabAsset/模板化接口、未来脚本挂载接口

编辑器交付范围

  • 布局与职责对齐现有 EG顶部菜单、左侧层级树、资源面板、中心视口、右侧属性、底部控制台、工具栏、默认 Docking
  • 交互对齐现有 EG创建/删除/重命名、选择高亮、F 聚焦、W/E/R、局部/世界切换、吸附、撤销重做、项目与场景保存加载
  • 实现策略:外部体验尽量一致,内部完全重构;不迁移 EG 旧 Gizmo不复用 EG 混杂管理器结构
  • 允许修正旧项目中的明显错误、状态不同步、生命周期缺失和脏逻辑

渲染实现

  • 使用 simplepbr shader 源码,但不使用其 Python Pipeline
  • C++ 层负责 shader define 组合、材质参数、贴图槽、灯光数组、阴影输入、天空盒、后处理、色调映射
  • v1 pass 固定为:ShadowPassMainPbrPassSkyboxPassTonemapPass
  • v1 能力固定为:基础 PBR、法线贴图、发光、环境光、点光/方向光/聚光、简单阴影、天空盒、色调映射
  • IBL 与 URP 风格渲染只预留接口,不在 v1 做完整实现

数据与项目格式

  • 项目文件:MetaCore.project.json
  • 场景文件:Scenes/*.mcscene.json
  • 资源目录:Assets/ModelsAssets/TexturesAssets/AudioAssets/UIAssets/Materials
  • 缓存目录:Library/AssetDB.json、缩略图缓存、导入缓存、布局缓存
  • 每个资源配套 .meta
  • 场景数据、编辑器布局、运行时缓存严格分离,禁止把运行时状态写回场景对象

实施顺序

  1. 建立仓库、CMake、第三方依赖、基础目录和空应用启动骨架
  2. 完成 foundationplatform/panda,确保窗口、输入、相机、基础场景显示正常
  3. 完成 engine/sceneengine/assets,跑通新建项目、新建场景、保存重开
  4. 接入 ImGui docking搭建编辑器外壳与固定面板布局
  5. 接入 ImGuizmo完成选择、变换、命令栈、撤销重做
  6. 完成 MetaRender 与 simplepbr shader C++ 调用链
  7. 完成 Inspector、资源面板、Hierarchy 与视口联动
  8. 接入 RmlUi 运行时显示与编辑器内预览
  9. 做稳定性补齐、布局恢复、错误处理、测试与文档

测试与验收

  • 单元测试:项目/场景 schema、组件增删改、命令栈、资产索引、shader 参数绑定
  • 集成测试新建项目、保存重开、Hierarchy 与 Inspector 联动、Gizmo 变换持久化、布局恢复、RmlUi 文档加载
  • 验收标准:
    • 能用 MetaEditor 完成现有 EG 的核心编辑流程
    • 能稳定创建全新 MetaCore 项目并反复保存/重开
    • MetaPlayer 能正确运行场景并显示 RmlUi
    • 代码中不存在新的 God Object 和跨层硬耦合入口

已锁定默认

  • 全项目纯 C++
  • 不导入 EG 项目,只做全新重构
  • ImGui 只做编辑器,RmlUi 只做运行时 UI
  • ImGuizmo 取代 EG 旧 Gizmo
  • 功能参考 Unity但不高仿 Unity 命名
  • 首版只预留 Prefab 与脚本接口,不交付完整功能
  • Panda3D 先用 1.10.16 起步,后续再升 1.11

参考基线