Unity中的物体渲染顺序

article/2025/7/19 9:42:06

big seven

文章目录

  • 前言

    一、摄像机渲染

    二、划分渲染队列

    三、不透明物体的渲染

    四、透明物体的渲染

    五、UGUI元素的渲染

    总结


前言

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. 深度排序
    透明物体由远到近排序优先。

 


http://chatgpt.dhexx.cn/article/FOjSwkFn.shtml

相关文章

Unity渲染流程概述

本篇的任务是回答&#xff1a;在Untiy的渲染流程中CPU和GPU分别做了什么。 渲染到设备屏幕显示的每一帧的画面&#xff0c;都经历几个阶段的加工过程&#xff1a; 应用程序阶段&#xff08;CPU&#xff09;&#xff1a;识别出潜在可视的网格实例&#xff0c;并把他们及其材质…

Unity_渲染_灯光_前向渲染

前向渲染路径 前向渲染的作用和意义场景内有多个灯光,如何渲染每个灯光对物体的影响 前向渲染的作用和意义 前向渲染的作用:处理多光源的渲染,多光源渲染在unity 有2中渲染方式 前向渲染和延时渲染 .延时渲染主要用于主机,PC平台,不在本次讨论范围.主要来研究前向渲染前向渲染…

【Unity渲染】前向渲染和延迟渲染的区别及切换

前向渲染和延迟渲染通道的区别&#xff0c;主要在对于光源的处理上。 Unity默认是前向渲染通道&#xff0c;如果光源特别多&#xff0c;可以使用延迟渲染。 前向渲染 使用前向渲染路径时&#xff0c;被照亮的对象将在单独的通道中进行渲染。根据场景中的光源数量以及它们是否…

从FrameDebugger看Unity渲染

从FrameDebugger看Unity渲染(一) Unity如何渲染一个3D2D的游戏画面&#xff0c;今天通过FrameDebugger来看下Unity内置渲染管线的渲染策略, 后续再出一些URP渲染管线相关的文章。 对啦&#xff01;这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白&#xff0c…

UnityShader入门精要——Unity中的渲染优化技术(二)

减少DrawCall数目 最常见的优化技术——批处理。实现原理为减少渲染每一帧所需的drawcall数目。使用同一个材质的物体可以一起处理。 优点缺点动态批处理切处理都是Unity 自动完成的&#xff0c;不需要我们自己做任何操作&#xff0c;而且物体是可以移动的限制很多&#xff0c…

Unity渲染顺序(2)

Camera 除了Screen Space - Overlay(屏幕空间覆盖模式)下的Canvas,场景中的其他物体需要渲染到屏幕中&#xff0c;都需要在指定的相机的绘制下。场景中可以创建多个相机&#xff0c;每个相机所拍摄的内容可能并不相同&#xff0c;在场景中有多相机的情况&#xff0c;不同的相机…

Unity渲染顺序(1)

添加排序层级 在Unity编辑器的右上角选择Layers 按钮&#xff0c;在下拉菜单中点击Edit Layers…选项&#xff0c;将显示当前Unity的Tags, Sorting Layers&#xff0c;和Layers 编辑选项。 Sorting Layers是Unity中对排序的层级的定义块&#xff0c;在面板中越靠后的排序层级越…

Unity的渲染流程

Unity中坐标空间的转换&#xff1a; Unity的渲染流程&#xff1a; 渲染到设备屏幕的每一帧画面都要经历如下几个阶段&#xff1a; 应用程序阶段&#xff08;CPU&#xff09;&#xff1a;将材质和模型数据发送给GPU 几何阶段&#xff08;GPU&#xff09;&#xff1a;进行顶点…

Unity 渲染原理

1 渲染流程 应用程序阶段&#xff08;CPU&#xff09;&#xff1a;识别出潜在可视的网格实例&#xff0c;并把他们及其材质提交给 GPU 以供渲染。几何阶段&#xff08;GPU&#xff09;&#xff1a;进行顶点变换等计算&#xff0c;并将三角形转换到齐次空间并进行裁剪。光栅化阶…

Unity标准化的场景渲染流程

笔者用的unity版本为2020.3.30f1c1&#xff0c;开一个HDRP模板场景&#xff0c;OK开始我们的操作。 第一步&#xff1a;删除场景中的所有东西只留下竹林玻璃房作为展示场景&#xff0c;将所有物体勾选Static&#xff0c;新增一个摄像机&#xff0c;如下图&#xff1a; 第二步&a…

Unity3D性能优化——渲染篇

大渣好&#xff0c;我又来了。 之前的文章中&#xff0c;我们了解了Profiler工具&#xff0c;以及在实际项目中unity的CPU优化分析及方法&#xff0c;本文我们主要了解在我们的项目中GPU的性能分析&#xff0c;以及对GPU性能进行优化的相关技术。 渲染优化 在了解优化渲染前&a…

Unity中的灯光和渲染

一&#xff1a;Unity中的灯光 ——Directional Light&#xff1a;模拟太阳光。它与位置无关&#xff0c;是平行光&#xff0c;可以调整旋转角度模拟昼夜 ——Spot Light&#xff1a;模拟车灯、手电筒的光、舞台灯光 ——Point Light&#xff1a;模拟灯泡 ——Area Light&#…

execv 函数的应用

execv函数族&#xff1a;系统来调用某程序模块 int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ..., char * const envp[]); int ex…

Linux 0.11-execve函数-35

Linux 0.11-execve函数-35 execve函数读取文件开头 1KB 的数据解析这 1KB 的数据为 exec 结构判断是脚本文件还是可执行文件准备参数空间设置 eip 和 esp&#xff0c;完成摇身一变累了吧&#xff0c;休息会 转载 execve函数 书接上回&#xff0c;上回书咱们说到&#xff0c;进…

Linux内核Hook系统调用execve

资源下载地址&#xff1a;linux内核hook系统调用execve函数-Linux文档类资源-CSDN下载 &#xff08;已在内核为 4.19.0-amd64-desktop版本uos编译通过&#xff0c;并成功达到目的&#xff09; 在Linux系统中&#xff0c;用户层程序无法直接控制系统内核&#xff0c;只能通过系…

执行新程序 execve()

新程序的执行 一&#xff1a;execve() 之所以叫新程序的执行&#xff0c;原因是这部分内容一般发生在fork()和vfork()之后&#xff0c;在子进程中通过系统调用execve()可以将新程序加载到子进程的内存空间。这个操作会丢弃原来的子进程execve()之后的部分&#xff0c;而子进程…

简单的execve流程

本文转载于网络 基于Linux0.11源码来叙述该功能&#xff0c;源码可以在oldlinux.org上自行获取 _sys_execve:lea EIP(%esp),%eax #取堆栈中存放系统调用的返回地址的地址pushl %eax #将该地址入栈call _do_execve #调用do_execve函数addl $4,%esp #丢弃该地址ret这边做了一个很…

Linux0.11系统调用之execve流程解析

Linux0.11系统调用之execve流程解析 前言execve功能介绍execve本质execve系统调用流程总结 前言 本文是基于Linux0.11源码来叙述该功能&#xff0c;源码可以在oldlinux.org上自行获取。 execve功能介绍 execve是用于运行用户程序&#xff08;a.out&#xff09;或shell脚本的…

5.execve()到底干了啥?

导语 很多童鞋有分析阅读Linux源代码的强烈愿望&#xff0c;可是Linux内核代码量庞大&#xff0c;大部分人不知道如何下手&#xff0c;以下是我分析Linux源代码的一些经验&#xff0c;仅供参考&#xff0c;有不实之处请大神指正&#xff01; 1.要想阅读内核首先要进入内核&…

Linux系统编程(再论execve)

文章目录 前言一、execve的第三个参数二、进程空间三、命令行参数规范四、optstring规则的扩展定义总结 前言 本篇文章我们继续来研究一下execve这个系统调用&#xff0c;上篇文章已经讲解了前两个参数的意义了&#xff0c;那么这篇文章就来讲解一下第三个参数的具体含义。 一…