Unity Shader实现全透明
和半透明效果
实现透明物体的两个方法:
※ 对于不透明物体,我们不必考虑它们的渲染顺序
也可以得到正确的渲染结果。因为Unity中强大的深度缓冲(Depth Buffer 或称作 Z-Buffer)
可以帮助我们完成物体的前后效果。
※ 对于半透明物体则需要使用透明度混合
,且需要正确的渲染顺序
。
- 透明度测试(Alpha Test)
使用的是一个极端霸道的机制——只要一个片元的透明度不满足设定的阈值,那么直接丢弃该片元。被丢弃的片元不会再进行任何处理(包括颜色缓冲);但是如果满足设定的阈值,那么就会继续按照平常的不透明物体的渲染方式来处理它(即进行深度测试、深度写入(ZWirte)
等)。也就是说透明度测试
不需要关闭深度写入
。
——最终的结果 要么完全透明(看不见);要么完全不透明(就是不透明)。
- 透明度混合(Alpha Blending)
该方法是可以得到真正的半透明效果!它会将当前的片元的透明度作为混合银子,与存储在颜色缓冲中的颜色值进行混合,得到新的颜色。但是,透明度混合需要关闭深度写入
!