《Unity着色器和屏幕特效开发秘笈》—— 1.4 在表面着色器中使用属性

1.4 在表面着色器中使用属性

现在我们已经创建了一些属性,我们可以将它们与着色器关联起来,以便使用属性来调整着色器并让材质处理获得更多的交互性。
我们可以在材质Inspector面板上调整属性,因为已经为属性赋予了一个变量名,如果你想在着色器代码里通过变量名来获得它的属性值,则必须创建与之对应的另一个变量。

1.4.1 如何操作

接下来将演示如何在表面着色器中使用属性:
1.首先,要删除以下代码,因为在1.2节删除了MainTex 属性。

3.当你完成步骤2之后,你就可以在着色器里使用属性值了。让我们将_EmissiveColor的属性值加到AmbientColor属性值上,然后把计算结果赋值给o.Albedo。将以下代码加入到surf函数。

4.最后,着色器的代码应该和下面一样,在MonoDevelop中保存着色器代码并返回Unity窗口后,如果没有错误,着色器将会自动编译,你现在可以在材质里修改ambient 和emissive 属性的颜色值了,让我们通过滑动条来增加这些属性的饱和度。

pow(arg1, arg2)是自带的函数,相当于数学公式中的power(求幂),参数1代表底数,参数2代表指数。
如果你想了解关于pow()函数的更多信息,你可以查阅Cg教程,这是一份优秀的免费教程,你可以学到更多着色器的知识,也可以查阅各种着色器的Cg函数用法。
下面这个截图展示的是在材质Inspector面板中调整颜色和饱和度之后的样子。

1.4.2 实现原理

当你在Properties块声明一个新属性之后,便为着色器提供了一种从材质Inspector面板上获得调整后属性值的方法,这些值保存在对应的变量名里。在上面创建的着色器里,_AmbientColor、_EmissiveColor和_MySliderValue这些变量保存着调整后的值。为了能在SubShader{}里使用这些值,你需要创建三个与属性同名的变量,Unity会自动将二者关联起来,它们拥有同样的数据。同样,这些变量的数据类型将会在后面的一个章节里用到。
当你在SubShader里创建好变量后,就可以在surf()函数里使用它们了。在本章的例子中,我们将把_EmissiveColor和_AmbientColor 进行叠加,然后使用材质Inspector面板中获取的属性值_MySliderValue对叠加后的值进行乘方运算。
现在我们已经创建了任何着色器都需要使用的一个漫反射组件。

时间: 2024-11-08 22:13:19

《Unity着色器和屏幕特效开发秘笈》—— 1.4 在表面着色器中使用属性的相关文章

《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中的标准变量类型和操作符也得考虑这些优化.理解这些原理不仅有助于正确使用着色器,而且