《Unity着色器和屏幕特效》——2.3 进阶的星球大气效果

2.3 进阶的星球大气效果

第1章曾使用标准着色器创建了高光材质,并用它在飞船维修场景中为星球Ridley VI表面模拟风暴环境。

现在我们将创建一个自定义着色器为行星表面带来更好的大气层效果。拥有大气层的星球不同于一般反光物体,因为大气层会给星球的轮廓镶上一圈朦胧的光晕,这也可以通过自定义着色器来实现。

2.3.1 创建自定义大气着色器

首先从创建一个新的自定义着色器开始。

1.在项目(Project)面板上单击PACKT_Shaders文件夹,使它的内容显示在资源(Assets)面板上。

2.右键单击资源(Assets)面板上的任一空白位置,在弹出的菜单上单击创建(Create) | 着色器(Shader) | 标准表面着色器(Standard Surface Shader)命令。

3.将新产生的着色器重命名为“Planet”。

2.3.2 应用大气着色器

接下来重新命名自定义着色器,并且将它与场景中的对应材质关联以便能够及时观察效果。

1.双击新创建的“Planet”着色器,在MonoDevelop中打开着色器代码。

2.将第一行代码中的着色器名称改为

这可以让我们在材质中选择它时轻松地定位着色器。

3.保存修改,并返回Unity窗口。

4.在项目(Project)面板上找到并单击PACKT_Materials文件夹,使文件夹内容显示在资源(Assets)面板上。

接下来我们定义一种新的材质,这样我们就可以在原始星球材质和新的自定义材质之间切换来比较它们的外观。

5.右键单击资源(Assets)面板上的任一空白位置,在弹出的菜单上单击创建(Create) | 材质(Material)命令。

6.将新产生的材质重命名为“Planet_falloff”。

7.在检阅(Inspector)面板上,单击着色器(Shader)下拉选单,并在其中选择PACKT/Planet_falloff。

8.在资源(Assets)面板上将“Planet_falloff”材质拖放到场景中的星球模型上,为星球模型设置该材质。

新的自定义着色器已经应用到星球表面,接下来将开始对它做一些真正的修改。

2.3.3 编辑大气着色器

首先删除不需要的默认代码。

1.回到MonoDevelop窗口。
2.在Properties代码块里,删除_Glossiness和_Metallic所在的两行。
3.相应地,向下找到并删除下面两行。

4.继续向下找到surf函数,并将函数里面Glossiness和Metallic所在的两行删除。

上面的两个属性分别对应着前面介绍的金属光泽(Metallic)和平滑度(smoothness)两个材质属性。大气着色器只需要一个额外的颜色属性用于指定大气光晕的颜色,而不需要这两个属性。

为着色器添加新属性

我们将为大气着色器添加厚度、颜色和不透明度三个属性。

在Properties代码块里添加下面两行。

在后续的着色器代码中,_Thickness将被用来指定星球大气的厚度,而_AtmosColor指定大气层的颜色。

与头盔着色器所采用的技巧类似,大气着色器也会用两遍渲染来分别绘制大气层的正面和背面。并且在渲染背面时,会将星球模型略微放大,以便使其看起来更像漂浮在星球表面之上的大气层。

为着色器添加额外渲染

下面步骤将采用与头盔着色器类似的结构为大气着色器添加第二遍渲染。

1.在大气着色器代码中找到Cg代码的结束标识。

2.紧接在这一标识行后面添加如下代码。

可见,上面的第二遍渲染代码,同样利用顶点处理函数(vertex function)将模型放大。

这次着色器不需要高光和平滑度等属性,但它需要一个额外的颜色属性,用于设置大气层的颜色。同时它仍然使用颜色的alpha通道来设置透明度。

3.保存着色器代码,并返回Unity界面。

接下来的最后一步将为使用了新着色器的星球设置各项属性。

设置星球的材质属性

首先在PACKT_Materials文件夹里找到“Planet”材质并将其属性显示在检阅(Inspector)面板上,然后按照下列步骤设置属性参数。

1.在项目(Project)面板上找到并单击PACKT_Textures文件夹,使文件夹内容显示在资源(Assets)面板上。

2.找到“Planet001”材质,并将其拖放到检阅(Inspector)面板右侧的正方形槽内。

3.在检阅(Inspector)面板上,将厚度(Thickness)值设置为0.06。

4.单击大气颜色(Atmosphere Color)右侧的矩形,在弹出的颜色选择器对话框内选择一个接近蓝色的颜色。并且将A值设置为128。

5.关闭颜色选择器。

在场景视图中可以看到,星球的轮廓上已经笼罩了一层朦胧的大气层。

读者还可以尝试继续修改星球材质的厚度(Thickness)、大气颜色(Atmosphere Color)以及大气层的不透明程度,以便获得最佳效果。

时间: 2024-11-05 13:58:42

《Unity着色器和屏幕特效》——2.3 进阶的星球大气效果的相关文章

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.7 创建透明材质

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.7节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 2.7 创建透明材质 到现在为止,我们见到的着色器都有一个共同点-都用在实心材质上.如果你想提升游戏视觉效果,某些时候透明材质是个不错的选择,比如火焰效果或者窗户玻璃等.透明材质的制作相对复杂一点.在渲染实心物体之前,Uni

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.4 给着色器添加纹理

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.4节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 2.4 给着色器添加纹理 在模拟现实效果方面,纹理可以让着色器迅速生动起来.为了高效使用纹理,我们需要理解二维图像是如何映射成三维模型的.这个映射过程称为纹理映射.为了进行纹理映射,我们需要在着色器和想要应用纹理的三维模型上

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.6 法线映射

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.6节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 2.6 法线映射 三维模型中的每一个三角形都有一个面朝方向(facing direction),顾名思义指的是三角形的朝向.这个方向通常用一个从三角形中心出发垂直于三角形表面的箭头表示.面朝方向对于光线在物体表面反射的时候起

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.9 打包和混合纹理

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.9节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 2.9 打包和混合纹理 纹理不仅在存储许多像素颜色数据的时候非常有用,同时还可以用来存储x和y方向的一堆像素集合以及其RGBA通道.可以将几个图像打包成一个RGBA纹理,然后通过着色器代码来提取每一个R,G,B,A组件作为单

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.5 通过修改UV值来滑动纹理

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.5节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 2.5 通过修改UV值来滑动纹理 在物体表面滑动纹理是现代游戏行业中一种非常常用的纹理技术.通过滑动纹理可以创建出诸如瀑布.河流.熔岩等诸多生动的特效.这种技术也是制作精灵特效的基础,关于这部分内容会放在本章另外一小节中.首

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一1.3 从Unity 4向Unity 5迁移

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第1章,第1.3节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 1.3 从Unity 4向Unity 5迁移 不可否认,电子游戏中的图像技术在过去的10年中发生了翻天覆地的变化.每一个包含前沿技术的新游戏的面世,带给我们的都是无与伦比的实时超现实体验.同样,在Unity中着色器及其相关技

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一第2章表面着色器和纹理映射2.1 引言

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.1节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 第2章 表面着色器和纹理映射 在这一章中,会研究表面着色器.我们会从一个非常简单的无光材料开始,最后做出一个全息投影和高级地形混合特效.我们还可以用纹理来制作动画.混合或者其他一些特效.在这一章中,你会学到如下内容:漫反射着

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.10 在地形周围创建圆环

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.10节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 2.10 在地形周围创建圆环 很多即时战略游戏需要通过在某个选定单位周围绘制圆环来显示一些距离(比如攻击范围.移动距离.视野范围等).如果地形是平整的,可能只需要在四边形上画一个圆形纹理就可以了.但是如果地形不是平的,则四

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.2 漫反射着色

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.2节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 2.2 漫反射着色 在开始学习纹理映射之前,我们需要先理解漫反射着色是怎么工作的.某些物体的颜色比较均匀,表面很光滑,但是又不是光滑到那种像镜子一样光亮的程度.这种非反光材料最好的渲染方式就是使用漫反射着色器.虽然在真实世界

《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.3 使用包装数组

本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.3节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问"华章计算机"公众号查看 2.3 使用包装数组 简单来讲,着色器中的代码需要在屏幕的每一个像素上执行,这也是为什么GPU现在都需要优化成并行计算的.同样的道理,在Cg中的标准变量类型和操作符也得考虑这些优化.理解这些原理不仅有助于正确使用着色器,而且