3D天空盒

From Valve Developer Community
Jump to: navigation, search
English Deutsch Italiano Русский

译者:joyo_a(百度ID)

注意:由于原文改动太多,所以特别在这里说明本译文是翻译2017年11月16日修改的文章。如果原文有大变动,请以最新修改日期的文章为准。

添加一个3D天空盒可以成为一个地图的视觉处理的强大补充。3D天空盒是由地图作者在地图的游戏部分边界之外构建的额外区域。加载地图时,起源会放大3D天空盒区域中的对象,并将它们放置在天空盒和玩家之间的当前地图边界之外。这是用来让你的地图在(默认)1:16的比例下有更广阔的世界外观的外观,而不是太贵的预算。3D天空盒是非交互式的 - 玩家和其他实体不能移动到3D天空盒空间。

3D天空盒的几何形状与普通的几何体几乎没有区别。正常地图几何体和3D天空盒的无缝过渡是完全可能的,并且应用在很多官方起源游戏的地图上,例如Counter-Strike: Source

Bug:
[Portal]Portal,透过门户观察时,3D天空盒无法正确渲染。 - example.
注意:3D天空盒不是2D天空盒的替代品。2D天空盒总是在3D天空盒的背景中。要编辑或更改标准2D天空盒,请参阅Skybox (2D)
注意:<Left 4 Dead>,默认比例为1:32,而不是1:16(但是1:16工作正常!)。
注意:为避免照明问题,请勿使用light实体(或没有Env_前缀的任何其他灯光实体)。
注意:[Portal 2]Portal 2,除非将r_skybox_draw_last设置为0,否则一些天空盒几何体将不可见。

优点

标准天空盒是简单的2D图像,通过映射到一个立方体以便他们围绕整个地图。3D天空盒是完整的3D几何体,并且在玩家在地图中移动时具有合适的视差。由于它们是实时渲染的,所以它们可以随着显卡的分辨率进行扩展,并且还支持2D天空盒所不支持的实时着色器效果。

使用3D天空盒的主要好处是,它允许地图作者使地图看起来比标准的世界几何体大得多。没有3D天空盒的最大的地图是每边32768个单位。使用3D天空盒,地图可以扩展到16倍。

这个尺寸的地图是可以的,因为3D天空盒是在Hammer编辑器中以标准地图的1/16的比例创建的。在运行时,引擎会将其缩回以匹配地图其余部分的比例。这不仅节省了编辑器视图中的空间,而且编译和渲染也更便宜。

由于其比例,3D天空盒的光照贴图和纹理分辨率要低得多。这使得3D天空盒几何体比标准的世界几何体更便宜。

如果创建与主地图相同的低细节天空盒,则可以使用3D天空盒克服绘制距离限制。希望这样做的mod团队将不得不开发代码来缓解地图版本之间的转换。

基本特征

3D Skyboxes具有以下特点:

  • 在Hammer编辑器中以1:16的比例构建(默认),然后在引擎中以16倍的尺寸渲染以匹配世界几何体。
  • 支持具有着色效果的材质,如法线贴图,水,环境贴图,代理(proxies)等。
  • 非互动 - 玩家和其他世界实体不能进入3D天空盒。3D天空盒只是地图范围的可视扩展。
  • 可以用笔刷,位移,静态和动态道具,灯光,笔刷实体和点实体(如env_sprite)构造。
  • 放置在3D天空盒中的任何模型必须以1:16的比例制作。标准模型(道具)不能在3D天空盒中正确缩放。必须使用特殊的1:16比例的版本。对于Half-Life 2,这些道具可以在models/props_skybox目录中找到。
  • 不应该包含info_player_start,NPC或怪物。
  • 具有较低的光照贴图和纹理分辨率(因为它们创建的比例)。
  • 必须有自己的光源,尽管非天空盒部分的light_environment也将用于3D天空盒的照明。
  • 使用sky_camera实体来控制它们与非天空盒世界几何体的对齐方式。
  • 3D天空盒有自己的雾气参数,可以在sky_camera实体中调节。
  • 3D天空盒中的几何体不像其他几何体一样被遮挡或剔除。将大量细节化的笔刷几何体或模型添加到3D天空盒,尤其是使用半透明材料,会严重影响性能。
  • 地图必须有一个light_environment,否则3d天空盒中的模型将被错误地点亮。light_environment放在地图的非天空盒部分,不需要放在3D天空盒中。

3D天空盒的制作

  • 关于sky_camera实体的注意事项:点实体不会缩小。

创建与当前地图匹配或“排列”的3D天空盒的最有效方法是使用地图中主要部分的一些几何体。创建主地图的几何体后,按照以下步骤操作:

  1. 在世界原点(坐标0,0,0)处添加一个sky_camera实体,这是地图网格的中心。sky_camera是渲染器用来将3D天空盒与地图的主要部分对齐的参考点。换句话说,它作为一个标记,告诉渲染器3D天空盒的源点和世界的源点是如何相互关联的。您可以将此过程视为与选择所有3D天空盒几何体相似,然后将该选择中的sky_camera实体与世界原点(0,0,0)对齐。几何体被转换回到世界上的那个位置。这是天空盒在引擎中呈现时使用的相同概念。
  2. 选择地图的一些不同的部分,你可以为3D天空盒中的比例和位置使用红线。为此目的选择的共同元素则是一些较大的结构,以及定义地图边缘的墙壁,悬崖,丘陵等。确保你创建的sky_camera也被选中。
    注意:重要的是不要选择任何模型实体,只有笔刷。模型不能用作参考几何体,因为模型不能在Hammer编辑器中缩小。
  3. 编辑(Edit)菜单中选择复制(Copy),或点击CTRL-C。
  4. 编辑(Edit)菜单中选择选择性粘贴(Paste Special)。将要复制的份数(Number of copies)设置为1,将所有其他值设置为0。点击确定(OK)。这将出现你选择的几何体的副本。
  5. 如果尚未打开,则在工具栏中打开缩放纹理锁定(Scaling Texture Lock)。它的图标类似于<tl>。这将随着几何体缩小纹理。
  6. 保持被选中的几何体,从工具(Tools)菜单中选择变换(Transform)。选择缩放(Scale)旁边的单选按钮。为X,Y和Z键入一个.0625的值。这是相当于1:16的十进制数——3D天空盒的比例。点击确定(OK)。
    注意:如果你希望几何体上的纹理相应地缩放,请确保已启用纹理锁定。
  7. 你现在拥有1:16比例版本的参考几何体。现在拖动(移动)到地图的另一个你希望建立你的3D天空盒的地方。只要没有触及主地图的几何体区域的任何部分,它在哪里都没关系。
  8. 删除正常的世界地图区域的sky_camera实体。重要:应该只保留3D天空盒中的sky_camera实体在地图中。在L4D2(或者是其他的起源游戏)中,忘记这个步骤(在地图上有多个sky_camera)会导致所有导航区域都被阻塞。
  9. 在参考几何体周围构建3D天空盒几何体,并将其用作指导。你可以构建无缝接触参考几何体的天空盒几何体。你可以使用笔刷和位移几何体。模型也可以放置,但由于3D天空盒的尺寸是1:16,任何模型也必须是1:16的比例。模型hl2\models\props_skybox\coast01.mdl是1:16比例的示例模型。尝试将3D摄像机放置在玩家的高度的附近。这会给你一个很好的想法:当3D天空盒在引擎中呈现时,它看起来会是怎样的。
  10. 在参考几何体周围添加一个空心立方体笔刷,并为其应用tools\toolsskybox材质。标准的2D立方体天空盒将出现在这些表面上。3D天空盒区域必须用这些笔刷密封。
  11. 完成后,删除或隐藏除sky_camera实体以外的所有参考几何体。你可能会发现最好将参考几何体添加到其自己的可见组中,以便可以打开和关闭或重新放置参考几何体。确保在保存和编译地图之前将其关闭,否则会将其编译到3D天空盒中。
  12. 你的原始地图仍然需要tools\toolsskybox材质,无论你是否想要看到天空;但现在将显示3D天空盒以及2D天空盒(这是以前的操作)。
  13. 如果你希望地图的一部分仅显示2D天空盒而不显示3D天空盒几何体,请使用仅绘制2D天空盒的tools\toolsskybox2d贴图。这个纹理没有限制,它可以和普通的天空盒纹理一起使用,没有任何问题。即:当你只想从中看到天空就像在一个非常高的建筑里一样时,这个功能非常有用。

测试

如果你正确密封了3D天空盒,并且地图没有泄漏,现在可以编译地图并在引擎中查看新的3D天空盒。

示例

用3ds Max制作3D天空盒

如果你使用Wall Worm Model Tools3ds Max内制作你的地图,你也可以用比传统Hammer方法更简单的方式创建3D天空盒。 Wall Worm可以让你在地图的比例下构建你的3D天空盒,避免了缩小天空盒的需求。

要做到这一点,只需使用Wall Worm附带的Anvil工具中的标签功能“标记”天空盒几何体即可。

观看演示并下载示例场景。

Environment articles:
Skies and environment maps Skybox (2D)Skybox (3D)HDR SkiesSkybox with TerragenSkybox with Terragen - AdvancedList of skies
Terrain and displacement mapping DisplacementsHoles in displacementsDigital Elevation Models

3D天空盒的相关教程(俄语)

教程作者:Project-S