光栅化 — 是将三维图元(三角形、线段、点)的矢量描述转换为像素(片段)集以在屏幕上显示的过程。根据Khronos Group, 2025的数据,光栅化是图形管线的自动(不可编程)阶段,位于顶点着色器和片段着色器之间。光栅化确定屏幕上的哪些像素属于哪个三角形,并为每个片段计算插值属性。
要点
光栅化 — 是图形管线中将几何图元(三角形、线段)转换为片段集供片段着色器进一步处理的阶段。输入数据 — 屏幕坐标中的三角形顶点及其属性(颜色、法线、UV)。输出 — 具有插值属性的片段集。
与可编程着色器(顶点着色器和片段着色器)不同,光栅化是固定(不可编程)阶段。开发人员无法更改光栅化算法,但可以管理其参数:裁剪模式(culling)、线宽、深度偏移(polygon offset)和多重采样。
几乎所有现代实时图形 — 游戏、UI、AR/VR — 都使用光栅化。这是最高效的渲染方法,能够在60 FPS下每帧处理数百万个三角形。GPU光栅化器通过专门的ROP(渲染输出单元)块针对数千个三角形的并行处理进行了优化。
三角形光栅化在顶点着色器将顶点转换为屏幕坐标后开始。GPU获取三角形的三个顶点,并确定屏幕上的哪些像素位于该三角形内部。
该过程包括三个连续步骤:确定三角形的像素边界框 — 检查边界框内每个像素是否属于三角形(边缘函数) — 为每个覆盖像素计算插值属性(重心坐标)。边缘函数 — 是一个线性方程,确定点位于三角形边的哪一侧。
| 阶段 | 描述 | 结果 |
|---|---|---|
| 裁剪 | 裁剪视口边界外的三角形 | 可见图元 |
| 视口变换 | 转换为屏幕坐标 | 像素坐标 |
| 三角形设置 | 计算边缘函数和边界框 | 光栅化参数 |
| 片段生成 | 检查覆盖和插值 | 片段 + 属性 |
光栅化可以通过不同的算法实现,每种算法在性能和质量之间都有自己的权衡。现代GPU使用多种方法的组合。
为早期GPU开发的经典光栅化算法。三角形逐行(扫描线)处理:对于屏幕的每一行,确定三角形的进入和退出点,并填充它们之间的所有像素。扫描线转换对于大三角形效率高,但对于任意形状的三角形需要复杂的逻辑。
现代GPU使用半空间光栅化方法:对于三角形的每一边,计算边缘函数 — 一个线性方程,一边为正,另一边为负。如果所有三个边缘函数都为正,则像素属于该三角形。半空间光栅化易于并行化,并且非常适合GPU的SIMD架构。
移动GPU(Qualcomm Adreno、ARM Mali)使用基于瓦片的渲染(TBR)。屏幕被分成小块(16×16或32×32像素),每个块单独执行光栅化。通过将帧缓冲区存储在快速的本地内存(瓦片内存)中,这最大限度地减少了对视频内存的访问次数。TBR降低了功耗,这对移动设备至关重要。
光栅化和光线追踪 — 两种截然不同的3D图形渲染方法。光栅化在实时应用中占主导地位,光线追踪在离线渲染中占主导地位,并逐渐渗透到实时领域(在兼容RTX的GPU上)。
| 参数 | 光栅化 | 光线追踪 |
|---|---|---|
| 原理 | 三角形 → 片段 | 光线 → 与场景相交 |
| 速度 | 非常快(每帧数百万个三角形) | 慢(每帧数千条光线) |
| 质量 | 需要附加技术(阴影、反射) | 物理正确的阴影和反射 |
| 移动GPU | 标准方法 | 支持有限(A17 Pro、Snapdragon Gen 3) |
| 功耗 | 低 | 高 |
光栅化时会出现锯齿问题 — 三角形边界上的阶梯状边缘。这是因为像素是离散的,不能部分被三角形覆盖。为了对抗锯齿,使用多重采样(MSAA)。
MSAA(多重采样抗锯齿)以更高的采样频率(2x、4x、8x)执行光栅化。每个像素使用多个子样本而不是一个样本,每个子样本都检查是否被三角形覆盖。MSAA 4x每个像素处理4个子样本,在不完全增加渲染分辨率的情况下提供明显的边缘平滑效果。
与MSAA不同,后处理平滑方法(FXAA、SMAA、TAA)在光栅化后工作,分析最终图像。FXAA(快速近似抗锯齿)检测图像边缘并应用模糊进行平滑,比MSAA快得多,但质量较差。
现代GPU上的光栅化由专门的硬件块执行 — ROP(渲染输出单元)。ROP的数量直接影响填充率 — GPU每秒可以处理的像素数。
对于移动GPU(基于瓦片的渲染),以下至关重要:通过早期Z测试最小化过度绘制,使用背面剔除移除不可见的三角形,以及通过隐藏表面消除(遮挡剔除)丢弃完全被其他对象覆盖的三角形。
常见问题
光栅化是将三角形转换为屏幕上像素的过程。GPU获取一个三维三角形,确定它覆盖屏幕上的哪些像素,并将它们传递给片段着色器进行着色。
光栅化将三角形投影到屏幕上并确定像素覆盖(非常快)。光线追踪从相机发射光线并检查与几何体的相交(物理上更精确,但明显更慢)。
在光栅化中,像素要么完全属于三角形,要么不属于 — 因此产生阶梯状边缘(锯齿)。MSAA通过每个像素多个子样本平滑边缘,FXAA对完成的图像应用滤镜。
不,光栅化是图形管线的固定阶段。开发人员无法更改算法,但可以管理设置:culling、polygon offset、光栅化模式(点、线、三角形)和MSAA参数。
基于瓦片的渲染(TBR)将屏幕分成瓦片并在快速本地内存中处理它们,而不是在全局VRAM中。这大大降低了功耗和带宽,这对于电池供电的移动设备至关重要。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。