且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《Unity开发实战》——3.6节使用cookie纹理模拟多云的户外环境

更新时间:2022-04-24 21:17:34

本节书摘来自华章社区《Unity开发实战》一书中的第3章,第3.6节使用cookie纹理模拟多云的户外环境,作者 (爱尔兰)Matt Smith (巴西)Chico Queiroz,更多章节内容可以访问云栖社区“华章社区”公众号查看

3.6 使用cookie纹理模拟多云的户外环境
在很多第一人称射击和恐怖逃生游戏中,光照和阴影可以使场影变得很复杂,有助于营造游戏气氛。本节中,将使用cookie纹理创建多云的户外环境。

3.6.1 准备工作
如果没有图片编辑器软件,或者想跳过自己制作图片的步骤,而把精力放在实现上,可以直接用0423_03_05文件夹中cloudCookie.tga图片。

3.6.2 操作步骤
请按照下面的步骤模拟多云的户外环境:
1)在图片编辑器中,创建一张512×512的图片。
2)使用黑色作为前景色,白色作为背景色,打开Render Clouds过滤器(通过Photoshop的菜单Filter | Render | Clouds打开):


《Unity开发实战》——3.6节使用cookie纹理模拟多云的户外环境

7)保存图片,命名为cloudCookie.PSD或cloudCookie.TGA。
8)将图片导入到Unity中,在Project视图中选中。
9)在Inspector视图中,把Texture Type的值设置成Cookie,Light Type的值设置成Directional,如下图所示:


《Unity开发实战》——3.6节使用cookie纹理模拟多云的户外环境

14)还需要一个脚本translate灯光和投影。使用Project视图的下拉菜单创建一个C#脚本,命名为MovingShadows。
15)打开脚本,替换成下面的代码:


《Unity开发实战》——3.6节使用cookie纹理模拟多云的户外环境


《Unity开发实战》——3.6节使用cookie纹理模拟多云的户外环境

16)保存脚本,并附加到 Directional Light上。
17)在 Inspector 视图中选择Directional Light,把Wind Speed X 和 Wind Speed Z 参数的值修改成 20 (也可以修改成自己认为合适的值)。 Light Cookie Size 参数的值必须修改成与Cookie Size一样的值 (本例中为80):


《Unity开发实战》——3.6节使用cookie纹理模拟多云的户外环境

18)播放场景,阴影会移动。

3.6.3 实现原理
脚本中让 Directional Light通过x轴和z轴移动,从而引起 Light Cookie 纹理的位移。另外,重置light对象到原始位置,而无论其位移的距离大于还是等于Light Cookie Size 参数的值。Light的位置必须重置以阻止其移动得太远,引起实时渲染和光照的问题。Light Cookie Size 参数的值用于确保平滑的过渡。
关闭阴影的原因是light在x轴上的角度必须是90度(否则当light重置到原始位置时会有一个明显的空缺)。如果要在场景中有动态阴影,可以添加第二个方向光。

3.6.4 更多内容
本节中在方向光上应用了cookie纹理,如果用于Spot Light 或 Point Light cookies呢?
1.创建 Spot Light cookies
Unity文档中有一个很好的教程关于如何制作Spot Light cookies。模拟来自投影仪,窗口等的阴影,链接为http://unity3d.com/support/documentation/Manual/HOWTO-LightCookie.html

  1. 创建 Point Light cookies
    如果想使用带有point light 的cookie 纹理,可以在Inspector视图中的Texture Importer 块中修改Light Type 的值。