实时渲染要实现透明效果,需要在渲染模型时控制它的透明通道,alpha channel
通常使用两种方法来实现透明效果:
透明度测试 alpha test
只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃,被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响,否则就按普通不透明物体的处理方式处理
1 | void clip(float4 x) |
1 | Shader "My/AlphaTest"{ |
透明度混合alpha blending
深度缓冲 z-buffer
渲染队列 render queue
双面渲染原理
把双面渲染工作分成两个Pass:第一个pass只渲染背面,第二个pass只渲染正面,由于Unity会顺序执行Subshader中的各个Pass,因此我们可以保证背面总是在正面被渲染之前渲染,从而保证正确的深度渲染关系。
总结
- 一共有两种方式可以实现,一个是控制透明度测试alphaTest 小于某个值就舍弃,简单粗暴,开启深度写入。
- 透明度混合,可以有两个通道第一个把背面的渲染出来,第二个把正面渲染出来 然后颜色混合,需要关闭深度写入