CD Code Digest Hub /CS:GO

内容工具链:Hammer、地图编译器与资源编译

7 分钟阅读 4 个章节 1 张图

运行时消费的地图、模型、纹理、Shader 都由离线工具生成。仓库包含这些工具的大部分源码,但不包含任何源资源或编译产物,因此本页描述的是工具的入口与数据流,而不是一条可直接运行的流水线。

相关页面:地图加载与碰撞 · 材质系统 · 模型、动画与粒子 · 构建与物理组织

子页面:地图编译器:vbsp、vvis、vrad

相关源码文件#

  • 编辑器:hammer/(569 个文件)、hammer/hammer.cpp、hammer_launcher/、fgdlib/
  • 地图编译:utils/vbsp/vbsp.cpp、utils/vvis/vvis.cpp、utils/vrad/vrad.cpp;vvis/vrad 的可执行入口是启动器 utils/vvis_launcher/vvis_launcher.cpp、utils/vrad_launcher/vrad_launcher.cpp
  • 资源编译:utils/vtex/vtex.cpp、utils/studiomdl/studiomdl.cpp、utils/shadercompile/shadercompile.cpp
  • 其它工具:utils/hlmv(模型查看器)、utils/hlfaceposer、tools/(pet 粒子编辑器、vmt 材质编辑器、commedit 解说编辑器、toolutils)

1. 数据流#

证据(入口函数):

工具入口关键步骤证据
HammerCHammer 以 INTERFACEVERSION_HAMMER 暴露;启动器 -edit 模式加载 hammer_dll,主循环每帧驱动 Hammer—hammer/hammer.cpp:137、launcher/launcher.cpp:849-858、engine/sys_dll2.cpp:1160-1163
vbspmain → RunVBSP加载物理 DLL 与表面属性;-onlyents/-onlyprops 只改实体或道具;常规路径 LoadMapFile → SetModelNumbers → ProcessModelsutils/vbsp/vbsp.cpp:1750、utils/vbsp/vbsp.cpp:1161、utils/vbsp/vbsp.cpp:1602-1603、utils/vbsp/vbsp.cpp:1643-1727
vvismain → RunVVisLoadBSPFile → LoadPortals → CalcVis + CalcPAS + 雾体可见性 → WriteBSPFile;另有 trace 调试模式utils/vvis/vvis.cpp:1213、utils/vvis/vvis.cpp:1075、utils/vvis/vvis.cpp:1127-1192
vradVRAD_Main → RunVRADVRAD_LoadBSP → 非仅细节/静态道具时 RadWorld_Go → VRAD_ComputeOtherLighting → VRAD_Finishutils/vrad/vrad.cpp:3077、utils/vrad/vrad.cpp:3037-3074
vtexCVTex::VTex纹理编译utils/vtex/vtex.cpp:3683、utils/vtex/vtex.cpp:3750
studiomdlmain / CStudioMDLApp::Main模型编译utils/studiomdl/studiomdl.cpp:11756、utils/studiomdl/studiomdl.cpp:12245
shadercompileShaderCompile_MainShader 编译utils/shadercompile/shadercompile.cpp:2458

vvis 与 vrad 实际编译为 DLL:启动器加载 vvis_dll.dll / vrad_dll.dll 后调用其导出接口的 main(vrad 启动器还支持 -both 依次以 LDR、HDR 运行两次):utils/vvis_launcher/vvis_launcher.cpp:48-74、utils/vrad_launcher/vrad_launcher.cpp:99-143。三个地图编译器各阶段的输入输出、写入的 BSP lump 以及运行时如何使用 PVS,详见 地图编译器。

2. 构建归属#

csgo_partner 组包含 hammer_dll、hammer_launcher、vbsp、vbspinfo、vvis_*、vrad_*、vtex_*、shadercompile_*、hlmv、pet、vmt、commedit、toolutils:vpc_scripts/groups.vgc:32-33、vpc_scripts/groups.vgc:69-85;studiomdl 不在该组(但出现在其它组):vpc_scripts/groups.vgc:661。utils/vmpi 只有头文件,分布式编译库以预编译的 lib/public/vmpi.lib 形式提供(本次文件检查)。

约束与边界#

  • vbsp/vvis/vrad 已在 地图编译器 展开到函数级阶段与 lump 映射;其中 CSG、分割面选择启发式、门户裁剪与辐射度传递的数学细节仍未逐行分析。
  • studiomdl、vtex、shadercompile 仍保持入口级:它们各自是独立的大型流水线(例如 studiomdl.cpp 约 1.27 万行)。仓库不含 .qc 与纹理源(git ls-files 检索为 0),无法用真实输入追踪 studiomdl/vtex;materialsystem/stdshaders 下有 256 个 .fxc Shader 源,但 shadercompile 的组合展开与分发流程本次未追踪。
  • fgd 实体定义、.qc 模型脚本、纹理源等输入文件不在仓库中。
  • 本页与子页均未运行任何工具。