动态背景

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)Русский (ru)中文 (zh)Translate (Translate)

动态背景 (Background maps) 是在进入游戏时出现的会动的 3D 背景画面. 这是已编译的 BSP 格式的文件, 就和标准的游戏关卡地图一样. 虽然所有的 MOD 都可以使用 动态背景, 但是它一般被用于像 Half-Life 2(en) 这样的单人游戏. 根据作者的意愿, 动态背景 可以根据玩家的游戏进度 (以章节为单位) 作出相应的改变, 玩过 HL2 的应该都理解吧.

构造 动态背景

动态背景应该以立体模型 (dioramas) 来构建. 地图中要展现的东西应该被限制于摄像机镜头之内, 超出摄像机镜头的任何东西除了耗费资源外无任何意义. 应该尽可能的构造最少的几何体与使用最少的材质贴图, 这样才能让地图更小, 读取更快.

开始创建一个 动态背景 地图:

  • 创建一个基本的几何体容纳您想要包含在动态背景中的所有东西. 不能有任何的裂痕 (leaks), 必须像其他标准的关卡地图一样是密闭的. 光照与材质都是必需的. 您也可以修改一个已有的关卡地图, 只需删除或隐藏在动态背景中不需要的部分. 所有不需要的成分 (elements) 都删了吧.
  • 添加 info_player_logo(en) (多人游戏) 或是 info_player_start(en) (单人游戏) 到地图中. 这个实体放在哪无关紧要, 只要包含在几何体的内部, 并且离地面不是太高, 玩家出生时不会摔死就可以了.
  • 添加一个 point_viewcontrol(en) 实体到地图中您想要摆放摄像机的地方. 命名 point_viewcontrol 以方便使用, (例如 "viewcontrol_background1" ).
  • 打开 point_viewcontrol 实体的属性 (ALT+ENTER), 切换到 flags 标签下, 去掉 Start at Player / Follow Player / Interruptable by Player 前面的勾, 打上 Freeze Player / Infinite Hold Time / Snap to goal angles / Make player non-solid 前的勾, 点 apply
  • 添加一个 info_target(en) 实体. 它的位置决定了 point_viewcontrol 摄像机将会指向的地方. 以与 point_viewcontrol 相似的方式命名 ( 例: "target_background1" ).
  • 选择 point_viewcontrol. 找到 Entity to look at 关键字, 将他的值指向您刚刚创建的 info_target 实体.
  • point_viewcontrol 应该在 动态背景 地图载入的时候被激活. 最简单的方法是使用 logic_auto(en) 实体. 在属性页的 Outputs 标签栏下面选择 add..., 在 My output 选择 OnMapSpawn, Targets entities named处指向 point_viewcontrol 实体, Via this input 选择 Enable, 点 apply.
  • 您也可以在 logic_auto 实体的 outputs 里面添加您想要在地图中展现的事件, 比如灯光闪烁, NPC(en) 匆匆走过, 或是播放声音 等等. 但是注意别弄得太复杂了, 不管怎么说, 动态背景应更多的考虑性能, 读取速度, 而不是把玩家的注意力从菜单转移到背景上去.
  • 保存, 编译您的地图. 如果您要替换已有的 Half-Life 2(en) 地图, 请看看下面的 替换 Half-Life 2 的动态背景 以保证名称正确.

测试 动态背景

测试动态背景地图, 请不要在运行游戏时直接加载这张地图. 应该在进入游戏之后, 调出 开发者控制台(en), 接着输入:

map_background <地图名称>

这里的 <地图名称> 就是您的动态背景的名称. 这样,您的地图就会被作为背景画面读取到游戏中.

测试完之后, 您可以回到编辑器完善它. 您也许也想要添加更多的细节, 改变摄相机的位置或摄相机的方向. 制需要重新编译, 再使用 map_background 命令来看看所做的改变. 一旦摄像机的位置确定下来, 尽最大努力来优化地图是一个不错的选择, 比如为那些摄像机看不到的表面涂上 toolsnodraw 材质. 再次重申, 我们的目的是让动态背景尽可能的小, 使其具有更佳的性能表现.

建议看看 maps\sdk_background.vmf 文件, 这是一个动态背景示例文件.


菜单背景图像

我们还需要为 动态背景 .BSP 制作一个背景图像. 这就是在您运行游戏之后, 动态背景加载中的时候显示的图像. 在 Half-Life 2 里, 这是一张模糊化的动态背景的截图 (制作的时候, 1280x 的图像 使用 30像素 的高斯模糊滤镜). 当 动态背景 .BSP 加载完成时, 屏幕将会从静态的图像渐变到实际的 3D 动态背景.

下面的两个文件是必需的:


<game directory>\materials\console\<map name>.vmt

<game directory>\materials\console\<map name>_widescreen.vmt

例如, 您制作了一个名称为 sdk_background.bsp 的动态背景, 您需要以下的文件:

hl2\materials\console\sdk_background.vmt

hl2\materials\console\sdk_background_widescreen.vmt

背景图像常常使用 1024x1024 分辨率的截图, 用图象编辑软件使其模糊化.

您可以在游戏中的 选项 -> 键盘 设置截图按键. 默认的按键为 F5, 并且以 .JPG 格式保存到 <游戏文件夹>\screenshots 目录下. 您也可以绑定一个按键到控制台的命令 screenshot , 这样将会以 .TGA 格式保存.

菜单背景图像的 .vmt 文件应该是这样的格式:

"UnlitGeneric"
{
	"$basetexture" "console/sdk_background"
	"$vertexcolor" 1
	"$vertexalpha" 1
	"$ignorez" 1
	"$no_fullbright" "1"
	"$nolod" "1"
}

至于怎样创建, 请看 材质的创建(en) 文档.

sdk_background 示例文件的默认材质位于:

\sourcesdk_content\hl2\materialsrc\console (for the source .TGAs)

\half-life 2\hl2\materials\console (for the .VMT and .VTF files).


MOD 中动态背景 与 章节的脚本操作

创建了一个修改过的动态背景之后, 为了能够正常被游戏读取, 并在适当的章节处展示, 它应当被插入到适当的脚本文件中.

这段描述了几个用来控制动态背景展现的文件.

hl2\scripts\ChapterBackgrounds.txt 文件将动态背景与游戏章节相关联. 它列出了游戏中所有的章节, 和当玩家进行到某章节后哪一个 BSP 文件应该被读取.

这里是 Half-life 2 的 ChapterBackgrounds.txt 文件:

"chapters"
{
	1	"background01"
	2	"background01"
	3	"background02"
	4	"background02"
	5	"background03"
	6	"background03"
	7	"background04"
	8	"background04"
	9	"background05"
	9a	"background05"
	10	"background06"
	11	"background06"
	12	"background07"
	13	"background07"
}

hl2\scripts\titles.txt 包含有章节的键值. 每一个章节都有自己的键值. 这些值被记录到 Hammer 编辑器 中 Map 菜单项下的 Map Properties 里面的 “Chapter Title Message” 的值里. 实际游戏中显示的文本是记录在各种语言的文件中, 就是这些文件:

hl2\resource\hl2_english.txt
hl2\resource\hl2_french.txt
hl2\resource\hl2_german.txt
...
hl2\resource\hl2_schinese.txt
...

这些文件用各种语言的文本记录了各个章节的名称. 在游戏中出现章节名称的时候就会显示这些文件里对应的文本.

测试 chapterbackgrounds.txt

当您把您的做的改变写入 chapterbackgrounds.txt 文件中的时候, 你可以使用控制台变量 sv_unlockchapters 测试您的动态背景. 这个变量控制着您已经玩穿了哪个章节, 只要把它的值设置为您想要查看章节序号, 您就可以看到对应的动态背景了.

选择查看哪一个 动态背景:

  1. 保存 chapterbackgrounds.txt 文件到 <MOD 文件夹>\scripts 目录.
  2. 运行游戏.
  3. 打开开发者控制台.
  4. 输入 "sv_unlockchapters n" 这里的 n 就是位于 chapterbackgrounds.txt 的动态背景的序号.
  5. 输入 quit 退出游戏.
  6. 重新运行游戏, 这样您选择的动态背景就会显示出来啦.
Note.png注意: sv_unlockchapters 的值保存在 config.cfg 游戏设置文件内, 如果需要, 您可以直接修改此文件. 对于 Half-Life 2, 这个文件可以在 \half-life 2\hl2\cfg\config.cfg 找到, 可以被任何文本编辑器打开.


替换 Half-Life 2 动态背景

如果您想用自己的作品替换 Half-Life 2 的默认动态背景, 只需用上面提到的方法创建 .BSP 与 .VTF 和 .VMT 文件, 把文件名改成您想要替换的章节的名称就可以了. 在 chapterbackgrounds.txt 文件内记录着 Half-Life 2 动态背景的名称:

"chapters"
{
	1	"background01"
	2	"background01"
	3	"background02"
	4	"background02"
	5	"background03"
	6	"background03"
	7	"background04"
	8	"background04"
	9	"background05"
	9a	"background05"
	10	"background06"
	11	"background06"
	12	"background07"
	13	"background07"
}

例如, 如果您想要替换第一个章节的动态背景, 只需把相关文件命名为 background01. 如果要替换第十个章节的动态背景, 只需把相关文件命名为 background06.


屏蔽 动态背景

如果您指想要使用 vmt 来当作背景 (不使用 动态背景), 只需修改 \cfg\valve.rc 加入如下内容:

// load the base configuration
//exec default.cfg
// Setup custom controller
exec joystick.cfg

// run a user script file if present
exec autoexec.cfg

//
// stuff command line statements
//
stuffcmds

如果您要再次启用 动态背景, 只需在 valve.rc 文件中新建一行, 写入 startupmenu .