《Unity着色器和屏幕特效开发秘笈》—— 1.4 在表面着色器中使用属性-阿里云开发者社区

开发者社区> 华章出版社> 正文

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

简介:

本节书摘来自华章出版社《Unity着色器和屏幕特效开发秘笈》一 书中的第1章,第1.4节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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

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

1.4.1 如何操作

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

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

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

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

1.4.2 实现原理

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接