Files
XCEngine/docs/api/XCEngine/Core/Asset/Asset.md

5.6 KiB
Raw Blame History

Asset

命名空间: XCEngine::Resources

类型: submodule

描述: 项目资产身份、artifact 缓存、导入服务、热路径索引与运行时资源加载共同组成的资源基础设施模块。

模块概述

当前 Core/Asset 已经不是单纯的“按路径加载资源”接口,而是可以分成三层来看:

  1. AssetDatabase 负责扫描项目 Assets、维护 .meta 与 source/artifact 快照,并在需要时把 source asset 导入到 Library/Artifacts/...
  2. AssetImportService + ProjectAssetIndex 负责把 AssetDatabase 包装成线程安全服务,并导出供热路径使用的 path/GUID 查询快照
  3. ResourceManager 负责运行时加载、缓存、句柄与 loader 分发;当设置了项目根目录后,它会先经 AssetImportService 准备 artifact再把可直接加载的路径交给具体 loader

真实链路大致如下:

Assets/... source files
-> AssetDatabase
-> AssetImportService
-> ProjectAssetIndex snapshot
-> ResourceManager
-> concrete loader / runtime resource

当前导入与 artifact 覆盖

按当前 AssetDatabase::GetImporterNameForPath() 与导入实现,已经明确落地的项目资产类型包括:

  • TextureImporter -> Texture -> main.xctex
  • MaterialImporter -> Material -> main.xcmat
  • ModelImporter -> Model -> main.xcmodel
  • ShaderImporter -> Shader -> main.xcshader
  • VolumeFieldImporter -> VolumeField -> main.xcvol

其中模型导入已经不再把“模型文件 = 单个 mesh artifact”简单等同处理。当前实现会

  • 产出一个主模型 artifact main.xcmodel
  • 额外生成 mesh_<n>.xcmesh
  • 额外生成 material_<n>.xcmat
  • 必要时生成 texture_<n>.xctex

这说明模型系统已经从“把导入模型直接压扁成一个 Mesh”演进到“保留层级、mesh 绑定和材质绑定”的结构化资源。

资源类型与磁盘契约的新变化

最近这轮源码改动里,资产基础层又向前走了一步:

需要注意的是,GaussianSplat 目前已经有资源类型和 artifact 结构契约,但我在本轮审查到的 AssetDatabase 路径里还没有看到公开的 GaussianSplat importer 入口。也就是说,契约层已经先建立,导入链路仍在继续建设。

设计要点

  • 把“项目资产身份与导入缓存”和“运行时资源实例”拆层,避免 ResourceManager 直接承担 .meta、GUID 和磁盘 artifact 细节
  • AssetImportService + ProjectAssetIndex 分离线程同步和热路径查询
  • ArtifactFormatsResourceTypes 作为稳定契约层,支持上层先扩展资源类型,再逐步补齐 importer、loader 与编辑器流程

这种先稳定契约、再逐步铺满各条生产链路的做法,是商业级引擎重构里很典型的推进方式。

当前边界

  • 并不是所有 ResourceType 都已经有完整的项目导入器
  • GaussianSplat 已进入类型与 artifact 契约层,但公开导入路径仍未在这轮代码里完全接起
  • ResourceManager 仍会在同步加载路径里触发按需导入,后台导入队列与文件监听闭环还不是这一层的重点

头文件

推荐阅读顺序

  1. 先读 AssetGUIDAssetRef,理解项目资产的身份与引用契约
  2. 再读 ResourceTypesArtifactFormats,理解资源类型与磁盘格式
  3. 接着读 AssetDatabase,理解 source asset 如何变成 artifact
  4. 然后读 AssetImportServiceProjectAssetIndex,理解服务层和热路径索引
  5. 最后读 ResourceManager 与相关 loader理解运行时如何消费这些 artifact

相关指南

相关文档