从FrameDebugger看Unity渲染

article/2025/7/19 12:51:16

从FrameDebugger看Unity渲染(一)

Unity如何渲染一个3D+2D的游戏画面,今天通过FrameDebugger来看下Unity内置渲染管线的渲染策略, 后续再出一些URP渲染管线相关的文章。

对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

Unity 渲染场景的几个主要部分

Unity内置渲染管线是基于摄像机来进行渲染的,每个摄像机按照摄像机的渲染顺序来依次渲染,渲染完一个摄像机,再渲染下一个摄像机。对于UI 2D而言,相当于也是一个独立的UI摄像机,还有一种特殊的OnGUI会绘制2D GUI物体,走的是GUI Paint。如图所示 FrameDegbuger 最外层的截图如下:

FrameDebugger显示渲染有3个部分,第一个是Camera.Render, 表示的是基于场景中的摄像机引起的渲染。第二部分UGUI.Rendering.RenderOverlays,表示的UGUI中2DUI引起的渲染。第三部分GUI.Repaint, 表示的是OnGUI引发的2D UI物体渲染; 如果你的项目中没有OnGUI的渲染物体,FrameDebugger中就不会有相关的显示。第一部分Camera.Render里面有每个摄像机按照摄像机的渲染顺序依次次排列下来。如图所示,目前场景中有两个摄像机,FrameDebugger按照摄像机的渲染顺序一次排列下来。

Unity 摄像机渲染处理哪些事情?

如上图所示,每个摄像机有3个部分,第1部分UpdateDepthTexture是处理阴影投影相关。如果整个场景中没有实时的阴影投影,就不会有这一部分。第2部分Drawing是具体的绘制物体相关, 第3部分Camera.ImageEffects相关是摄像机的后期处理相关。展开 UpdateDepthTexture, 分为了Clear与DepthPass.Job两个部分,如图所示:

Clear是清理, DepthPass.Job详细的记录里面哪些物体做了ShadowCaster Pass。展开Drawing部分, FrameDebugger根据场景中涉及到的渲染队列,一次进行渲染,如下图所示,首先是Render.Opaque渲染队列,随后是Render.Transparent渲染队列。

Unity 摄像机范围外的物体不会被渲染

FrameDebugger中详细的显示了在当前帧中Unity实际渲染了哪些物体。在摄像机范围内的物体会被Unity渲染,不在摄像机范围内的物体,是不会被摄像机渲染的。渲染物体时,还会做阴影计算,从阴影纹理里面获取阴影数据。

当前帧中在当前摄像机下渲染了哪些物体,都能通过FrameDebugger看清楚。点击FrameDebugger中的每个渲染物体,就能对应到场景中的具体的物体。

被渲染物体的详细信息

最后Unity渲染每个物体的时候,我们能够看到渲染时候的详细信息,如图所示:

Event #554: 第554次绘制事件;

Shader: 渲染这个物体采用的是哪个Shader的哪个SubShader;

Blend: 着色到目标的颜色混合规则;

ZClip: 开启片元深度检测模式,如果一个片元在near与far的外面就会被丢弃;

ZTest:深度测试的规则,根据通过深度测试的才会被渲染;

ZWrite: 是否将当前片元的深度信息写入深度缓存;

Cull: 裁剪剔除的模式,有back, front, none三种模式,分别是裁剪剔除掉背对摄像机的面,裁剪提出掉真对摄像机的面和不裁剪剔除。

Why Drawcall cannot be batched?:不能合批的原因描述;

ShaderProperties: CPU传递给GPU的数据的详细信息;

今天的FrameDebugger与渲染的分享就到这里了,关注我们,获取更多的渲染优化相关的教程与知识。


http://chatgpt.dhexx.cn/article/4v71n6nP.shtml

相关文章

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

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

Unity渲染顺序(2)

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

Unity渲染顺序(1)

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

Unity的渲染流程

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

Unity 渲染原理

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

Unity标准化的场景渲染流程

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

Unity3D性能优化——渲染篇

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

Unity中的灯光和渲染

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

execv 函数的应用

execv函数族:系统来调用某程序模块 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,完成摇身一变累了吧,休息会 转载 execve函数 书接上回,上回书咱们说到,进…

Linux内核Hook系统调用execve

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

执行新程序 execve()

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

简单的execve流程

本文转载于网络 基于Linux0.11源码来叙述该功能,源码可以在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源码来叙述该功能,源码可以在oldlinux.org上自行获取。 execve功能介绍 execve是用于运行用户程序(a.out)或shell脚本的…

5.execve()到底干了啥?

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

Linux系统编程(再论execve)

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

Linux0.11 execve函数(六)

系列文章目录 Linux 0.11启动过程分析(一) Linux 0.11 fork 函数(二) Linux0.11 缺页处理(三) Linux0.11 根文件系统挂载(四) Linux0.11 文件打开open函数(五&#xff09…

C语言 execve()函数使用方法

1.君の名は execve() – 叫做执行程序函数 就像Python中的os.system(cmd)这个函数,我们可以用这个函数来执行我们的shell脚本,单独的shell命令,或者是调用其他的程序,我们的execve()这个函数就和Python中的os.system函数类似&am…

SPSS-因子分析

因子分析 有可能用较少的综合指标分析存在于各变量中的各类信息,而各综合指标之间彼此是不相关的,代表各类信息的综合指标称为因子。定义:因子分析就是用少数几个因子来描述许多指标或因素之间的联系,以较少几个因子反映原资料的 …

spss进行主成分分析

什么是主成分分析 简而概之, 就是一组数据受太多因素影响, 选出几个能代表他们的因素,并进行线性组合得到一组比原维度小的因素组合, 作为新的因素集 用spss操作 随手拿出一组数据 1.数据统一标准化 因为我们得到的原始数据大小,类型不一, 一起分析会不准确, 所以将数据全部…