雾教程 (SteamVR)

From Valve Developer Community
Jump to: navigation, search
English (en)
... Icon-Important.png

在你的环境中添加雾

这些微型火焰在多雾的环境中看起来很危险。

SteamVR Home引入了一个名为env_gradient_fog的新的雾实体,这个实体可以用来创建不同类型的雾效果。这是一个非常奇特的系统,可以让密集的地面雾在颜色或密度上有超细微的变化。 要查看这个实体的实际操作和有效使用的例子,看看主SteamVR主地图或Boxing Ring环境。 在本教程中,我们将教你如何创建雾纹理,并将雾添加到你已经存在的地图中,同时提供这个实体工作的详细分解。

Tip.pngTip:本教程假设你已经知道使用Hammer的基本知识并且已经创建了一张你想要添加雾的地图。对于初学者介绍关卡设计和SteamVR Home工具,请点击这里
Tip.pngTip:旧习惯很难改掉,Source 1的老玩家可能倾向于尝试旧的雾实体,如env_fog_controller,但是这些在SteamVR Home中并不支持。
Icon-Bug.pngBug:如果你在光照已经被烘烤和地图已经建立之后从你的地图中删除env_gradient_fog实体后,渲染器会认为仍然有雾——这将导致经典的粉红色错误纹理代替雾纹理。关闭Hammer并重新打开地图应该可以修复这个问题。

Env_Gradient_Fog纹理指南

env_gradient_fog实体主要由渐变纹理控制,这个纹理的尺寸应该等于2的n次方,纹理也应该包含一个alpha通道。

建议图片格式为PNG, PSD或TGA。

乍一看,制作渐变雾纹理似乎是一个复杂而艰巨的过程,但是一旦你真正理解了它们是如何工作的,那么这其实是一件相当简单的事情。


距离和高度

渐变雾纹理作为距离和高度的二维参考。从左到右的纹理控制雾在水平距离上的外观,而向上和向下控制雾在高度上的外观,允许你创建雾,在你上升或下降时具有可变属性的幻觉。

距离是通过在env_gradient fog实体中指定雾的起始和结束距离来控制的,这些以世界单位表示。玩家的眼睛总是在一个零距离,雾永远无法逃脱,它被映射到相对于你的眼睛位置。将远处的雾视为一系列以玩家眼睛为中心的圆柱体,随着玩家的移动而移动。因此,你永远不能像在体积溶液中那样离开雾。请注意,不可能为不同的水平方向指定不同的值——雾不能一个方向暗另一个方向亮。

雾的值被固定在纹理的左边,直到它到达雾的起始距离,在这一点上,它在雾的结束距离上渐变到纹理的最右边。在这个距离之后,雾值被固定在最右边的值上。理解混合的一个好方法是可视化你的雾纹理从开始值到结束值被拉伸。

相反地,高度雾是被映射和固定在世界上的,而不是玩家的眼睛位置。前面提到的圆柱体会相对于玩家水平移动,但不会上下移动。这意味着你可以爬出或移动到雾层之上,如果你想在特定区域低悬挂雾,这个功能是特别有用的。起始高度和结束高度再次在env_gradient_fog实体的世界单位中指定,纹理的底部对应起始高度,纹理的顶部为结束高度。这些值不会随着玩家移动-如果你的地板是-64单位,你可以给雾的起始高度设置-64单位,拥抱地板的雾将保持接近地板。任何低于或高于这些距离的值都被固定为适当的值。

Note.pngNote:雾不是通过体积整合的,它只是一个根据二维查找纹理改变渲染像素的颜色的系统。换句话说,一个齐腰高的雾带只会使物体的部分在那个高度上画出那个颜色,而不是在地面上产生一个可见的雾层——雾本身在世界上没有实际的实体存在。你可能希望将这种雾与粒子系统结合起来,以添加可见的尘埃云、烟雾等。

雾的颜色

例子:来自env_gradient_fog纹理的RGB通道。

纹理的RGB通道中的颜色决定了雾色在距离和高度上的分布。这是一个非常通用的系统,允许你在雾的颜色上进行微妙或剧烈的改变,以符合关卡的艺术需求。根据距离改变雾的颜色可以作为一个有效的工具来说明你的场景的深度和添加气氛。

Tip.pngTip: 虽然建议使用平滑的渐变来表示颜色,但这不是强制的,尝试用更清晰的下降来创造类似外星人的雾系统和超凡的效果。

从左到右控制颜色在距离上的变化,从上到下控制颜色在高度上的变化,这样你就可以创建雾,在你上升的过程中产生可变属性的错觉。

雾的厚度,不透明度或密度

例子:来自env_gradient_fog纹理的Alpha通道。

目前我们已经介绍了如何创建一个纹理来改变你的雾的颜色,但你可能想知道如何改变不透明度或雾的“厚度”。这和创建颜色一样简单,除了雾的不透明度存储在纹理的alpha通道中,而不是RGB通道中。

从左到右表示雾不透明度超过距离,向上和向下表示雾不透明度超过高度。黑色代表0(完全透明),白色代表1(完全不透明),在这两者之间创建一个渐变可以让你在雾的不透明度上有逐渐的变化。

Tip.pngTip:更多烦琐的提示:在起源2的早期版本中,渐变雾纹理的制作略有不同,没有将高度雾加入纹理中。在SteamVR中已经将高度和距离的雾融合到一个单一的纹理中。
Icon-Bug.pngBug:默认的纹理“materials/effects/example_gradient_fog.vtex”是在渐变雾系统改变之前创建的,它允许高度雾被合并到纹理中,因此只提供了一个距离雾的例子。


创建一个VTEX

一旦你创建了你的纹理,确保你保存到你的插件的内容文件夹,我们建议保存到“materials/effects/”,这不是必要的,但为了整理的目的,这是一个很好的想法。

接下来你必须创建一个VTEX文件指向你新创建的纹理,VTEX是SteamVR Home的纹理定义格式。这是引擎资源编译器的需求,该工具接受原始纹理并将其转换为引擎的优化编译格式。VTEX是DME格式的文本文件,本质上是资源编译器的描述,告诉它如何根据你的设置处理纹理。

点击这里找到一个为用于雾纹理的VTEX示例文件。使用文本编辑器,更改m_fileName中的文件名,使其与雾纹理相对应。

将你的VTEX保存在和渐变雾纹理相同的位置。在运行时,SteamVR Home工具会自动检测该文件并编译你的纹理。

在地图中放置env_gradient_fog实体

选择env_gradient_fog实体。

按照下面的说明在你的地图中设置雾实体:

  • 在Hammer中选择位于左侧面板上的实体工具或Shift-E。
  • 在工具属性面板中将实体类更改为env_gradient_fog.
  • 在你的场景中左键点击放置这个实体。
  • 现在返回到选择工具Shift-S,选择你新创建的雾实体。
  • 在右侧的对象属性面板中,为你的距离和高度雾设置起始和结束距离。
  • 同时在对象属性面板中,确保也设置你新创建的渐变雾纹理。

对这个实体的更改将在Hammer的3D视图中实时更新。

现在你应该有了让雾出现在你的关卡中所需的一切,所以创建你的地图,然后看看你的雾在VR中的样子并惊叹于它的雾的光辉。

示例材质

为了帮助你掌握这个系统,我们将包括一个示例地图,它有两个不同的变体,第一个显示了如何在场景中有效地设置雾,第二个是作为本文前面的解释的视觉伴侣设计的。 一些基本的道具也包括作为演示场景的一部分,你可以在自己的关卡中自由使用这些。 下图显示了示例内容的预览。

Tip.pngTip:示例内容只是一个帮助你开始的基本示例,建议你花时间为自己的地图制作定制的雾纹理。


Fog example content.png


感谢Adam Foster (CargoCult)最初在SteamVR Home讨论板上解释了这个实体的功能