## 概述 *levels.deps* 工具提供了两个日志,它们对于跟踪资产和纹理依赖关系至关重要: 1. **纹理到资产依赖关系日志**。此日志显示哪些资产正在使用特定纹理。利用此信息,您可以精确识别哪些资源需要删除纹理,以确保它不再出现在某个位置(或者相反,确定应从某个位置删除哪些资源)。 2. **资源到纹理依赖关系日志**。此日志标识特定资源使用哪些纹理。它还可以帮助您确定纹理是由特定资源独占使用,还是在多个资源之间共享。 此外,此日志还显示每个资产的顶点缓冲区,以及地图的全局缓冲区。 ## 用法 所有项目的使用过程都是一致的: 1. 浏览到 `/tools/dagor3_cdk/util64/` 目录。 2. 运行相应的批处理文件。 3. 等待工具处理所有地图。 4. 处理完成后,导航到输出目录: `levels.deps/`. 5. 打开所需映射的.deps`文件以访问两种类型的日志: - **纹理到资产依赖关系日志** - **资产到纹理依赖关系日志** ### 纹理到资产依赖关系日志 这是文件中的第一个日志,它指示哪些资源正在使用特定纹理。 日志格式通常如下所示: ```text [texture size] texture name <- asset(s) ``` **示例:** ```text referenced 752 DDSx (4 root, legend: [WxH memSz] TEX <- RES...): [ 256x256 85K] african_fabric_cover_d_tex_d* <- debris_clothes_f; [ 256x256 85K] african_fabric_cover_h_tex_d* <- debris_clothes_e; [ 256x256 85K] african_fabric_cover_tex_n* <- debris_clothes_e; debris_clothes_f; ......................... total 874M for 752 texture(s) ``` ### 资产到纹理依赖关系日志 这是文件中的第二个日志,它提供以下信息: - 特定资源使用哪些纹理。 - 这些纹理是该资产独有的,还是在多个资产之间共享的。 - 每个资产的顶点缓冲区和地图的全局顶点缓冲区。 日志格式通常如下所示: ```text [asset vertex buffer + unique texture size] asset name -> unique textures; shared textures; ``` **示例:** ```text referenced 3428 resources (1704 root, legend: [resVB + uniqueTex] RES -> unique{TEX...}; shared{TEX...}): * [ 1345K+ 0K] 88mm_flak_36_canon_a -> shared[2]={ flak_36_set_tex_d*; flak_36_set_tex_n*; }; 88mm_flak_36_canon_a_collision * [ 1345K+ 0K] 88mm_flak_36_canon_b -> shared[2]={ flak_36_set_tex_d*; flak_36_set_tex_n*; }; 88mm_flak_36_canon_b_collision * [ 71K+ 170K] wooden_power_pole_a -> unique[2]={ insulator_tex_d*; insulator_tex_n*; }; shared[7]={ decal_modulate_leaks_bottom_tex_m*;}; ......................... total 322.4M (VB/IB) for 3428 resource(s) // total vertex buffer for the location. ``` 由于顶点缓冲区数据,此日志特别有用,这有助于识别纹理通道过多的潜在问题(例如,如果顶点缓冲区大小非常大)。 ## 工具内部结构 了解工具的内部结构对于有效使用至关重要。 ### 文件结构 该工具由以下组件组成: - `dbldUtil-dev.exe`: 位于 `/tools/dagor3_cdk/util/`。 - 批处理文件 (`build_deps.cmd`): 位于`//develop/levels.deps/`。 - 配置文件(`game_env.blk`):与批处理文件位于同一目录中。 虽然不需要修改可执行文件,但您可能需要调整批处理文件。 ### 批处理文件 批处理文件由执行特定任务的命令行组成。 **例:** ```text @for %%f in (..\..\game\content\\levels\*.bin) do ..\..\..\tools\dagor3_cdk\util\dbldUtil-dev.exe PC %%f -deps:game_env-cr.blk >\%%~nxf.deps ``` 此命令的含义是: - `@for %%f in (..\..\game\content\\levels\*.bin)`: 对于指定目录中扩展名为`.bin`的所有文件, - `do ..\..\..\tools\dagor3_cdk\util\dbldUtil-dev.exe PC %%f -deps:game_env-cr.blk >\%%~nxf.deps`: 在 PC 上以 配置运行该工具,并将结果输出到`` 目录,文件名相同,但扩展名为`.deps`。 如果不希望该工具处理所有二进制文件,则可以修改批处理文件以将特定文件作为目标。 例如,要处理特定文件: ```text ..\..\..\tools\dagor3_cdk\util\dbldUtil-dev.exe PC ..\..\game\content\\levels\cr_menu_background.bin -deps:game_env-cr.blk >\cr_menu_background.bin.deps ``` 此命令指示该工具: - 处理特定文件(`cr_menu_background.bin`), - 使用`` 配置, - 将结果输出到指定的目录和文件。 ### 工具配置 如果您在使用该工具时遇到任何错误,则必须检查配置文件。 `game_env.blk`文件定义了 “工作目录” ,至关重要的是,定义了映射正常运行所需的 [包](../resource-building/resource_building.md#what-is-a-package) 。因此,如果该工具未处理您的地图,请不要担心。检查配置文件中是否列出了映射所依赖的所有软件包,并仔细阅读错误日志。