光栅化 — 什么是光栅化,阶段和工作原理

作者: IT Sectr 发布日期: 2026-06-11 阅读时间: 10 分钟

光栅化 — 是将三维图元(三角形、线段、点)的矢量描述转换为像素(片段)集以在屏幕上显示的过程。根据Khronos Group, 2025的数据,光栅化是图形管线的自动(不可编程)阶段,位于顶点着色器和片段着色器之间。光栅化确定屏幕上的哪些像素属于哪个三角形,并为每个片段计算插值属性。

要点

  • 光栅化 — 将矢量图元转换为光栅图像(像素)。
  • 扫描线转换 — 确定三角形像素覆盖范围的基本算法。
  • 属性插值 — 计算每个片段的颜色、纹理坐标和法线。
  • MSAA — 多重采样,平滑光栅化中的阶梯状边缘(锯齿)。
  • 性能 光栅化的性能取决于三角形数量和屏幕分辨率。

什么是光栅化?

光栅化 — 是图形管线中将几何图元(三角形、线段)转换为片段集供片段着色器进一步处理的阶段。输入数据 — 屏幕坐标中的三角形顶点及其属性(颜色、法线、UV)。输出 — 具有插值属性的片段集。

与可编程着色器(顶点着色器和片段着色器)不同,光栅化是固定(不可编程)阶段。开发人员无法更改光栅化算法,但可以管理其参数:裁剪模式(culling)、线宽、深度偏移(polygon offset)和多重采样。

光栅化在实时图形中的作用

几乎所有现代实时图形 — 游戏、UI、AR/VR — 都使用光栅化。这是最高效的渲染方法,能够在60 FPS下每帧处理数百万个三角形。GPU光栅化器通过专门的ROP(渲染输出单元)块针对数千个三角形的并行处理进行了优化。

光栅化如何工作?

三角形光栅化在顶点着色器将顶点转换为屏幕坐标后开始。GPU获取三角形的三个顶点,并确定屏幕上的哪些像素位于该三角形内部。

三角形光栅化的阶段

该过程包括三个连续步骤:确定三角形的像素边界框 — 检查边界框内每个像素是否属于三角形(边缘函数) — 为每个覆盖像素计算插值属性(重心坐标)。边缘函数 — 是一个线性方程,确定点位于三角形边的哪一侧。

阶段描述结果
裁剪裁剪视口边界外的三角形可见图元
视口变换转换为屏幕坐标像素坐标
三角形设置计算边缘函数和边界框光栅化参数
片段生成检查覆盖和插值片段 + 属性

光栅化算法

光栅化可以通过不同的算法实现,每种算法在性能和质量之间都有自己的权衡。现代GPU使用多种方法的组合。

扫描线算法

为早期GPU开发的经典光栅化算法。三角形逐行(扫描线)处理:对于屏幕的每一行,确定三角形的进入和退出点,并填充它们之间的所有像素。扫描线转换对于大三角形效率高,但对于任意形状的三角形需要复杂的逻辑。

半空间(边缘函数)方法

现代GPU使用半空间光栅化方法:对于三角形的每一边,计算边缘函数 — 一个线性方程,一边为正,另一边为负。如果所有三个边缘函数都为正,则像素属于该三角形。半空间光栅化易于并行化,并且非常适合GPU的SIMD架构。

基于瓦片的光栅化(TBR)

移动GPU(Qualcomm Adreno、ARM Mali)使用基于瓦片的渲染(TBR)。屏幕被分成小块(16×16或32×32像素),每个块单独执行光栅化。通过将帧缓冲区存储在快速的本地内存(瓦片内存)中,这最大限度地减少了对视频内存的访问次数。TBR降低了功耗,这对移动设备至关重要。

光栅化与光线追踪对比

光栅化和光线追踪 — 两种截然不同的3D图形渲染方法。光栅化在实时应用中占主导地位,光线追踪在离线渲染中占主导地位,并逐渐渗透到实时领域(在兼容RTX的GPU上)。

参数光栅化光线追踪
原理三角形 → 片段光线 → 与场景相交
速度非常快(每帧数百万个三角形)慢(每帧数千条光线)
质量需要附加技术(阴影、反射)物理正确的阴影和反射
移动GPU标准方法支持有限(A17 Pro、Snapdragon Gen 3)
功耗

MSAA与光栅化中的抗锯齿

光栅化时会出现锯齿问题 — 三角形边界上的阶梯状边缘。这是因为像素是离散的,不能部分被三角形覆盖。为了对抗锯齿,使用多重采样(MSAA)。

MSAA如何工作

MSAA(多重采样抗锯齿)以更高的采样频率(2x、4x、8x)执行光栅化。每个像素使用多个子样本而不是一个样本,每个子样本都检查是否被三角形覆盖。MSAA 4x每个像素处理4个子样本,在不完全增加渲染分辨率的情况下提供明显的边缘平滑效果。

FXAA和其他后处理方法

与MSAA不同,后处理平滑方法(FXAA、SMAA、TAA)在光栅化后工作,分析最终图像。FXAA(快速近似抗锯齿)检测图像边缘并应用模糊进行平滑,比MSAA快得多,但质量较差。

GPU上的光栅化与优化

现代GPU上的光栅化由专门的硬件块执行 — ROP(渲染输出单元)。ROP的数量直接影响填充率 — GPU每秒可以处理的像素数。

光栅化性能的因素

  • 三角形数量 — 每帧的三角形数。每个三角形需要设置和边缘测试的开销。
  • 填充率 — ROP块每秒处理的像素数。取决于GPU的时钟频率和ROP数量。
  • 过度绘制 — 由于三角形重叠而重复光栅化同一像素。通过按深度排序对象进行优化。

为移动GPU优化光栅化

对于移动GPU(基于瓦片的渲染),以下至关重要:通过早期Z测试最小化过度绘制,使用背面剔除移除不可见的三角形,以及通过隐藏表面消除(遮挡剔除)丢弃完全被其他对象覆盖的三角形。

常见问题

用简单的话说什么是光栅化?

光栅化是将三角形转换为屏幕上像素的过程。GPU获取一个三维三角形,确定它覆盖屏幕上的哪些像素,并将它们传递给片段着色器进行着色。

光栅化与光线追踪有何不同?

光栅化将三角形投影到屏幕上并确定像素覆盖(非常快)。光线追踪从相机发射光线并检查与几何体的相交(物理上更精确,但明显更慢)。

为什么光栅化需要抗锯齿?

在光栅化中,像素要么完全属于三角形,要么不属于 — 因此产生阶梯状边缘(锯齿)。MSAA通过每个像素多个子样本平滑边缘,FXAA对完成的图像应用滤镜。

光栅化阶段可以编程吗?

不,光栅化是图形管线的固定阶段。开发人员无法更改算法,但可以管理设置:culling、polygon offset、光栅化模式(点、线、三角形)和MSAA参数。

为什么移动GPU使用基于瓦片的渲染?

基于瓦片的渲染(TBR)将屏幕分成瓦片并在快速本地内存中处理它们,而不是在全局VRAM中。这大大降低了功耗和带宽,这对于电池供电的移动设备至关重要。

总结

  • 光栅化 — 将矢量三角形转换为光栅片段以在屏幕上显示。
  • 半空间方法 — 现代GPU中的主要光栅化算法。
  • 基于瓦片的渲染 — 移动GPU(Adreno、Mali)中使用的光栅化架构。
  • 锯齿 — 阶梯状边缘问题,通过MSAA、FXAA或TAA解决。
  • 填充率 — 光栅化性能的关键参数,取决于ROP块的数量。
  • 过度绘制 — 像素的重复光栅化,通过early-Z和遮挡剔除优化。
  • 光线追踪 — 替代方法,以性能为代价提供物理正确的渲染。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读