美文网首页android干货Unity干货Unity基础入门分享
UGUI添加半透明3d模型层级错乱问题

UGUI添加半透明3d模型层级错乱问题

作者: 阿飞咯 | 来源:发表于2019-05-08 23:13 被阅读0次

    本次研究需要达到的目的,3d模型能够正确参与UGUI排序,不会造成层级错乱。
    前提:3d物体在Transparent层渲染,ZTest LEqual,ZWrite On,Blend SrcAlpha OneMinusSrcAlpha。


    image.png

    设想一:
    在UGUI中穿插半透明模型,最先想到的就是通过Z排序,当我们半透明物体Z比UGUI背景Z小则在它上面,比其Z大则在它前面,于是收起我们调节Z轴:


    image.png

    事与愿违,我们发现3D物体并没有成功与背景颜色混合,打开FrameDebuger查看原因:


    image.png

    从图上我们可以看出3D模型在UGUI之前进行渲染,因为开启了ZWrite,于是在UGUI渲染的时候,ZTest失败,所以不会有UGUI参与混合。所以我们需要解决的是3D模型在背景渲染完成之后再进行渲染,于是想到了Canvas上的Order in Layer控制。我再Unity2018上面发现,只要Order in Layer小于0,则UGUI会在3d物体之前渲染,这里我猜想3d物体默认的Layer就是0,暂时没有找到相关的api。
    设想二:
    设置背景Order in Layer值小于0


    image.png
    image.png

    这里我们可以看出和背景层级正确,渲染顺序也正确那我们再继续插入前景,根据上面的结论,我们只要前景的Order in Layer设置大于0就行了,那么我们看:


    image.png
    image.png

    这里渲染顺序正确的,但是为什么前景还是被模型给挡住了呢,并且没有混合,所以这里应该是ZWrite的问题,前景的ZTest测试失败,查看后发现果然是前景的Z比透明模型的Z大,所以造成了这样的结果,重现调节Z轴,最后得到效果


    image.png

    结论:Order in Layer可以控制3D模型与UGUI的渲染顺序,只需要背景的layer小于0,前景layer大于0,而Z轴影响晚于3D模型渲染ui(也就是Layer大于0的ui)的ZTest,所以我们前景的UI的Z轴一定要小于模型的Z轴

    相关文章

      网友评论

        本文标题:UGUI添加半透明3d模型层级错乱问题

        本文链接:https://www.haomeiwen.com/subject/gmyboqtx.html