Difference between revisions of "Adding Water:zh-cn"

From Valve Developer Community
Jump to: navigation, search
(Created page with "{{otherlang2 |title=添加水 |en=Adding Water |ru=Adding Water:ru }} 水是Source里一个非常复杂的着色器:它是动态的,反光,雾气,折射和凹凸贴图...")
 
(Sync to English version)
 
Line 1: Line 1:
{{otherlang2
+
{{lang
 
|title=添加水
 
|title=添加水
|en=Adding Water
 
|ru=Adding Water:ru
 
 
}}
 
}}
  
水是Source里一个非常复杂的着色器:它是动态的,反光,雾气,折射和凹凸贴图。这种复杂的规则和限制在于如何放置它以及什么样的水应该用于什么样的场合。
+
水是起源引擎中一个非常复杂的着色器:它是动态、反射、有雾、折射且有凹凸贴图的,还可以流动。这种复杂带来了关于如何放置它以及什么样的水应该用于什么场合的一些规则和限制。
  
=="昂贵的"水==
+
==「昂贵的」水 ==
这种水看起来很好,但也是耗成本最多的。这个着色器会反射它周围的世界,折射和雾视海底世界(根据通过水体积的线积分),以及在水表面播放一个凹凸贴图的动画。虽然结果是照片级地逼真,但成本有时候会因为复杂的场景而变得非常高。
+
这种水看起来最好,但消耗的资源最多。这个着色器会反射它周围的世界,折射和雾化水下的世界(根据水体的线积分),以及在水表面播放一个凹凸贴图的动画。虽然结果是照片级地逼真,但成本有时候会因为复杂的场景而变得非常高。
{{note:zh-tw|只有当达到了[[Adding_Water#Requirements|要求]],"昂贵的"水才会呈现出来。}}
+
{{note:zh-cn|只有当达到了[[Adding_Water:zh-cn#Requirements|要求]],「昂贵的」水才会呈现出来。}}
  
== "廉价的"水 ==
+
== 「廉价的」水 ==
在一些情况下,一个更简单的解决方案被称为"廉价的" 水(通常由于性能原因),"廉价的"水也许还是用得到的。这个版本的水并不能反射它周围的世界,使得它不太真实,不过也"便宜"得多。如果"昂贵的"水运行在那些不拥有让渲染器正确工作所必需的功能的显卡上的话,水会回退到"廉价的"水。而且如果用户设置了游戏里的视频设置里的水的可视化质量的话,水也会回退到这种材质。
+
有一些情况需要一个更简单的解决方案(通常由于性能原因),可以使用「廉价的」水。这种水并不能反射它周围的世界,使得它不太真实,不过也「便宜」得多。如果「昂贵的」水运行在那些不拥有让渲染器正确工作所必需的功能的显卡上的话,水会回退到「廉价的」水。而且如果用户设置了游戏里的视频设置里的水的可视化质量的话,水也会回退到这种材质。
  
 
== 要求 ==
 
== 要求 ==
为了使其有效地执行,水也有一个关于其使用规则和地图中使用位置的汇总。
+
为了使其有效地执行,有一套关于水的使用和地图中放置的规则。
  
* 如果水是"昂贵的",那么水在一个[[PVS]]里可能只有一种水位高度。
+
* 如果水是「昂贵的」,那么水在一个[[PVS]]里只能有一种水位高度。
* "昂贵的"和"廉价的"水可能无法同时使用相同的[[PVS]]。
+
* 「昂贵的」和「廉价的」水不可以同时使用相同的[[PVS]]。
* 水的表面永远都不应该在Z轴出现斜面;它应始终和地图上的水平线平行。
+
* 水的表面永远都不应该在Z轴上倾斜;它应始终和地图上的水平线平行。
* 水是通过在一个固体的最顶层的面应用水的材质来创建的,而其他的面则是应用<code>tools\toolsnodraw</code>材质。
+
* 水是通过在一个固体上表面应用水的材质来创建的,而其他的面则是应用<code>tools\toolsnodraw</code>材质。
* [[water_lod_control]]实体控制"昂贵的"水转换成"廉价的"水的距离。
+
* {{ent|water_lod_control}}实体控制「昂贵的」水转换成「廉价的」水的距离。
* 一个[[env_cubemap]]实体必须存在于水的表面才能让DX9硬件着色器能正确渲染。
+
* 要让低于DX9的硬件能正确渲染水面,必须存在一个{{ent|env_cubemap}}实体。
  
{{note:zh-tw|水不是一个固体实体,所以它不应被附加到任何实体上。任何固体实体里包含水固体都将无法正确渲染。}}
+
{{note:zh-cn|水不是固体实体,不应被附加到任何实体上。任何固体实体里包含水都无法正确渲染,除了{{ent|func_water_analog}}和{{ent|func_water}}}}
  
== 结构 ==
+
== 创建 ==
要添加一个体积水到你的地图,跟随这些步骤:
+
要给你的地图添加一个水体,步骤如下:
 
+
# 用固体工具(Block Tool)创建一个跟水体一样大小的固体。
# 用固体工具(Block Tool)创建一个跟体积水一样大小的固体。
 
 
# 点击贴图工具栏上的'''浏览(Browse)'''按钮来打开'''贴图浏览器(Texture Browser)。
 
# 点击贴图工具栏上的'''浏览(Browse)'''按钮来打开'''贴图浏览器(Texture Browser)。
 
# 双击贴图浏览器里的<code>tools\[[tool textures#nodraw|toolsnodraw]]</code>材质。
 
# 双击贴图浏览器里的<code>tools\[[tool textures#nodraw|toolsnodraw]]</code>材质。
Line 39: Line 36:
 
# 双击一个水材质来应用它。这里有一个可以尝试的水材质:<code>nature/water_canals_water2</code>。
 
# 双击一个水材质来应用它。这里有一个可以尝试的水材质:<code>nature/water_canals_water2</code>。
 
# 点击'''面编辑(Face Edit)'''面板上的'''应用(Apply)'''按钮
 
# 点击'''面编辑(Face Edit)'''面板上的'''应用(Apply)'''按钮
# 固体现在应该正确应用了水材质了。编译并运行你的地图(启用Vvis和VRad)来测试它。
+
# 固体现在应该正确应用了水材质了。编译并运行你的地图(启用VVIS和VRAD)来测试它。
  
为了水面的正确渲染,有必要为你的地图选择一个天空盒,以及水固体本身的矩形。固体可以重叠其他固体,为了隐藏不想要的区域。
+
为了让水面正确渲染,你的地图需要有一个天空盒,水体本身应该是矩形。为了隐藏不想要的区域,这个固体可以跟其他固体相交。
 
如果水没有被正确渲染(你看不到它),这意味着你地图上哪里有着泄露。
 
如果水没有被正确渲染(你看不到它),这意味着你地图上哪里有着泄露。
  
 
=== 游戏的具体注意事项 ===
 
=== 游戏的具体注意事项 ===
  
* {{l4d2}} L4D2地图也需要一个[[env_fog_controller]]
+
* {{l4d2}} L4D2地图还需要一个{{ent|env_fog_controller}}
* {{as}}Alien Swarm(异型丛生)里所有的水固体都必须被附着在一个名为"structure_seal"的[[func_brush]]
+
* {{as}}Alien Swarm(异型丛生)里所有的水固体都必须被附着在一个名为「structure_seal」的{{ent|func_brush}}
 
* {{Portal}}在Portal(传送门)里,要创建有毒的水,你必须使用<code>nature/hazard_liquid</code>材质。
 
* {{Portal}}在Portal(传送门)里,要创建有毒的水,你必须使用<code>nature/hazard_liquid</code>材质。
  
== Cubemaps和水 ==
+
== 反射球与水 ==
Cubemaps对于水的表面是很重要的。在低于DX9级别的显卡上,要渲染实时反射水着色器是不可能的。对于这些显卡,一个[[env_cubemap]]实体将提供预先计算的,原本在DX9显卡下呈现的水环境贴图。
+
反射球对于水的表面是很重要的。在低于DX9级别的显卡上,要渲染实时反射水着色器是不可能的。对于这些显卡,一个{{ent|env_cubemap}}实体将提供预先计算的的水环境贴图。
 
 
添加一个[[env_cubemap]]给水表面:
 
  
# 使用实体工具(Entity Tool)添加一个[[env_cubemap]]实体。
+
给水面添加一个<code>env_cubemap</code>:
# 在水的顶层的面上方,接近中心的地方放置[[env_cubemap]]
+
# 使用实体工具(Entity Tool)添加一个<code>env_cubemap</code>实体。
# 在3D视图下双击[[env_cubemap]]来弹出物体属性对话框(Object Properties dialog)。
+
# 在水的顶层的面上方,接近中心的地方放置<code>env_cubemap</code>
 +
# 在3D视图下双击<code>env_cubemap</code>来弹出物体属性对话框(Object Properties dialog)。
 
# 在'''物体属性(Object Properties)'''里点击'''固体面(Brush faces)'''。
 
# 在'''物体属性(Object Properties)'''里点击'''固体面(Brush faces)'''。
 
# 点击'''拾取...(Pick...)'''按钮。鼠标光标将变为滴管图标。
 
# 点击'''拾取...(Pick...)'''按钮。鼠标光标将变为滴管图标。
 
# 点击顶层水面来用滴管选择。水面会以红色高亮显示,来表示它已经和[[env_cubemap]]实体关联。
 
# 点击顶层水面来用滴管选择。水面会以红色高亮显示,来表示它已经和[[env_cubemap]]实体关联。
 
# 关闭'''物体属性(Object properties)'''对话框。
 
# 关闭'''物体属性(Object properties)'''对话框。
# 编译并运行你的地图。载入地图后,打开开发者控制台,键入<code>buildcubemaps</code>。引擎会为每一个[[env_cubemap]]实体计算一个环境贴图,然后保存到[[BSP]]文件里。
+
# 编译并运行你的地图。载入地图后,打开开发者控制台,键入<code>buildcubemaps</code>。引擎会为每一个<code>env_cubemap</code>实体计算一个环境贴图,然后保存到[[BSP]]文件里。
  
== 参阅 ==
+
== 参见 ==
 
* [[Water|水]]
 
* [[Water|水]]
 
* [[Water (shader)|水(着色器)]]
 
* [[Water (shader)|水(着色器)]]
  
[[Category:Level Design Tutorials]]
+
[[Category:Level Design Tutorials:zh-cn]]
[[Category:Water]]
+
[[Category:Water:zh-cn]]
 
[[Category:Chinese]]
 
[[Category:Chinese]]

Latest revision as of 14:47, 27 August 2019

English

水是起源引擎中一个非常复杂的着色器:它是动态、反射、有雾、折射且有凹凸贴图的,还可以流动。这种复杂带来了关于如何放置它以及什么样的水应该用于什么场合的一些规则和限制。

「昂贵的」水

这种水看起来最好,但消耗的资源最多。这个着色器会反射它周围的世界,折射和雾化水下的世界(根据水体的线积分),以及在水表面播放一个凹凸贴图的动画。虽然结果是照片级地逼真,但成本有时候会因为复杂的场景而变得非常高。

注意:
只有当达到了要求,「昂贵的」水才会呈现出来。

「廉价的」水

有一些情况需要一个更简单的解决方案(通常由于性能原因),可以使用「廉价的」水。这种水并不能反射它周围的世界,使得它不太真实,不过也「便宜」得多。如果「昂贵的」水运行在那些不拥有让渲染器正确工作所必需的功能的显卡上的话,水会回退到「廉价的」水。而且如果用户设置了游戏里的视频设置里的水的可视化质量的话,水也会回退到这种材质。

要求

为了使其有效地执行,有一套关于水的使用和地图中放置的规则。

  • 如果水是「昂贵的」,那么水在一个PVS里只能有一种水位高度。
  • 「昂贵的」和「廉价的」水不可以同时使用相同的PVS
  • 水的表面永远都不应该在Z轴上倾斜;它应始终和地图上的水平线平行。
  • 水是通过在一个固体上表面应用水的材质来创建的,而其他的面则是应用tools\toolsnodraw材质。
  • water_lod_control实体控制「昂贵的」水转换成「廉价的」水的距离。
  • 要让低于DX9的硬件能正确渲染水面,必须存在一个env_cubemap实体。
注意:
水不是固体实体,不应被附加到任何实体上。任何固体实体里包含水都无法正确渲染,除了func_water_analogfunc_water

创建

要给你的地图添加一个水体,步骤如下:

  1. 用固体工具(Block Tool)创建一个跟水体一样大小的固体。
  2. 点击贴图工具栏上的浏览(Browse)按钮来打开贴图浏览器(Texture Browser)。
  3. 双击贴图浏览器里的tools\toolsnodraw材质。
  4. 选中你的水固体,点击应用当前贴图(Apply Current Texture)按钮来指派tool textures|tools\toolsnodraw材质给水固体。
  5. 选择贴图应用工具(Texture Application tool),打开面编辑(Face Edit)模式。
  6. 在3D视图里左击水固体最顶层的面来选中它。
  7. 点击浏览(Browse)来再次弹出贴图浏览器(Texture Browser)
  8. 过滤器(filter)部分键入water。这将会显示所有名字中包含关键词water的所有材质。
  9. 双击一个水材质来应用它。这里有一个可以尝试的水材质:nature/water_canals_water2
  10. 点击面编辑(Face Edit)面板上的应用(Apply)按钮
  11. 固体现在应该正确应用了水材质了。编译并运行你的地图(启用VVIS和VRAD)来测试它。

为了让水面正确渲染,你的地图需要有一个天空盒,水体本身应该是矩形。为了隐藏不想要的区域,这个固体可以跟其他固体相交。 如果水没有被正确渲染(你看不到它),这意味着你地图上哪里有着泄露。

游戏的具体注意事项

  • <Left 4 Dead 2> L4D2地图还需要一个env_fog_controller
  • <Alien Swarm>Alien Swarm(异型丛生)里所有的水固体都必须被附着在一个名为「structure_seal」的func_brush
  • [Portal]在Portal(传送门)里,要创建有毒的水,你必须使用nature/hazard_liquid材质。

反射球与水

反射球对于水的表面是很重要的。在低于DX9级别的显卡上,要渲染实时反射水着色器是不可能的。对于这些显卡,一个env_cubemap实体将提供预先计算的的水环境贴图。

给水面添加一个env_cubemap

  1. 使用实体工具(Entity Tool)添加一个env_cubemap实体。
  2. 在水的顶层的面上方,接近中心的地方放置env_cubemap
  3. 在3D视图下双击env_cubemap来弹出物体属性对话框(Object Properties dialog)。
  4. 物体属性(Object Properties)里点击固体面(Brush faces)
  5. 点击拾取...(Pick...)按钮。鼠标光标将变为滴管图标。
  6. 点击顶层水面来用滴管选择。水面会以红色高亮显示,来表示它已经和env_cubemap实体关联。
  7. 关闭物体属性(Object properties)对话框。
  8. 编译并运行你的地图。载入地图后,打开开发者控制台,键入buildcubemaps。引擎会为每一个env_cubemap实体计算一个环境贴图,然后保存到BSP文件里。

参见