Split mesh artifacts into material and texture artifacts
This commit is contained in:
@@ -14,8 +14,8 @@
|
||||
| 阶段 3:TextureImporter | 已完成 | 已支持纹理导入为 `xctex`,运行时可直接从 artifact 读取,不再总是解码原始图片。 |
|
||||
| 阶段 4:ModelImporter | 已完成(初版) | 已支持模型导入为 `xcmesh`,并缓存模型关联纹理的 `xctex`;`ResourceManager` 会优先走 artifact。 |
|
||||
| 阶段 5:Material 系统 lazy 引用化 | 部分完成 | 已补齐材质序列化所需的 tag/property/texture binding 访问接口,但仍是 eager 贴图加载,未完成真正的延迟纹理解析。 |
|
||||
| 阶段 6:Scene / Component 引用迁移 | 部分完成 | `MeshFilterComponent` 与 `MeshRendererComponent` 已开始双写路径和 `AssetRef`,可兼容旧格式读取。Scene 全量格式迁移尚未完成。 |
|
||||
| 阶段 7:异步导入与异步加载 | 未开始 | 当前导入与大资源加载仍发生在主线程,是仍会卡 editor 的直接原因。 |
|
||||
| 阶段 6:Scene / Component 引用迁移 | 部分完成 | `MeshFilterComponent` 与 `MeshRendererComponent` 已开始双写路径和 `AssetRef`,并已在 editor 场景打开路径接入延迟恢复。Scene 全量格式迁移尚未完成。 |
|
||||
| 阶段 7:异步导入与异步加载 | 部分完成 | `AsyncLoader` 已具备真实 worker 线程与主线程 completion pump;editor 打开 scene 时已改为 deferred restore,但通用导入队列、placeholder/UI、全资源类型异步化尚未完成。 |
|
||||
| 阶段 8:清理、GC、工具与可视化 | 未开始 | 还没有 Reimport All、依赖图查看、orphan artifact 清理、导入面板等工具。 |
|
||||
|
||||
### 0.2 本轮已经落地的具体内容
|
||||
@@ -25,18 +25,21 @@
|
||||
- `TextureLoader` 已支持 `xctex`,`MeshLoader` 已支持 `xcmesh`,从而把“导入”和“运行时加载”从代码路径上拆开。
|
||||
- `ProjectManager` 已支持忽略 `.meta` 文件显示,并在资源删除、移动、重命名时携带 `.meta` sidecar。
|
||||
- `MeshFilterComponent` 与 `MeshRendererComponent` 已开始从纯路径引用迁到 `AssetRef`,目前是“旧路径兼容 + 新引用双写”模式。
|
||||
- `AsyncLoader` 已从空壳改为真实后台加载器,支持 worker thread、完成队列与主线程回调泵。
|
||||
- editor 的 `SceneManager::LoadScene(...)` / `RestoreSceneSnapshot(...)` 已接入 deferred scene load scope,scene 打开时不再在组件反序列化阶段同步恢复 mesh/material。
|
||||
- `EditorWorkspace::Update(...)` 已开始逐帧 pump async completion,`MeshFilterComponent` / `MeshRendererComponent` 现在会在资源真正完成后再接管 handle。
|
||||
- 已为纹理 artifact、模型 artifact、组件 `AssetRef` 序列化补充回归测试。
|
||||
|
||||
### 0.3 已验证结果
|
||||
|
||||
- `Debug` 下 `texture_tests.exe` 已通过,覆盖 `.meta` 自动生成、`Library` 产物生成、二次 `EnsureArtifact` 不重复导入、按 `AssetRef` 再加载纹理。
|
||||
- `Debug` 下 `components_tests.exe` 已通过,覆盖 `MeshRendererComponent` 的 `AssetRef` 双写序列化/反序列化,以及项目内材质按 `AssetRef` 恢复。
|
||||
- `Debug` 下 `components_tests.exe` 已通过,覆盖 `MeshRendererComponent` 的 `AssetRef` 双写序列化/反序列化,以及项目内材质按 `AssetRef` 的 deferred async 恢复。
|
||||
- `Release` 下 `mesh_tests.exe` 已通过,覆盖 `obj + mtl + 贴图` 导入为 `xcmesh + xctex`、二次导入命中缓存、按 `AssetRef` 再加载模型。
|
||||
- `Release` 下 `XCEditor` 已构建通过。
|
||||
|
||||
### 0.4 当前版本仍然存在的限制
|
||||
|
||||
- 首次打开未缓存或失效的 `obj` 资源时,仍会在主线程同步执行导入,editor 会明显卡住。
|
||||
- editor 场景打开阶段虽然已经不再在组件反序列化里同步恢复大资源,但首次真正需要该资源时,若 artifact 缺失或失效,后台任务仍可能较重,且缺少显式进度/UI。
|
||||
- 即使已经命中 artifact,当前模型 artifact 读取后仍会立即把关联贴图一起加载到内存,尚未做到材质纹理 lazy load。
|
||||
- 首帧渲染阶段仍会发生 GPU 资源创建与上传,这部分也会带来一次性卡顿。
|
||||
- `MaterialImporter` 还没有形成完整的独立 artifact 格式,材质系统仍处于过渡状态。
|
||||
@@ -1447,8 +1450,11 @@ editor/src/AssetPipeline/
|
||||
|
||||
当前状态:
|
||||
|
||||
- 未开始。
|
||||
- 这是当前 editor 仍会被大 `obj` 场景卡住的首要剩余任务。
|
||||
- 部分完成。
|
||||
- `AsyncLoader` 已具备真实 worker thread、pending/completed queue、主线程 completion callback pump。
|
||||
- editor `SceneManager` 已在 `LoadScene(...)` 与 `RestoreSceneSnapshot(...)` 路径启用 deferred scene load scope。
|
||||
- `MeshFilterComponent` 与 `MeshRendererComponent` 已支持“反序列化只恢复引用并提交异步请求,真正 handle 接管延后到完成回调之后”。
|
||||
- 仍未完成通用 import job 系统、统一 placeholder 状态、批量队列调度、更多资源类型的异步恢复,以及失败/进度 UI。
|
||||
|
||||
## 阶段 8:清理、GC、工具与可视化
|
||||
|
||||
|
||||
Reference in New Issue
Block a user