19.Shader透明效果

目录:
1.透明剔除
2.透明
3.其他
3.1透明的渲染混合思路
3.2开启深度写入的半透明效果
3.3双面渲染透明度混合
透明剔除+透明完整代码:
https://github.com/smartgrass/MyCodes/tree/main/ShaderLearning/Transparent.shader
1.透明剔除
使用clip(a)函数, 对透明度小于a的像素去掉,达到剔除效果
核心代码 (Texture_uv.shader中修改)
随意一张透明图 剔除测试


2.透明
Queue设置为Transparent
设置混合因子 Blend SrcAlpha OneMinusSrcAlpha
片元着色器返回颜色时, a通道设置为_Alpha, _Alpha为[0,1]的小数

3.其他
3.1透明的渲染混合思路
先渲染不透明的物体,再渲染半透明的物体。
在半透明物体中,以相机距离由远到近顺序渲染。
半透明与不透明进行颜色混合
Queue预设

混合因子

混合操作

常见混合效果

扩展: 其他函数(需要用到再看)
https://blog.csdn.net/u010494204/article/details/106295571/
3.2开启深度写入的半透明效果

原因是, 关闭深度写入会造成错误排序, 解决方法是开启深度写入,但不输出颜色.
第一个pass将模型深度值写入深度缓冲中
第二个paas进行正常的透明度混合
关闭深度写入的核心代码
开启深度写入的核心代码
代码解释:
"RenderType"="Transparent" 用来指明该shader是使用了透明混合的(用透明就跟着写...)
"IgnoreProjector"="True" 忽略投射, 即不会受到投影器的影响
3.3双面渲染透明度混合
思路是使用两个Pass,一个Pass用于渲染正面,一个Pass用于渲染背面。
这样就可以保证渲染顺序的正确性。
原文: https://zhuanlan.zhihu.com/p/112567640
