Unity的渲染流程

article/2025/8/12 13:06:03

Unity中坐标空间的转换:

 

 

Unity的渲染流程:

渲染到设备屏幕的每一帧画面都要经历如下几个阶段:

应用程序阶段(CPU):将材质和模型数据发送给GPU

几何阶段(GPU):进行顶点变换计算

光栅化(GPU):将三角形转化为片元,并对片元着色。

 

Cpu:准备需要渲染的对象。

  1. 把可视的对象,进行遮挡剔除和视椎体剔除,并将渲染对象排序。
  2. 设置渲染对象的渲染状态,包括材质,模型,着色器
  3. 发送drawcall

会为每一个渲染兑现的每一个材质生成一个渲染批次batch,(合批就是将多个材质合成一个批次)

setPass Call是在渲染状态发生改变时才会被调用,和drawcall相伴产生。在某些特定情况也不一定对等,如一个batch中用到了多个pass,不同的pass,cpu将发送新的setpass call和drawcall。而在静态批处理中,由于顶点限制而不能再同一批次处理而被分割的紧邻的多个批次,因为使用的是相同的渲染设置,所以只产生一个set pass call

Setpass call 是告诉gpu接下来要用到哪些资源,需抓经准备。执行时,会向显存中传入大量的资源信息,包括纹理。

Drawcall 是要求gpu根据顶点数据进行绘制

 

Fbx(里面包含了uv,顶点位置,法线,切线等信息)加载到内存中,通过mesh render 渲染出来

Skindned mesh render : 带蒙皮的骨骼,把物体的顶点,法线,切线等信息传个gpu渲染出来。

Mesh filter:将模型信息传递给gpu

Mesh render :将顶点等渲染信息传递给GPU

Skinned mesh render 和 mesh render 的区别就是,前者用于有蒙皮动画的mesh, 后者用于静态的mesh。

 

 

Gpu:

渲染管线: 顶点着色器、光栅化、片段着色器(alpha测试、模板测试、深度测试、blend、gbuffer、brondbuffer,framebuffer)、显示器

 

顶点着色器1.计算顶点的颜色;2. 将物体坐标系转换到相机坐标系;

每个顶点执行一次顶点着色器,在此阶段可以进行透视投影,顶点光照,纹理计算,蒙皮。也可以修改顶点位置生成程序式动画,例如模拟风吹草动,碧波荡漾。

 

光栅化:将顶点转换成像素,一一对应

片段着色器:将顶点围起来的像素着色(运行次数远大于顶点着色器,尽量将运算放在顶点着色器中。例如:quad中四个顶点坐标为((0,0)(0,100)(100,100)(100,0))顶点着色器执行4次,片段着色器执行10000次

 

片段着色器中处理的事情:逐片元操作

  1. 纹理采样 即给Quad赋予贴图或材质球,把纹理像素付给原来的像素,把原来的像素覆盖掉了
  2. 像素跟灯光进行计算
    1. alpha测试:挑选合格的alpha像素显示。(RGBA)
    2. 模版测试:  像素还可以携带 模板信息 达到条件的模板值会显示出来
    3. 深度测试:符合条件的(一般是像素距离相机的距离)像素 就通过,不然就丢弃
    4. 以上三个测试 决定像素能否被显示出来,挑选合格的像素
  3. Blend:将当前 要 渲染的像素 和 已经渲染出来的像素混合运算
    1. GBuffer :一个像素 存的(RGBA 模板值  深度值 )等信息,只要是审核通过了以后Gbuffer做的中转把这些信息传给FrontBufferBuffer其实是缓存区)Float[720*1280*4]数组存的信息比较多
    2. Front Buffer:由Gbuffer往Front Buffer写完以后,Front Buffer推向显示器显示过程中,Front Buffer,此时变成了framebuffer,由Gbuffer往Front Buffer写完以后,FrameBuffer会交换到后面去变成Front BufferFloat[720*1280])缓存区
    3. FrameBuffer:Float[720*1280]缓存
    4. 其实 Front Buffer和FrameBuffer在交替显示,一帧帧的看着好像在动一样,所以两个是相对的

 

 

 


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

相关文章

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.数据统一标准化 因为我们得到的原始数据大小,类型不一, 一起分析会不准确, 所以将数据全部…

实用干货!因子分析超全步骤总结

因子分析是统计数据分析方法之一,因子分析包括探索性因子分析和验证性因子分析。本文主要讨论探索性因子分析。 一、研究背景 关于工作满意度有14个问题,调研得到215份问卷结果。希望通过因子分析,用少量因子反映14个题目的信息,…

NLP | 朴素贝叶斯法的学习与分类

朴素贝叶斯法的学习与分类 《统计学习方法》李航第四章 1、概述 书上对朴素贝叶斯的描述如下: 朴素贝叶斯法时基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然…

标定相机参数-张正友方法

一、实验原理 1.计算外参 设三维世界坐标的点为M=[X,Y,Z,1]T,二维相机平面像素坐标为m=[u,v,1]T,所以标定用的棋盘格平面到图像平面的单应性关系为: sm=A[R,t]M 其中 不妨设棋盘格位于Z = 0,定义旋转矩阵R的第i列为 ri, 则有: 令H=[h1 h2 h3]=λA[r1 r2 t] 于是空间到图…

《统计学习方法》——朴素贝叶斯法

引言 朴素贝叶斯法(Naive Bayes)是基于贝叶斯定理与特征条件独立假设的分类方法。朴素贝叶斯法实现简单,学习与预测的效率都很高,是一种常用的方法。 这一章需要大量的概率论知识,忘记了的同学建议先参阅人工智能数学基础之概率论。 朴素贝…