Unity是如何把3D场景显示到屏幕上的——Unity的渲染过程

前段时间在看Shader Graph的时候,发现很多基本概念搞不懂,于是刨了一下Unity的的渲染过程,权当复习计算机图形学了。毕竟奔五的老头了,年事渐高,记性也越发不济,便把学到的东西整理成了这篇笔记。其中若有疏漏或错误之处,还恳请不吝指正。

文章目录

一、Unity的渲染的过程包含哪几个阶段?

包含以下四个阶段:应用程序阶段、几何阶段、光栅化阶段、像素处理阶段

每个阶段包含哪些操作:

二、扫清障碍------基本概念解释

1、缓冲区(Buffer)

【缓冲区】这个词出现在【像素处理阶段】,讲的是在像素处理阶段,GPU会把像素信息包(又名"片段")进行渲染,选然后依据深度信息进行评判,剔除一些看不见的信息,然后把要显示的信息更新到帧缓冲区里面(它有颜色、深度、模板三个缓冲区组成)。

渲染管线中,是用来临时存储数据的内存区域。存储的对象是渲染过程中产生的像素、深度、颜色等信息。

(1)缓冲区

渲染管线中,是用来临时存储数据的内存区域。存储的对象是渲染过程中产生的像素、深度、颜色等信息。

(2)帧缓冲区

一个综合的缓冲区,可能包含颜色缓冲区、深度缓冲区和模板缓冲区,用于存储最终的渲染结果。该缓冲区它是一个逻辑概念,不是物理结构,它实际由颜色、深度、模板三个缓冲区构成。

(3)颜色缓冲区(Color Buffer)

存储每个像素的颜色信息(RGB或RGBA)。这是渲染后直接影响屏幕显示的主要缓冲区。

(4)深度缓冲区(Depth Buffer)

也叫Z缓冲区,存储每个像素的深度值(距离相机的远近),用于确定哪些物体在其他物体前面,解决遮挡问题。

(5)模板缓冲区(Stencil Buffer)

用于存储模板值,常用于实现特定的渲染效果,如遮罩、轮廓、反射等。

(6)缓冲区的示意图

(7)帧缓冲区与颜色、深度、模板缓冲区的关系

(8)帧缓冲区是全局公用的吗?是的

(9)什么是【深度测试】?

像素处理阶段:深度测试解决基本的空间遮挡,判断某像素坐标处的几个【片段】的【深度值】,保留近的,舍弃远的。

(10)什么是【模板测试】?

像素处理阶段:模板测试则用于实现局部渲染、遮罩、轮廓线等定制化效果

2、Unity中的MeshFilter和MeshRenderer渲染组件

(1)MeshFilter组件

  • 意为"网格过滤器"或者"网格提供者"
  • 这个组件,界定了一个物体的外形,外形的意思就是物体的几何数据------顶点数据(位置、UV、法线、切线),以及面数信息(三角形索引信息)。
  • 只提供数据,不处理渲染逻辑。

(2)MeshRenderer组件

  • 网格渲染组件
  • MeshRenderer 是一个 Unity 组件,负责将 MeshFilter 提供的几何数据提交给渲染管线,并结合材质(Material)进行渲染。
  • 它的作用 :
    • 提交渲染命令:将 MeshFilter 的网格数据和材质信息传递给 URP,触发渲染。
    • 定义外观:通过材质和 Shader 控制物体的颜色、纹理、光照效果(如漫反射、镜面高光)。
    • 控制渲染行为:设置渲染队列(不透明/透明)、阴影投射/接收、光探针使用等。

3、几何阶段的相关概念

(1)几何阶段是做啥的?

  • 几何阶段用到的信息来自哪里

    在 Unity 的 URP(通用渲染管线,Universal Render Pipeline) 中,几何阶段(Geometry Stage) 的输入是 3D 模型的网格数据及其相关属性,具体由 MeshFilter 和 MeshRenderer 组件提供的数据组成,但这些组件本身不是直接输入,而是通过它们在应用程序阶段准备的数据传递到 GPU

  • 把场景中要渲染的物体,在【顶点着色器】的加持下,经过历次空间坐标变换,从把要渲染的物体从模型空间------>世界空间------>相机空间------>裁剪空间------>屏幕空间,逐次变换。

  • 进行图元组装:把3D物体切碎成基本的渲染图形,最后组装成一个又一个的信息包。

  • 裁剪操作:把看不见的图元删除

(2)什么是图元?

  • 图元的这个词的来源: 来自英文"Primitive",意思是【原始的】、【基本的】,在图形学中指【渲染管线中最基本的几何形状】,如三角形(Triangle)、线段(Line)、点(Point)。或者改为【基本图形】、【绘制单元】更好理解。

  • 图元包含的信息:

(3)几何计算阶段会产生大量的图元?

在几何处理中,确实会根据需求生成大量图元,且这些图元通常以最基础的图形(点、线段、三角形)为单位。这是因为复杂的几何模型或场景往往需要通过这些 "最小单元" 来精确描述,同时也便于计算、渲染和存储。

(4)什么是【顶点变换】?

顶点变换就是把场景里要渲染的物体,不断地进行坐标变换,是他们从模型坐标,变换到屏幕坐标。有【顶点着色器】完成。

(5)什么是【模型空间】、【世界空间】、【相机空间】、【裁剪空间】、【屏幕空间】?

(6)什么是【顶点着色器】

(7)什么是【图元组装】

4、光栅化相关概念

(1)什么是【光栅化】

CRT显示器在显示图像的时候,电子枪逐行扫射屏幕上的荧光点,屏幕被颜色"格子"填满后,便产生了图像。这个过程以前叫"光栅化"。

(2)光栅化的作用

(3)什么是【片段】

  • 背景知识:
    1、【光栅化】阶段把【图元】处理成【片段】。
    2、【光栅化】就是把【裁剪空间】的数据处理成【屏幕空间】的数据。

屏幕空间中的每个像素点,要显示内容为裁剪空间中对应位置的物体信息,一个像素点要显示的内容可能不止一个,那么,这些要显示在某个像素点的一个或者多个内容,就是片段。

(4)为什么叫【片段】

为什么叫片段?

【光栅化】阶段的扫描工作,把一个3D图元"切碎"成覆盖屏幕像素的小块。每个小块对应一个像素,就是一个"片段"。

(5)【片段】包含写什么信息(结构)

5、像素处理阶段(片段着色阶段)

(1)什么是【像素处理阶段】

像素处理阶段(Fragment Processing Stage) 是渲染管线的核心阶段,由 GPU 执行,负责处理光栅化阶段生成的片段(Fragment),为每个像素计算最终颜色并决定渲染结果。

(2)【像素处理阶段】的处理流程是啥?

(3)【像素处理阶段】的几个缓冲区概念

(4)什么是片段着色器

  • 定义: 片段着色器是一个可编程的 GPU 程序,处理光栅化阶段生成的片段,计算每个片段的颜色(RGBA)和其他输出(如深度或模板值),决定像素在屏幕上的最终外观。
  • 位置: 运行在像素处理阶段,在光栅化阶段(生成片段)之后,后处理阶段(如颜色分级)之前。
  • 核心特点:
    逐片段处理:每个片段独立运行一次片段着色器。
    主要输出颜色值,供后续测试和写入渲染目标(如颜色缓冲区)。

三、一个案例的渲染流程

  • Unity
  • URP
  • 单相机
  • 场景有三个立方体A、B、C
相关推荐
Coovally AI模型快速验证5 小时前
CVPR 2026|PanDA:首个多模态3D全景分割的无监督域适应框架
人工智能·3d·视觉检测·工业质检
天人合一peng7 小时前
unity 生成标记根据背景色变色为明显的颜色
unity·游戏引擎
魔士于安7 小时前
Unity 超市总动员 超市收银台 超市货架 超市购物手推车 超市常见商品
游戏·unity·游戏引擎·贴图·模型
CandyU28 小时前
Unity —— 数据持久化
unity·游戏引擎
zh路西法8 小时前
【Unity实现Oneshot胶卷显形】游戏窗口化与Win32API的使用
游戏·unity·游戏引擎
迪捷软件9 小时前
显控系统虚拟仿真的工程化路径
游戏引擎·cocos2d
AGV算法笔记9 小时前
CVPR 2024顶级SLAM论文精读:SplaTAM如何用3D高斯实现稠密RGB-D SLAM?
深度学习·3d·机器人视觉·slam·三维重建
hhhhhh_we10 小时前
皮肤人格的工程化实现:预颜美历如何用3D点云与循环神经网络构建数字孪生人格
图像处理·人工智能·rnn·深度学习·神经网络·3d·产品运营
Coovally AI模型快速验证10 小时前
YOLO26仓储检测实战:物体定位+有向边界框+姿态估计+实例分割,一个模型盯住整个仓库
大数据·人工智能·3d·视觉检测·工业质检
三维频道11 小时前
柔性材料3D数字化:蓝光扫描在内衣胸垫设计与质检中的应用
人工智能·3d·逆向工程·蓝光3d扫描仪·服装数字化·内衣设计·柔性材料检测