内容工具链:Hammer、地图编译器与资源编译
运行时消费的地图、模型、纹理、Shader 都由离线工具生成。仓库包含这些工具的大部分源码,但不包含任何源资源或编译产物,因此本页描述的是工具的入口与数据流,而不是一条可直接运行的流水线。
相关页面:地图加载与碰撞 · 材质系统 · 模型、动画与粒子 · 构建与物理组织
相关源码文件#
- 编辑器:
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. 数据流#
证据(入口函数):
| 工具 | 入口 | 关键步骤 | 证据 |
|---|---|---|---|
| Hammer | CHammer 以 INTERFACEVERSION_HAMMER 暴露;启动器 -edit 模式加载 hammer_dll,主循环每帧驱动 Hammer | — | hammer/hammer.cpp:137、launcher/launcher.cpp:849-858、engine/sys_dll2.cpp:1160-1163 |
| vbsp | main → RunVBSP | 加载物理 DLL 与表面属性;-onlyents/-onlyprops 只改实体或道具;常规路径 LoadMapFile → SetModelNumbers → ProcessModels | utils/vbsp/vbsp.cpp:1750、utils/vbsp/vbsp.cpp:1161、utils/vbsp/vbsp.cpp:1602-1603、utils/vbsp/vbsp.cpp:1643-1727 |
| vvis | main → RunVVis | LoadBSPFile → LoadPortals → CalcVis + CalcPAS + 雾体可见性 → WriteBSPFile;另有 trace 调试模式 | utils/vvis/vvis.cpp:1213、utils/vvis/vvis.cpp:1075、utils/vvis/vvis.cpp:1127-1192 |
| vrad | VRAD_Main → RunVRAD | VRAD_LoadBSP → 非仅细节/静态道具时 RadWorld_Go → VRAD_ComputeOtherLighting → VRAD_Finish | utils/vrad/vrad.cpp:3077、utils/vrad/vrad.cpp:3037-3074 |
| vtex | CVTex::VTex | 纹理编译 | utils/vtex/vtex.cpp:3683、utils/vtex/vtex.cpp:3750 |
| studiomdl | main / CStudioMDLApp::Main | 模型编译 | utils/studiomdl/studiomdl.cpp:11756、utils/studiomdl/studiomdl.cpp:12245 |
| shadercompile | ShaderCompile_Main | Shader 编译 | 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 个.fxcShader 源,但 shadercompile 的组合展开与分发流程本次未追踪。fgd实体定义、.qc模型脚本、纹理源等输入文件不在仓库中。- 本页与子页均未运行任何工具。