本文采用代码和注释分离的形式记录阅读笔记,目的在于阅读的时候可以记思考,在思考之后在继续阅读下文,和注释进行核对,得到前后的立即对比,增加理解能力。所以采用直接先贴出代码,然后给出自己的理解,最后附上效果图。
Shader "Tutorial/Basic" {
Properties {
_Color ("Main Color", Color) = (1,0.5,0.5,1)
}
SubShader {
Pass {
Material {
Diffuse [_Color]
}
Lighting On
}
}
}
Shader
Shader关键字用于定义着色器的文件路径,可以有多种格式,如:Shader "***"、“Shader "***/***";这样的定义方式表示该着色器的目录结构,可以根据自己的实际情况来定义。代码中定义的路径在Unity材质面板中的显示情况:
可以根据自己的实际情况定义各种目录层级结构即可。
Properties
Properties关键字用于定义着色器属性,该属性内定义了一个(Color)颜色属性,可以通过材质调节该颜色值,Unity中的现实情况如下:
SubShader
Shader由至少一个SubShader组成,可以根据实际情况编写至少一个或者多个SubShader组成。SubShader用于定义渲染通道(Pass)的列表,并且可以选择性的设置所有通道共同的任意状态。
Pass
Pass代码块将游戏对象几何体进行渲染一次。如果在SubShader中定义了多个Pass,那么会根据Pass的先后顺序进行几何体的渲染;Pass不是越多越好,在必要的情况下可以编写多个,因为每增加一个Pass都会增加渲染成本的。在Pass中可以定义一个名称和任意数量的Tags,以及设置渲染状态,这些设置用于将通道的意图传达给渲染引擎,引擎根据各语义进行实际的操作。
Material
上文中采用了材质,并且在Material中设置了Diffuse(漫射) 以及Diffuse的颜色,该颜色通过定义的属性_Color的值来作为Diffuse的颜色值;_Color的颜色值通过调节Unity材质面板中的Color来进行动态改变,可以通过调节不同的颜色值来查看效果。
Lighting On
开启顶点光照
通过调节光照颜色和材质颜色查看效果:
_Color调节为White, Light调节为Green 如下图一: 把_Color调节为Green,Light调节为White,如下图二:
图一 图二
上面的图一和图二图是没有区别的,最后得到的是同一张图,因为Diffuse和Light最后混合的结果是一样的,所以得到的是同一张图,看上去是没有差异的。
_Color调节为Magenta(品红),Light调节为Cygan(青色) 如图三 _Color调节为Orange(橙色),Light调节为Cygan(青色) 如图四
图三 图四
图三和图四采用相同的光照,然后调节_Color的颜色值得到上图中的区别,它们有着明显的差异,可以通过调剂Light和Diffuse的颜色值得到各种不同的颜色结果。
总结:
该着色器定义了一个颜色属性_Color,定义了一个SubShader和Pass,在单通道Pass中开启了顶点光照,以及使用使用固定函数Material为每个顶点设置Diffuse的颜色值。最后通过Light光照的颜色值和Diffuse的颜色值的混合,得到最后最后图片。
本文属于个人阅读笔记,若有见解不对之处,万望见谅及指!!!!