unity 半透明混合问题_半透明物体混合顺序问题

同一渲染队列的物体的绘制顺序

同一渲染队列的情况下,Unity根据物体网格中心点与摄像机的距离(有别于深度Z)来排序,距离越大的物体,越先绘制。

d代表网格中心与摄像机的距离,视角改变会导致两个Cube的混合顺序也改变

可以看出,单靠与摄像机的距离来判断,会出现异常。正常情况下,红色Cube应该要一直被压在蓝色Cube下面,直至视角完全翻转过来。

对于同一个物体而言,它自身的网格之间若有交叉重合,则是按照顶点顺序来绘制,即先绘制的面会被后绘制的面给覆盖:

左边4面翅膀作为单个物体,右边4个翅膀分离为4个物体

用Render Queue值排序

这种方式优先度要大于按距离排序,比较“野蛮”,但某程度上解决了混合顺序异常的问题:

蓝色Cube的绘制顺序设成3001,大于红色Cube的3000

视频中可以看出,此种方式同时带出了另外一个问题:即使视角怎么变,蓝色都是压在红色上。这种方式在视角不会发生较大翻覆的情况下(比如横版的2.5D游戏),有时能符合需求。

开启深度写入

开启深度写入会破坏半透明混合

对于半透明的物体A开启深度写入,会使覆盖他的半透明物体B失去了“半透明”效果,因为深度测试的结果是要么画要么完全不画,不会进行混合:

即使视角改变,绘制顺序也一直保持正确,但会丢失“混合”效果

如果能容忍这种丢失混合效果的情况,那么开启深度写入能算勉强解决混合顺序错乱的问题。

开启深度写入的半透明,出自《UnityShader入门精要》

在《UnityShader入门精要》里面介绍透明度混合也有类似的例子。开启深度写入会导致半透明的物体不能成为“底图”,即无法产生混合效果。顺便一提书里面是采用多Pass的形式做深度写入,而URP只支持Single Pass,详见官方给出的表格。在URP用MultiPass要用RendererFeature的形式实现,点此参考示例。

切分网格

对一些不会发生交叉的网格,用切分网格的方式来解决透明混合问题效果较佳:

右边把翅膀切成4份,绘制顺序正常

Post Views:

140

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值