第8章
- 深度缓冲的原理:根据深度缓存中的值来判断该片元距离摄像机的距离,当渲染一个片元时,需要把它的深度值和已经存在于深度缓冲的值进行比较,如果有东西挡住它,这个片元就不显示。
- 两种方法实现透明效果
- 透明度测试:透明度小于某个值,该片元就不显示。
- 透明度混合:和颜色缓冲的值进行混合。需要关闭深度缓冲的写入 ZWrite Off(不关闭的话需要写两个Pass)
- 必须先渲染不透明再渲染半透明物体
- 渲染队列
- Background 1000。会在其它队列之前渲染
- Geometry 2000。默认的渲染队列
- Alpha Test 2450。用于透明度测试的物体的渲染
- Transparent 3000。用于透明度混合的物体的渲染
- Overlay 4000。最后渲染
- 透明度测试
- 使用 clip(float) 函数,参数是负数时着色器就会直接返回
- 透明度混合
- 在Pass内需要写ZWrite off;还需要写混合模式,使用Blend命令
- 开启深度写入的半透明效果
- 使用两个Pass,第一个Pass开启深度写入但不输出颜色
Pass{ ZWrite On //ColorMask 后面接RGB|A|0,分别表示与其它Pass的RGB/A通道混合/不混合 ColorMask 0 }
- 混合命令Blend,和ZWrite Off一样,写在Pass的Tags下面
- Blend SrcFactor DstFactor(RGB通道和A通道使用同一个混合因子)
- Blend SrcFactor DstFactor, SrcFactorA DstFactorA
- 混合因子:
- One,Zero
- SrcColor,SrcAlpha(源颜色的RGB,源颜色的A通道)
- DstColor,DstAlpha
- OneMinusSrcColor,OneMinusSrcAlpha
- OneMinusDstColor,OneMinusDstAlpha
- 混合操作:
- Add
- Sub
- RevSub
- Min
- Max
- 剔除渲染正背面的命令,Cull
- Cull Back|Front|Off (剔除背面|正面|双面同时渲染)
- Unity默认剔除背面