5.6 KiB
5.6 KiB
Asset
命名空间: XCEngine::Resources
类型: submodule
描述: 项目资产身份、artifact 缓存、导入服务、热路径索引与运行时资源加载共同组成的资源基础设施模块。
模块概述
当前 Core/Asset 已经不是单纯的“按路径加载资源”接口,而是可以分成三层来看:
- AssetDatabase
负责扫描项目
Assets、维护.meta与 source/artifact 快照,并在需要时把 source asset 导入到Library/Artifacts/... - AssetImportService + ProjectAssetIndex
负责把
AssetDatabase包装成线程安全服务,并导出供热路径使用的 path/GUID 查询快照 - ResourceManager
负责运行时加载、缓存、句柄与 loader 分发;当设置了项目根目录后,它会先经
AssetImportService准备 artifact,再把可直接加载的路径交给具体 loader
真实链路大致如下:
Assets/... source files
-> AssetDatabase
-> AssetImportService
-> ProjectAssetIndex snapshot
-> ResourceManager
-> concrete loader / runtime resource
当前导入与 artifact 覆盖
按当前 AssetDatabase::GetImporterNameForPath() 与导入实现,已经明确落地的项目资产类型包括:
TextureImporter->Texture->main.xctexMaterialImporter->Material->main.xcmatModelImporter->Model->main.xcmodelShaderImporter->Shader->main.xcshaderVolumeFieldImporter->VolumeField->main.xcvol
其中模型导入已经不再把“模型文件 = 单个 mesh artifact”简单等同处理。当前实现会:
- 产出一个主模型 artifact
main.xcmodel - 额外生成
mesh_<n>.xcmesh - 额外生成
material_<n>.xcmat - 必要时生成
texture_<n>.xctex
这说明模型系统已经从“把导入模型直接压扁成一个 Mesh”演进到“保留层级、mesh 绑定和材质绑定”的结构化资源。
资源类型与磁盘契约的新变化
最近这轮源码改动里,资产基础层又向前走了一步:
- ResourceTypes 新增了
Model与GaussianSplat - ArtifactFormats 新增了
Model与GaussianSplat的 artifact 结构定义 - VolumeField 新增了 CreateOwned,让 loader 可以把已读入的 payload 直接转移给运行时资源
需要注意的是,GaussianSplat 目前已经有资源类型和 artifact 结构契约,但我在本轮审查到的 AssetDatabase 路径里还没有看到公开的 GaussianSplat importer 入口。也就是说,契约层已经先建立,导入链路仍在继续建设。
设计要点
- 把“项目资产身份与导入缓存”和“运行时资源实例”拆层,避免
ResourceManager直接承担.meta、GUID 和磁盘 artifact 细节 - 用
AssetImportService + ProjectAssetIndex分离线程同步和热路径查询 - 让
ArtifactFormats与ResourceTypes作为稳定契约层,支持上层先扩展资源类型,再逐步补齐 importer、loader 与编辑器流程
这种先稳定契约、再逐步铺满各条生产链路的做法,是商业级引擎重构里很典型的推进方式。
当前边界
- 并不是所有
ResourceType都已经有完整的项目导入器 GaussianSplat已进入类型与 artifact 契约层,但公开导入路径仍未在这轮代码里完全接起ResourceManager仍会在同步加载路径里触发按需导入,后台导入队列与文件监听闭环还不是这一层的重点
头文件
- ArtifactFormats -
ArtifactFormats.h - AssetDatabase -
AssetDatabase.h - AssetGUID -
AssetGUID.h - AssetImportService -
AssetImportService.h - AssetRef -
AssetRef.h - AsyncLoader -
AsyncLoader.h - ImportSettings -
ImportSettings.h - IResource -
IResource.h - ProjectAssetIndex -
ProjectAssetIndex.h - ResourceCache -
ResourceCache.h - ResourceDependencyGraph -
ResourceDependencyGraph.h - ResourceHandle -
ResourceHandle.h - ResourceManager -
ResourceManager.h - ResourceTypes -
ResourceTypes.h
推荐阅读顺序
- 先读 AssetGUID 和 AssetRef,理解项目资产的身份与引用契约
- 再读 ResourceTypes 和 ArtifactFormats,理解资源类型与磁盘格式
- 接着读 AssetDatabase,理解 source asset 如何变成 artifact
- 然后读 AssetImportService 和 ProjectAssetIndex,理解服务层和热路径索引
- 最后读 ResourceManager 与相关 loader,理解运行时如何消费这些 artifact