Shader笔记-透明效果

●透明是游戏中经常使用的一种效果,在实时渲染透明效果,通常会在渲染模型时控制它的透明通道。在unity中实现透明效果有两种方式:透明度测试(只有全透明与不透明两种),透明度混合(透明度可控,关闭深度缓冲写入)。
●渲染顺序是在写透明效果shader中非常重要的参数,在渲染所有不透明的物体时,可以不用考虑渲染顺序,因为有深度缓冲的存在。它的原理是把模型离摄像机的距离记录下来,再渲染片元的时候,就把缓冲的深度值与当前距离摄像机的距离作比较,谁近一些就渲染谁。所以可以不用考虑渲染顺序,但是在写透明物体是需要关闭深度缓冲,因为如果透明物体在不透明物体前面,这个时候我们是需要渲染出来不透明物体的。如果打开了深度缓冲写入的话,不透明物体就不会渲染出来了。 这里给一个结论:就是我们需要先渲染不透明的物体然后再渲染透明的物体。
●这里有两个文章,都写的很详细。可以看看。文章1文章2

●透明度测试代码中调用了裁剪的方法:

//这里是根据阀值来裁剪值
clip(texColor.a-_Cutoff);

这个方法等价于:

if((texColor.a-_Cutoff)<0.0){
  discard;
} 

●AlphaTest标签设置:

Tags{"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
AlphaTest中_Cutoff值为0.37

AlphaTest全部的代码

●透明度混合代码中关闭了深度缓冲写入与开启混合值:

ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha

●AlphaBlend标签设置:

Tags{"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
AlphaBlend中AlphaScale值为0.238

AlphaBlend全部的代码

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容