地图编译原理
![Icon-broom.png](/w/images/thumb/7/71/Icon-broom.png/32px-Icon-broom.png)
原帖许可(Source)。
简介
很多人根本不知道或不了解如何以及为什么Source的地图需要编译。有些人甚至不知道自己的地图"正在"编译。在这篇文章中,我将试着描述一个编辑器文件到一张可玩的地图的整个过程。虽然在编译过程的某些方面我会讲得深入些,但是请记住这不是一个教你如何编译的教程。它将帮助你理解发生了什么,而为什么其他事(像防止泄露)是重要的。
创建一张可玩的Source地图是从一个编辑器文件开始的。此文件包含所有的多边形数据(又名固体 ),实体 数据以及贴图 数据,这些定义了你完成的地图的外观和行为。所有的编辑器,基本上都要达到同样的目的---去定义一个地图是怎么出现的。这是你要理解的关键概念:所有的编辑器都是这样做的。它们并没有完成地图。他们所做的,只是给你一个方便的方式来为以后的过程准备多边形,光照,和实体数据。
一旦你已经在你的编辑器里建立了一个地图,并且已经将其保存到磁盘,你就会想要在Source里进行测试,来看看它是如何横空出世的。要确保你所有实体都正常工作,光照正确,而且没有坏的"固体"。在Hammer里,很多人都只是"运行(Run)"地图,在一段时间的"思考"之后,他们的计算机打开了半条命2,然后"砰"的一下将他们带到地图中。这个简单的事情,隐藏着许多复杂的操作和设定。
现在,问题的核心是,在那有时候奇慢无比的"思考时间"里,到底发生了什么?即便是一张中等大小的地图,大多数人都会注意到,在此期间他们的硬盘在疯狂地读取和写入数据。那么,你的计算机在做什么?是在编译你的地图!你的编辑器会调用一个脚本(.bat),然后做下面所有的事:
- 读取.vmf文件。
- 针对.vmf文件执行BSP 程序
- 针对新的.bsp文件执行VIS 程序
- 针对.bsp文件执行RAD 程序来添加光照信息
- 移动你新完成的.bsp到你的模组/maps目录
- 带参数执行游戏来运行你的地图
你可能会想:"该死的,原来有这么多事要做。一切都是为了什么?"。嗯,那就是我在这里要解释的东西。
编译过程概述
下面的图表显示了创建一个可玩的地图文件(.bsp)的全部过程。
<placeholder> .vmf > VBSP > 中间的 .bsp > VVIS > VRAD > 最终的 .bsp </placeholder>
编译工具
下表将很好地告诉你每一个工具做的事。描述将尽可能简单,因为任务的工具的执行涉及到一些复杂的数学运算,你作为一个地图制作者,还是需要懂一点的。只要你能明白什么工具是用来干什么的,这应该就足够了
工具 | 目的 |
VBSP | BSP工具的作用是转换.vmf文件数据到一个可使用的.bsp文件里,使游戏引擎可以读取。一旦BSP工具运行了,本质上地图是可以玩的,不过将有异常,它没有可见的矩阵,并且完全没有光照。这些关键的功能被应用于接下来的两个工具VIS和RAD。 |
VVIS | 这个工具根据地图的几何创建可见的矩阵。该矩阵决定了在游戏里,哪些多边形玩家可以看见,哪些可能看见,而哪些从给定的任何点都不能看见。至关重要的是, 这个工具运行在你创建的每一个.bsp上。如果它不运行,那么整个地图每时每刻都是可见的。但在所有的最简单的盒子型地图里,往往因为画面卡而导致地图不可玩。关于VIS更深入的信息可以在决定可见性 找到。 |
VRAD | RAD工具,或者叫光传递工具,负责生成和应用地图里的所有光照效果。上至实体光源和"天空",下到底层贴图光源,都是由这个工具处理。一个没有运行过RAD的.bsp将会完全漆黑,或者是全亮,这取决于视频模式或者控制台设定。这个工具通常是使编译速度变慢的罪魁祸首,因为它的任务需要处理大量的数据。关于RAD更深入的信息可以在RAD(技术性的) 找到。 |
编译管理器
哪种编译工具?
Hammer使用V社自己的编译工具。这些工具的名字前都存在一个'V'(例如vbsp.exe ,vvis.exe ,vrad.exe )。此外,亚当·麦克恩(Adam McKern)使用了一套新的Source编译工具(CSTBSP ,CSTVIS ,CSTRAD --详见(http://www.ammahls.com/ CST]),它拥有比默认工具更多的功能优化和选项。截至目前,CST没有任何比V社的工具更值得注意的改进,所以已经变得过时。
参见
- Source BSP文件格式 - 从技术角度看编译工具(从VMEX的作者和其他Source的工具)。