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

发布于:2025-07-25 ⋅ 阅读:(17) ⋅ 点赞:(0)

前段时间在看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
    在这里插入图片描述

网站公告

今日签到

点亮在社区的每一天
去签到