Unity天空盒渲染顺序及shader中的zwrite的设定

 今天在写shader的时候发现这样一个问题:将一个不透明物体(该物体的queue为geometry或者background)的Zwrite设置为Off后,拖入一个空的场景,发现这个物体并不能够在场景中渲染出来。只有当queue的值为tranparent以上的时候(即render queue的值为3000以上)才可以在场景中出现。然后通过frame profile检测了一下渲染序列,并通过google查看了相关讨论,发现在unity5.x之后skybox的渲染顺序发生了变化。目前的渲染顺序为2500.5,在所有的opaque物体渲染完了以后才进行天空盒的渲染。

       这时回到之前的问题,拖入场景的物体此时已经渲染完毕,并且因为zwrite off的缘故,在深度缓存中没有该物体的信息。之后进行skybox的渲染。skybox的渲染对于ztest是采用的默认设置,由于物体处的z值没有经过改变,还是最大值1,所以skybox的深度测试通过,将skybox的颜色写入颜色缓冲区内,也就是说把之前物体的渲染结果给覆盖掉了,从而产生了以上现象。

     解决办法就是将该物体的zwrite off改为on,或者将render queue的值改为>2500。

     总结一下渲染顺序就是:geometry--->skybox----->transparent/overlay。在geometry渲染的物体,不能将深度写入关闭,否则就会被skybox给遮挡住。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值