Unity_Shader学习(六)基础透明Shader

本文详细介绍了Unity中透明Shader的实现,包括渲染顺序、透明度测试和透明度混合。透明物体需按远近顺序渲染,透明度测试通过_CutOff阈值决定片元是否保留,透明度混合使用Blend命令调整混合因子。此外,文章还讨论了开启深度写入的透明处理及解决透明物体自身可见性问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天学习了简单的透明Shader的实现,真的是比想象中简单很多,但是有很多需要注意的点,特别是渲染顺序!

 

1. 渲染顺序

首先我们要知道,对于透明物体,他只开启了深度测试而没有开启深度写入

我们来考虑这样一种情况,物体A是透明的,物体B是不透明的。物体A在物体B前面,刚好遮住了B。

(1)如果我们先渲染物体B,B将会写入颜色缓冲与深度缓冲中。然后渲染物体A,我们发现物体A是透明物体,它将会进行深度测试,发现A比B离摄像机更近,因此我们将A的信息与颜色缓冲中的信息(即B的信息)进行混合,得到了正确的结果

(2)如果我们先渲染物体A,A发现颜色缓冲与深度缓冲是空的,于是它直接写入颜色缓冲。然后渲染B,B发现深度缓冲是空的,于是它不去考虑颜色缓冲有没有信息,直接用自己的信息覆盖了原来的颜色缓冲中的信息。这样视觉显示上B就在A前面了,得到错误的结果

据此,我们确定不透明物体必须先于透明物体渲染

 

我们来考虑另一种情况,物体A和B都是透明的,物体A在物体B前面,遮住了物体B。

(1)如果先渲染物体B,物体B的信息会写入颜色缓冲。然后渲染物体A,A会与颜色缓冲中的信息进行混合,得到相应的效果

(2)如果先渲染物体A,然后渲染物体B,我们就得到了刚好相反的结果...

据此,我们确定透明物体必须按由远至近的顺序渲染

 

2.透明度测试

在UnityShader中有以下几个渲染队列:

Background:这是最先渲染的队列,通常用于渲染背景信息

Geometry:一般不透明物体都在这个队列中

AlphaTest:需要透明度测试的物体使用这个队列

Transparent:进行透明度混合的物体使用这个队列

Overlay:该队列用于实现一些叠加效果

 

接下来我们来实现透明度测试,透明度测试是指,只要一个片元的透明度不满足条件,就舍弃这个片元。也就是说一个片元要么全部保留,要么全部舍弃,我们这样就得到完全透明与不透明两种极端的片元类型。

Shader "Custom
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我只知道我要大开杀戒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值