unity渲染问题

   unity资源商店 Realistic Effects Pack 特效包中有一个粒子特效是在地面形成一条裂缝


    通过查看源码明白实现这种效果的原理

CrackMesh一个裂缝形状的面片网格,其包含Crater(裂缝墙壁)和Lava(熔岩)子物体

    

crater和lava上都添加了一个脚本作用是将本物体的渲染队列设为1998,而普通几何体既Geometry对列的值为2000(unity中渲染队列的值越小就越先被渲染)。

CrackMesh采用的shader中设置了渲染队列为1999,并且设置ColorMask 0,开启深度写入。

所以最终的渲染顺序是 1、先渲染crater和lava(位于同一队列)。2、再渲染CrackMesh,由于设置了ColorMask  0,所以不会向颜色缓冲中写入任何值,而是仅仅在深度缓冲中写入了深度信息。(此时可以通过CrackMesh看到lava和crater)。3、最终才渲染场景中的其他物体(位于Geometry队列),而位于CrackMesh之后的物体会被剔除(CrackMesh开启了深度写入)。

    测试:

创建一个plane,一个cube,一个sphere


cube的材质使用untiy的默认shader,为sphere创建一个shader,在该shader中设置Tags { "Queue"="Geometry-2" }

为plane创建一个shader,设置Tags { "Queue"="Geometry-1" },ColorMask为0,Zwrite为On。

调整摄像机观察到如图的结果。

在帧调试器窗口中可以看到这三个物体的渲染顺序。





ps:

1多个不透明物体如果仅设置不同的renderqueue而不关闭深度写入,最终的渲染结果与设置相同的renderqueue(不关闭深度写入)相同。renderqueue更适用于设置透明与不透明物体之间的渲染顺序。(之前一个错误的理解是深度检测只在相同的renderqueue的物体间进行,而事实是深度检测是对所有物体进行的。)

    2renderqueue相同的情况下,距离摄像机远近不同的物体的渲染顺序不确定。假设A物体在摄像机与B物体之间(AB都为不透明物体)A关闭了深度写入,B开启了深度写入。则最终的渲染结构有两种可能。1可以透过A看到B(先渲染A再渲染B)2正常显示(先渲染B再渲染A)。

    3frame debugger显示unity是按从距离摄像机近到远的顺序依次给每个物体写入深度信息



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值