Shader其他整理

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 会为你计算并绑定,但在某些情况下,你要使用自定义绑定。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值