在之前的记录中已经知道了透明度测试的原理。本节主要就在Unity中通过透明度测试实现透明效果进行实践。
原理回顾
透明度测试采用一种“非舍即留”的机制,即,若某片元的透明度不满足条件(通常小于某个阈值),则舍弃;否则就按照不透明物体去处理。也就是说,透明度测试是不关闭深度写入的。它产生的结果要么完全透明,看不到;要么完全不透明,与其他不透明物体一样。通常,使用clip函数在片元着色器中进行透明度测试。clip是CG的一个函数,其参数是裁剪时使用的标量或矢量条件。若,给定参数的任何一个分量是负数,就会舍弃当前像素的输出颜色。
实践运行平台:
Unity 2018.4.2f1 (64-bit)
准备工作在Unity中新建一个场景,命名为Scene_8_3。默认场景中将包含一个摄像机和一个平行光,并使用内置的天空盒子。为便于查看效果,在Window->Rendering->Lighting Seting->Skybox中去掉场景中的天空盒子。
新建Shader(右键Create->Shader->任一个Shader)并命名为AlphaTest;新建材质(右键Create->Material)并命名为AlphaTestMat,将新建的Shader拖拽赋给新建材质。
在场景中创建一个立方体,并拖拽到合适位置,将其材质修改为新建材质。
保存场景。
其他准备:一张透明纹理,其中每个方格的透明度不同(从左到右,从上到下依次是80%,70%,60%,50%)