《Unity着色器和屏幕特效开发秘笈》—— 1.3 为表面着色器添加属性

简介:

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

1.3 为表面着色器添加属性

着色器的属性在渲染管道过程里是很重要的,因为它们是一个接口可以让使用着色器的美工或用户指定纹理和调整着色器的值。属性可以作为GUI元素暴露在材质的Inspector面板上,而不需要单独的编辑器,它提供了可视化的方法供你调整着色器。
使用MonoDevelop打开你的着色器,查看第3行到第6行的代码。这些就是着色器的Properties块,目前,它只有一个名为_MainTex的属性。如果你查看对应的材质,你会注意到Inspector面板上有个对应的纹理GUI元素,这就是使用我们的代码自动生成的。
需要再次说明的是,Unity采用高效的编码方式实现这一过程,它花费一定的时间量通过遍历来改变属性值。

1.3.1 如何操作

让我们通过创建自己的着色器属性,来了解BasicDiffuse着色器的语法以及它是如何工作的。

screenshot

5.现在我们已经创建了另一种GUI元素,在Inspector面板上我们可以很直观地进行交互。这次我们创建的是一个滑动条(Slider),如下图所示。
screenshot
属性可以让你创建一个可视化面板来调整着色器,而不需要更改着色器代码。

1.3.2 如何操作

每个Unity着色器都拥有一个内置结构(在它的代码中我们可以看到),这些Properties块也是Unity所希望带给你的功能之一。这样做的原因是希望给用户提供一种快捷方式来创建GUI元素并和着色器代码绑定。在Properties块中声明的属性可以在接下来的代码里用于调整值、颜色或者纹理。
screenshot

让我们来看看Unity着色器在背后都做了哪些工作,当你第一次添加一个新属性时,你需要赋予它一个变量名,这个名字可以让你的着色器代码从GUI元素中获取相应的属性值,这为我们节省了大量的时间,因为我们不需要亲自建立这个系统。
属性的下一个元素就是GUI Inspector面板的名字和属性类型,它们包含在圆括号当中。GUI Inspector面板的名字就是出现在材质Inspector面板里的属性名字,它是用于与着色器交互和调整着色器的。属性的数据类型是由我们控制的。Unity提供了很多类型让我们在着色器里使用,下表描述了这些类型:
表面着色器的属性类型
screenshot

最后,这些属性都有各自的默认值,代码里的属性会被快速赋予默认值。因此,在示例里,由于_AmbientColor的类型是Color,所以默认值被设为 1, 1, 1, 1。这四个值代表RGBA 或者float4,或者r, g, b, a = x, y, z,w,当它在第一次创建后,就被设置为白色。

相关文章
|
图形学 Android开发 iOS开发
|
编解码 程序员 atlas
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
图集只是当所有给低昂的纹理需要相同的着色器时采用的一种方法,如果一些纹理需要通过着色器应用独立的图形效果,它们就必须分离到自己的材质中,并在单独的组中打图集。
1400 0
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
|
3月前
|
算法 安全 图形学
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)
|
3月前
|
API 图形学
Unity Hololens2开发|(十)MRTK3空间操作 ObjectManipulator (对象操控器)
Unity Hololens2开发|(十)MRTK3空间操作 ObjectManipulator (对象操控器)
|
3月前
|
Go 图形学
Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束)
Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束)
|
3月前
|
算法 图形学 UED
Unity Hololens2开发|(八)MRTK3空间操作 BoundsControl(边界控制)
Unity Hololens2开发|(八)MRTK3空间操作 BoundsControl(边界控制)
|
3月前
|
图形学
Unity Hololens2开发|(七)MRTK3子系统 TextToSpeechSubsystem(文本转语音)
Unity Hololens2开发|(七)MRTK3子系统 TextToSpeechSubsystem(文本转语音)
|
3月前
|
图形学
Unity Hololens2开发|(六)MRTK3子系统 DictationSubsystem(听写功能)
Unity Hololens2开发|(六)MRTK3子系统 DictationSubsystem(听写功能)
|
3月前
|
图形学
Unity Hololens2开发|(五)MRTK3子系统 KeywordRecognitionSubsystem(关键字识别)
Unity Hololens2开发|(五)MRTK3子系统 KeywordRecognitionSubsystem(关键字识别)
|
5月前
|
前端开发 C# 开发工具
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
104 0