当需要将资产存储系统集成到 USD 中,特别是当资产存储在非文件系统如数据库中时,需要利用 USD 的 Ar (Asset Resolution) 机制。这涉及到实现自定义的 `ArResolver` 接口,并正确配置 URI 方案。
**实现自定义 ArResolver 子类**
`ArResolver` 是处理资产操作的核心接口。为了支持数据库等自定义存储系统,用户需要创建 `ArResolver` 的子类。这个自定义的子类负责解释和处理特定格式的资产标识符,并实现从数据库读取数据的逻辑。在自定义的解析器实现文件(.cpp)中,需要使用 `AR_DEFINE_RESOLVER` 宏来声明该子类为一个解析器。
**配置 URI 方案**
对于处理特定 URI 方案(如 `my_db://...`)的解析器,需要将其注册为 URI Resolver。这需要在插件的 `plugInfo.json` 文件中完成。具体做法是在子类的类型定义下,添加一个 `uriSchemes` 键,并列出该解析器支持的所有 URI 方案。
**确保 resolved path 的可用性**
在进行资产路径解析时,`ArResolver` 的一个关键职责是返回一个“已解析的路径”(resolved path)。当使用解析器上下文(Resolver Contexts)时,例如使用 `ArDefaultResolverContext` 来设置搜索路径,解析器可能会根据当前上下文生成一个特定的已解析路径。然而,重要的是要确保这个返回的已解析路径在下游客户端或外部库使用时,即使这些客户端没有绑定任何上下文信息,依然是可用的。因此,任何在解析过程中引入的上下文信息,都必须被考虑并包含到最终的已解析路径中,以保证其在无上下文环境下的可移植性。
总结来说,集成数据库资产系统需要:1. 编写继承自 `ArResolver` 的自定义子类;2. 在 `plugInfo.json` 中声明该子类并指定其处理的 `uriSchemes`;3. 在处理路径时,确保返回的已解析路径是独立于任何特定解析器上下文的。