1、Culling阴影面剔除
Culling阴影面剔除是一种优化技术。所有的多边形都有正反两面,而你永远只能看见其中一面,不信的话拿张纸板或者一面镜子看看你能不能同时看到两面。通常多边形面向屏幕里面的背面,我们看不见,所以会将该面剔除。
Cull Off 关闭阴影面剔除
Cull Back 剔除背面
Cull Front 剔除正面
2、Depth Testing深度测试
Depth Testing:深度测试,也叫深度缓冲。只有最靠近观察者的物体会被绘制。深度即Z,该值越小表示离观察者越近,该值越大表示离观察者越远。
Shader里默认有如下代码
ZWrite On
ZTest LEqual
意思即使Shader里没有写任何关于Depth Testing的代码,Shader也会执行深度测试。
ZWrite:是否此物体的像素深度会被记录(默认记录),
ZWrite On 深度记录(默认On)
ZWrite Off 不记录此深度,通常用于半透明物体,
ZTest:默认是 LEqual。 即当深度小于或者等于深度最小值时,渲染物体,即渲染最近的物体。
3、AlphaTest 透明度测试
Alpha Test ,中文就是透明度测试。简而言之就是V&F shader中最后fragment函数输出的该点颜色值(即上一讲frag的输出half4)的alpha值与固定值进行比较。 AlphaTest语句通常位于Pass{}中的起始位置。
语法:
第一种:AlphaTestOff: 不测试,全渲染
第二种:Alpha 比较符 目标alpha值
其中目标alpha值取值范围是 0至1,也可以用参数 ,如 AlphaTest [varName]。
比较符:(目标alpha值下面记作x)
Always 全渲染(任意x值)
Never 全不渲染
Greater 点的alpha值大于x时渲染
GEuqal 点的alpha值大于等于x时渲染
Less 点的alpha值小于x时渲染
LEqual 点的alpha值小于等于x时渲染
Equal 点的alpha值等于x时渲染
NotEqual 点的alpha值不等于x时渲染
例:
AlphaTest never 0 全不渲染(这个0可以是任意值,但必须填)
AlphaTest always 0 全渲染(这个0可以是任意值,但必须填)
AlphaTest off 全渲染
AlphaTest Greater 0.4 当alpha大于0.4渲染, 缺点是边缘过于锋利并且显示不完整,alpha小于0.4的部分被忽略掉了
Alpha Blend 边缘柔和,但是中心也太柔和,没有实体的感觉
AlphaTest Greater 0.4 /AlphaTest LEqual 0.4 两个部分,大于0.4不混合,小于0.4混合。效果是既有实体感觉,边缘也柔和。
4、Alpha混合
Alpha Blending,中文译作Alpha混合
Blend SrcAlpha OneMinusSrcAlpha:
Blending就是控制透明的。处于光栅化的最后阶段。
这里例如我们给一个模型贴一个材质,那么在某个点计算出来颜色值称为源,而该点之前累积的颜色值,叫目标。
语法
Blend Off , 不混合
Blend SrcFactor DstFactor , SrcFactor是源系数(靠近摄像机),DstFactor是目标系数
最终颜色 = (Shader计算出的点颜色值 * 源系数)+(点累积颜色 *目标系数)
属性(往SrcFactor,DstFactor 上填的值)
one 1
zero 0
SrcColor 源的RGB值,例如(0.5,0.4,1)
SrcAlpha 源的A值, 例如0.6
DstColor 混合目标的RGB值例如(0.5,0.4,1)
DstAlpha 混合目标的A值例如0.6
OneMinusSrcColor (1,1,1)- SrcColor
OneMinusSrcAlpha 1- SrcAlpha
OneMinusDstColor (1,1,1) - DstColor
OneMinusDstAlpha 1- DstAlpha
运算法则示例:
(注:r,g,b,a,x,y,z取值范围为[0,1])
(r,g,b) * a = (r*a , g*a , b*a)
(r,g,b) * (x,y,z) = (r*x , g*y , b*z)
(r,g,b) + (x,y,z) = (r+x , g+y ,b+z)
(r,g,b) - (x,y,z) = (r-x , g-y, b-z)
5、雾化
参考:http://docs.unity3d.com/Manual/SL-Fog.html
部分雾化: 三种Shader都可使用,在需要雾化的物体Shader脚本里,加上如下代码
Fog{Mode Linear Color (0.87,0.87,0.87,1) Density 0.1 Range 0,300}
6、贴图与光影
从本讲开始讲一些特效贴图。这些贴图大多数是在不采用高精度模型的情况下,以较小的代价获得最好的画面效果。而涉及的主要是与光有关的运算。
(1) Bump Mapping 凹凸贴图
(2) Normal Mapping 法线贴图
(3) Parallax Mapping 视差贴图
(4) Displacement Mapping 位移贴图
(5) ReliefMapping 浮雕纹理贴图
(6) ParallaxOcclusionMapping 视差阻塞贴图
(7) ConeMapping 圆锥跟踪贴图
7、Render Setup 渲染设置
通道设定显示硬件的各种状态,例如能打开alpha混合,能使用雾,等等。这些命令如下:
Material { Material Block }
定义一个使用顶点光照管线的材质,参考material页面。
Lighting On | Off
开启或关闭顶点光照,参考material页面。
Cull Back | Front | Off
Set polygon culling mode. 设置多边形剔除模式
ZTest (Less | Greater | LEqual |GEqual | Equal | NotEqual | Always)
Set depth testing mode. 设置深度测试模式
ZWrite On | Off
Set depth writing mode. 设置深度写模式
Fog { Fog Block }
Set fog parameters. 设置雾参数
AlphaTest (Less | Greater | LEqual |GEqual | Equal | NotEqual | Always) CutoffValue
Turns on alpha testing. 开启alpha测试
Sets alpha blending mode. 设置alpha混合模式
Color Color value
设置当顶点光照关闭时所使用的颜色
ColorMask RGB | A | 0 | anycombination of R, G, B, A
设置颜色写遮罩。设置为0将关闭所有颜色通道的渲染
Set depth offset. 设置深度偏移
SeparateSpecular On | Off
开启或关闭顶点光照相关的平行高光颜色, 参考material页面。
ColorMaterial AmbientAndDiffuse |Emission
当计算顶点光照时使用每顶点颜色, 参考material页面。
8、BindChannels命令
允许你指定顶点数据如何映射到显卡中。
可编程顶点着色器使用时,BindChannels将没有效果。在这种情况下,绑定受顶点着色器输入控制。
默认情况下,Unity3D 会为你计算并绑定,但在某些情况下,你要使用自定义绑定。