-
Unity
内置及常用
Shader
整理
一、
Shader
脚本结构
:
Shader
{
Properties
{
}
SubShader
{
Tags {
Pass
{
}
}
SubShader
{
//ENDCG
}
Fallback
}
二、
Un
ity
自带的
Shader
描述
1
、标准着色器系列(
Normal
Shader Family
)
(<
/p>
1
)、凹凸漫反射(
Bumped
Diffuse
)
属性:
NormalMap
(法线贴图)属性,不改变对象形状,使用纹理来
模拟较小表面的细节,
而不是使用更多的多边形来实际雕刻细节。
漫反射属性:表面
光照强度随表面与光之间夹角的减小而减小。
光照强度仅取决于此角,且不随相机的移动
或旋转而变化。
(
2
)、凹凸高光
(Bumped Specular)
属性
:
1
、法线贴图属性
(Normal
Map)
2
、高光属性,与漫反射
(Diffuse)
一样,高光也计算简单的
(Lambertian)
光照,并附加一个依赖于观察者的高光亮点。这个称为
Blinn-Phong
光照模型。其具有取决于面角、光角
和观察角的高光亮
点。该亮点实际上只是对光源模糊反射的实时适宜模拟。亮点的模
p>
糊层次由检视器
(Inspector)
中的反光
(Shininess)
滑块控制。
此外,主纹理的
alpha
通道用作高光贴图
(Specular Map)
(有时称为
“
光泽贴图
”
),用于定义对象哪些区域的反射性更强。
Alpha
的黑色
区域是零高光反射区域,而白色区域是全高光反射区域。
(
3
)、印花
(Decal)
属性:
1
、印花属性,该着色器是顶点光照
(VertexLit)
着色器的变型。该着
色器上的所有光
照都将被其渲染为顶点光照。除主纹理之外,该着
色器还将第二个纹理用于其它细节。第
二个
“
印花
”(Decal)
纹理使用
alpha
通道来确定主纹理的可见区域。印花纹理应为主纹理的补充。
比如说你有一个砖砌的墙壁,你可以使用一个砖块的纹理作为
主
纹理,然后使用带有
alpha
通道的
Decal
纹理在墙壁的不同地方涂
鸦。
(
4
)、漫
反射(
Diffuse
)
Diffuse
基于一个简单的光照模型
-Lambertian
,光照强度随着
物体表面和光入射
角夹角的减小而减小
(
即光垂直于表面时强度最
大
)
。光照的强度只和该角度有关系,和摄像机无关。
(
5
p>
)、顶点光照(
Vertex-
Lit
)
属性:最简单的一种
Shader
之一,所有照射在该物体上的光在一个
Pass
里面渲染完,光源只在顶点计算。所以不会有任何基
于像素渲
染得效果,比如说:
normal,light
cookies
和
shadows.
这个
shader
对模
型的剖分(将一个物体从几何描述变为多边形表示的过程)非常敏
< br>感,如果你将一个点光源放在很靠近一个立方体的一个顶点那里,
并且对立方体使
用这个
shader
,光源只会在角落计算。所以,基于
p>
像素光照的
shader
对剖分没有要求,在表现圆形高光上效果也很好。
(
6
)、高
光(
specular
)
属性:与漫反射
(Diffuse)
一样,高光也计算简单的
(Lambertian)
光
照,并附加一个依赖于观察者的高光亮点。这个称为
Blinn-Phong
光
照模型。其具有取决于
面角、光角和观察角的高光亮点。该亮点实
际上只是对光源模糊反射的实时适宜模拟。亮
点的模糊层次由检视
器
(Inspector)
中的反光
(Shininess)
滑块控制。
(
7
)、视差法线贴图(
Parallax
Diffuse
)
属性:
A
、视差法线贴图属性,与传统的
normal mapped
一样,但是对
“
深
度
”
的模拟更佳。额外的深
度效果是通过
Height Map
(高度图)来实
现的。
Height Map
在
Normal map
的
alpha
通道里面保存。全黑表
示
么有高度,而白色表示有高度。通常这用来表现石头或者砖块间的
裂缝。
B
、漫反射属性
此着色器消耗的渲染资源较多。
<
/p>
(
8
)、视差凹凸高光(
Parallax Specular
)
属性:增加一张
heightmap
描述深度细节
,
此着色器消耗的渲染资
源较多
A
、视差法线贴图属性
B
、高光属性
C
、漫反射属性
(
9
)、漫
反射细节(
Diffuse
Detail
)
属性:
漫反射细节属性:该着色器是带有额外数据的常规漫反射
(Diffuse)
着色器的版本。它使您能够定义第二个
“
细节
”
纹理,这种纹理会随
着相机的靠近而逐渐显现。例如可以用于地形。您可以使用低分辨
率的基础
纹理来覆盖整个地形。当相机靠近低分辨率纹理时,纹理
会变得模糊不清,这并不是我们
想要的。为了避免这种效果,请创
建平铺在地形上的通用细节
(Detail)
纹理。通过这种方法,额外的细
节会在相机
靠近时出现,从而避免模糊效果。细节
(Detail)
纹
理放在
基础纹理的
“
上面
”
。
2
、透明着色器系列
这个家族的
Shader
一共
7
种,原理和类型与
Normal
中的上差不多,
只不过这些
Shad
er
是用在半透明或者全透明的物体上面的。他们的
主纹理接受
RGBA4
个通道。如果你的模型一部分是半透明,一部<
/p>
分是不透明的。请分开使用两张材质,半透明的材质这个家族的
Shader
。这个家族的
Shader
的内容和
Normal
中同名的几乎一样,只
是添加了半透明效果。
(
1
)、透明顶点光照(
t
ransparent VertexLit
)
属性:
A
、
透明属性,
通过读取主纹理的
alpha
< br>通道使网格几何结构部分透
明或全部透明。在
alpha
中,
0
(黑)表示完全透
明,而
255
(白)
则表示完全不透
明。如果主纹理没有
alpha
通道,则该物体看起来
完全不透明。
B
、顶点光照属性,
不会显示基于像素
的任何渲染效果
(
2
)、透明漫反射(
Transparent
Diffuse
)
属性:透明(
p>
apha
)
+
漫反
射属性
(
3
)、透明高光
属性:透明(
apha
)
+
高光属
性、同
Normal
Specular
,支持了半透明
(
4
)、透明凹凸漫反射
属性:透明(
apha
)
+
法线贴图
+
漫反射属性
(
< br>5
)、透明凹凸高光
属性:透
明(
apha
)
+
法线贴图
+
高光,
基础
(Base)
纹理的
alpha
通
道定义了透明
(Transparent)
区域和高光贴图
(Specular Map)
。
(
6
)、透明视差漫反射
属性:透明(
apha
)
+
视差法线贴图
+
漫反射属性,
(
7
)、透明视差高光
<
/p>
属性:透明(
apha
)
+
视差法线贴图
+
高光属性<
/p>
3
、透明镂
空着色器系列(
Transparent Cutout Shader
Family
)
透明镂空
(Transparent Cutout)
p>
着色器用于有完全不透明部分和完全
透明部分(无部分透明)的物体
。如链栅栏、树、草等。
(
1)
p>
、透明镂空顶点光照(
transparent cutout
vertexlit
)
属性:
?
1
、透明镂空属性,
此着色器不能有
部分透明的区域。所有区域都
必须是完全不透明或完全透明的。使用此着色器的物体可投
射和接
收阴影!使用此着色器时,不会产生通常与透明
(Transparent)
着色
器相关的图形排序问题。此
着色器使用
基础
(Base)
纹理中包含的
alpha
通道确定透明区域。如果
alpha
包含透明和不透明区域的混合,
则可手动确定显示区域的分界点
。调整
Alpha
分界
(Alpha
Cutoff)
滑块可更改此分界点。
?
2
、顶点光照属性。
(
2
p>
)、透明镂空漫反射(
transparent cutout
diffuse
)
属性:透明镂空属
性
+
漫反射属性(
表面光照强度随表面
与光之间夹
角的减小而减小。光照强度仅取决于此角,且不随相机的移动或旋
转而变化。
)
(
3
)、透明镂空高光(
transparent cutout Specular
)
属性:透明镂空
+
高光属性,
基础
(Base)
纹理的
alpha
通道定义了透
明
(Transparent)
区域和高光贴图
(Specular Map)
。主纹理的
alpha
通
道用作高光贴图
(Specular Map)
(有时称为
“
< br>光泽贴图
”
)
用于定义对
象哪些区域的反射性更强。
Alpha <
/p>
的黑色区域是零高光反射区域,
而白色区域是全高光反射区域。这
在您希望对象的不同区域反射不
同级别的高光时非常有用。例如,生锈的金属使用弱高光
,而抛光
金属使用强高光。唇膏的高光强于皮肤,而皮肤的高光又强于棉质
衣物。
(
4
)、透明镂空凹凸漫反射(
~cutout
Bumped Diffuse
)
属
性:透明镂空
+
法线贴图
+
漫反射,
法线贴图
(Normal Map)
是法线贴图的一种切线空间类型。切
线空间是
“
跟随
”
< br>模型几何结构表面的空间。在这个空间里,
Z
轴始
p>
终远离表面。相对于另一种
“
对象空间
p>
”
类型的法线贴图
(Normal
Map)
,切线空间法线贴图
(Normal Map)
稍微昂贵一些,但也有一些
优势:
1.
可用于奇形怪状的模型
-
恰好表现表面凹凸不平的效果。
2.
可将部分法线贴图重复用于模型的不同区域或者不同的模型
透明镂空属性中,在
alpha <
/p>
中,
0
(黑)表示完全透明,而
255
(白)
则表示
完全不透明。如果主纹理没有
alpha
通道,则该物体看起来
完全不透明。
(
5
)、透
明镂空凹凸高光(
~cutout Bumped
specular
)
属性:透明镂空
+
法线贴图
+
高光属性,
与漫反射
(Diffuse)
一样,高
光也计算简单的
(Lambertian)
光照,并附加一个依赖于观察者的高
光亮点。这个称为
Blinn-Phong
光照模型。其
具有取决于面角、光角
和观察角的高光亮点。
该亮点实际上只是
对光源模糊反射的实时适
宜模拟
。亮点的模糊层次由
检视器
(Inspector)
中的
反光
(Shininess)
滑块控制。
(
6
)、透明镂空
transpar
ent Cutout Soft Edge lit
这个是官方文档里面没有记录的,估计是后面新加入的。
这个
Shader
绘制物体的正反两面,不受光照影响,常常用来绘制花草,
树木,叶子。
他包含了两个
Pass
,
第一次将对象中
Alpha
大于
alpha cutoff
的部分以不透明的方式绘制。
第二次关闭写
zbuffer
后,以半透明的方式绘制
Alpha
小于
alpha
cutoff <
/p>
的部分。这样做可以将绿草这种半透明的对象不需要排序就能
绘制
正确。
4
、自发光着色器系列(
Self-
Illuminated
)
此着色器使您能够定义物体的发光部分和黑暗部分。辅纹理的
alpha
通道将定义在即使没有
光
线照耀
时,物体自身的
“
发光
”
区域。
在
alpha
通道中,黑色表示零光照,而白色表示物体发出的最大光
< br>照。任何场景光都会增加着色器光照顶部的亮度。因此,即使您的
物体自身不发光
,其仍将被场景中的光照亮。
(
1<
/p>
)、自发光顶点光照(
Self-Illumin
VertexLit
)
属性:
自发光属性
< br>+
顶点光照属性。即此着色器使您能够定义物体的
发光部
分和黑暗部分。辅纹理的
alpha
通道将定义在即使没有
光线
照耀时,物体自身的
“
发光
”
区域。在
alpha
< br>通道中,黑色表示零光照,
而白色表示物体发出的最大光照。任何场景光都会增加
着色器光照
顶部的亮度。因此,即使您的物体自身不发光,其仍将被场景中的
光照亮。
由于是顶点光照,因此不会显示基于像
素的任何渲染效果,如
灯光
cookies
、法线贴图或阴影。此着色器还对模型的密铺
(tesselation)
敏感得多。如果使用此着色器将
点光灯放在离立方体非
常近的地方,则光只会在角位被计算。像素光照着色器能更有效地
创建漂亮的圆形亮点,且不受密铺
(tesselation)
影响。
(
2
p>
)、自发光漫反射(
Self-Illumin
Diffuse
)
属性:自发光属性
+
漫反射,漫反射计算简单的
(Lambertian)
光照模
型。表面光照强度随表面与
光之间夹角的减小而减小。光照强度仅
取决于此角,且不随相机的移动或旋转而变化。<
/p>
(
3
)、自发光高光(
Self-Illumin
Specular
)
属性:自发光<
/p>
+
高光属性,主纹理的
alpha
通道用作高光贴图
(Specular Map)
(有时称为
“
光泽贴图
”
),用于定义对象哪
些区域的
反射性更强。
Alpha
的
黑色区域是零高光反射区域,而白色区域是
全高光反射区域。这在您希望对象的不同区域
反射不同级别的高光
时非常有用。例如,生锈的金属使用弱高光,而抛光金属使用强高<
/p>
光。唇膏的高光强于皮肤,而皮肤的高光又强于棉质衣物。
(
4
)、自
发光法线贴图漫反射(
~Bumped
Diffuse
)
属性:
自发光
+
凹凸法线贴图
+
漫反射属性,即不
仅自发光,表面光
根据光照与之夹角来计算,不随着相机改变而改变。同时,注重细
p>
节纹理,可用于奇形怪状的模型
-
恰好
表现表面凹凸不平的效果。
可将部分法线贴图重复用于模型的不同区域或者不同的模型。
(
p>
5
)、自发光法线贴图高光(
~Bumpe
d Specular
)
属性:
自
发光
+
凹凸法线贴图
+
高光,即除了自发光以及注重凹凸细
节纹理之外,增加高光效果。一般而言,此
着色器消耗的渲染资源
较多。