Unity3D教程宝典之Shader篇:第十一讲剔除及深度测试

原文地址:http://blog.sina.com.cn/s/blog_471132920101dfvt.html
Shader第十一讲
剔除及深度测试
一 Culling阴影面剔除

Culling阴影面剔除是一种优化技术。所有的多边形都有正反两面,而你永远只能看见其中一面,不信的话拿张纸板或者一面镜子看看你能不能同时看到两面


【风宇冲】Unity3D教程宝典之Shader篇:第十一讲剔除及深度测试

。通常多边形面向屏幕里面的背面,我们看不见,所以会将该面剔除。

Cull Off 关闭阴影面剔除

Cull Back 剔除背面

Cull Front 剔除正面

二 Depth Testing深度测试

Depth Testing:深度测试,也叫深度缓冲。只有最靠近观察者
的物体会被绘制。深度即Z,该值越小表示离
观察者

越近,该值越大表示离
观察者

越远。

Shader里默认有如下代码

ZWrite On

ZTest LEqual

意思即使Shader里没有写任何关于Depth Testing的代码,Shader也会执行深度写入及深度测试。**[ZWrite]深度写入
**
是否此物体的像素深度会被记录(默认记录),

ZWrite On 深度记录(默认On)

ZWrite Off 不记录此深度,通常用于半透明物体,

**[ZTest]深度测试
**

ZTest Less | Greater | LEqual | GEqual | Equal | NotEqual | Always
默认是 LEqual。 即当深度小于或者等于 深度最小值时,渲染物体,即渲染最近的物体。
【物体
显示被遮挡
部分】物体Shader 里
在正常的Pass前加一个Pass:

Ztest GreaterZWrite Off

即可但是Unity官方所有半透明Shader都是不写深度的
因此半透明物体透明度很低的话, 物体被遮挡部分就显示不了。【显示被

半透明

物遮挡
的东西】拷贝半透明Shader,保留Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}

Blend SrcAlpha OneMinusSrcAlpha把ZWrite Off改成ZWrite On即可
**[Offset]
**

**深度偏移
**
Offset Factor,Units

此语句用两个参数(Factor和Units)来定义深度偏移。
Factor参数表示 Z缩放的最大斜率的值。
Units参数表示可分辨的最小深度缓冲区的值。

于是,我们就可以强制使位于同一位置上的两个集合体中的一个几何体绘制在另一个的上层。例如偏移量Offset 设为0, -1(即Factor=0, Units=-1)的值使得靠近摄像机的几何体忽略几何体的斜率,而偏移量为-1,-1(即Factor =-1, Units=-1)时,则会让几何体偏移一个微小的角度,让观察使看起来更近些。

0,-1 会将物体拉近相机
-1,-1 会在斜着(甚至水平)去看一个物体(例如平面时),看起来更近

你可能感兴趣的:(Unity3D教程宝典之Shader篇:第十一讲剔除及深度测试)