Unity中的物体渲染顺序

big seven


前言

Unity中物体的渲染顺序


提示:以下是本篇文章正文内容,下面案例可供参考

一、摄像机渲染

Unity中的渲染顺序首先是由摄像机(Camera)确定的,以摄像机为单元进行渲染,最后在根据设置将多个摄像机渲染的画面结合起来。不同物体首先按照摄像机深度进行渲染,深度高将会覆盖深度低的相机画面。

二、划分渲染队列

在同一个摄像机下,Unity以物体材质上的渲染队列(RenderQueue)数值进行了划分,将所有物体分为了两个队列

  • RenderQueue<2500,Opaque队列,通常是不透明物体
  • RenderQueue>2500,Transparent队列,通常是透明物体
  • 同一个摄像机下,Unity会先渲染Opaque队列中的不透明物体,然后渲染Transparent队列中的透明物体。

三、不透明物体的渲染

在Opaque队列中的物体,根据包围盒中心距离摄像机的距离,由近到远排序,进行渲染,Opaque队列中物体都是不透明物体,通常开启了ZWrite,由近到远渲染可以做遮挡剔除,减少了OverDraw,Opaque队列中的物体,可以设置SortingLayer,SortingOrder,Shader的RenderQueue等值,但是不会起作用,只会由距离摄像机的深度决定,距离摄像机近的先进行渲染,开启深度写入后,相同位置深度靠后会被裁剪掉。

四、透明物体的渲染

透明物体的Shader通常关闭了ZWrite,SorintLayer、SortingOrder,RenderQueue这些值的设置会影响显示的顺序,所以透明物体的渲染顺序遵循的规则是

  • 根据SortingLayer层的顺序进行渲染,SortingLayer可以在Edit-projectsettings-Tags&Layer中进行设置,在代码中可以通过render.sortingLayer="layer";这样的代码进行设置。
  • SortingLayer相同的情况下根据SortingOrder的顺序进行渲染
  • SortingLayer跟SortingOrder都相同的情况下,根据RenderQueue的顺序进行渲染
  • 都相同的情况下,根据包围盒中心距离摄像机的距离,由远到近进行渲染

五、UGUI元素的渲染

UGUI元素使用的UIDefault材质通常是RenderQueue为3000,走的是透明物体的渲染,所以根据SortingLayer -> SortingOrder -> RenderQueue 的顺序进行排序,当以上值都相同时,根据元素在 Hierarchy 视图中的顺序进行。


渲染顺序总结

Unity对于渲染顺序并没有那么细的划分,只是以2500为界限划分了两次渲染过程:第一次渲染,2500及以下按照sort layer—>sort order—>render queue优先级排序;第二次渲染,2500以上按照sort layer—>sort order—>render queue优先级排序; 因为2500及以下shader往往开启深度写入,所以sortlayer、sort order及render queue造成的渲染顺序改变对于显示顺序并无影响;

1、不同的物体首先由摄像机的深度(Depth)决定,深度值越大优先级越高。

2、同摄像机渲染顺序先渲染不透明的物体,后渲染透明物体,透明物体的渲染层级更高。

3、同摄像机不透明物体渲染顺序由对象上的Z值决定。不透明物体由近到远排序优先。

4、同摄像机下透明物体

  1. SortingLayer
    SortingLayer 属性我们前面介绍过,它是我们渲染对象的排序层级,在编辑面板中越靠后的层级越高,越往后渲染。当两个渲染对象的SortingLayer一致的时候,比较Order In Layer的数值,数值越大越靠后渲染,层级越高。

  2. RenderQueue
    当上面的条件都一致的时候,我们判断RenderQueue的值,值越大,越靠后渲染,层级越高。

  3. 深度排序
    透明物体由远到近排序优先。

 

  • 15
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity物体间隔闪烁可能是由于以下几个原因导致的: 1. 光照问题:物体可能处于一个动态光源的影响下,当光源发生变化时,物体的亮度也会发生变化,造成闪烁。解决此问题可以尝试使用静态光源,或者调整光源参数,使光照更加稳定。 2. 材质问题:物体使用的材质可能存在问题,如反射率过高、反射模型设置不当等,导致进入和退出光照区域时产生闪烁现象。解决此问题可以重新调整材质的属性,使其更加适合当前的环境光照。 3. 碰撞体问题:物体存在错位或重叠的碰撞体,导致物体在运动时产生闪烁。解决此问题可以检查物体的碰撞体设置,确保其与其他物体正常交互,并修复碰撞体设置不当的问题。 4. 代码逻辑问题:物体的脚本可能存在问题,如在更新位置时出现错误的计算或赋值,导致物体闪烁。解决此问题可以检查物体的脚本代码,确保逻辑正确,并修复存在的bug。 以上是一些可能导致Unity物体间隔闪烁的原因和解决方法,具体还需要根据实际情况进行调试和排查。 ### 回答2: 在Unity物体间隔闪烁可能是由于多个原因造成的。其一种可能是物体渲染顺序错误导致的。在Unity物体渲染顺序是由它们所处的渲染层级(Render Sorting Layer)和渲染顺序(Order in Layer)决定的。如果两个物体渲染顺序有误,就可能导致它们交替显示,从而造成间隔闪烁的效果。解决这个问题可以通过在物体的Sprite Renderer组件调整渲染层级和渲染顺序来改变它们的渲染顺序,从而解决闪烁问题。 另一个可能的原因是光照设置不当导致的。在Unity,光照的设置会影响物体的表面光照效果,如果光照设置不当,可能会导致物体间隔闪烁。可以尝试调整场景的光照设置,比如调整灯光的位置、角度和强度,以及调整物体的材质和光照贴图等参数来解决闪烁问题。 此外,物体之间的碰撞和触发也可能导致闪烁。如果物体之间存在碰撞或触发事件,并且这些事件的处理函数有可能修改了物体的位置或其他属性,可能会导致物体间隔闪烁的效果。解决这个问题可以通过检查碰撞和触发事件的代码,确保其逻辑正确,并避免在处理函数物体属性进行不必要的修改。 总结起来,解决Unity物体间隔闪烁的问题需要分析具体情况,可能的原因包括渲染顺序错误、光照设置不当以及碰撞和触发事件的逻辑错误等。通过调整渲染顺序、光照设置和检查碰撞和触发事件的逻辑,可以解决物体间隔闪烁的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值