光栅化(Rasterization)是计算机图形学中将连续的几何图形(如三角形、直线等)转换为离散像素的过程,最终在屏幕上形成图像。
一、光栅化的核心比喻
-
像画家在画布上作画 假设你是一个画家,要把一个3D立方体画到2D画布(屏幕)上。你需要将立方体可见的每个面分解成小色块(像素),并确定每个色块的颜色。光栅化就是这个"分解并填色"的过程,只不过计算机通过数学计算自动完成。
-
拼图游戏 光栅化类似于将一幅完整的拼图分解成无数小拼图块(像素),然后根据原图规则给每个小拼图块上色,最终拼出完整画面。
-
光栅设备的原理 屏幕像一块由横向和纵向栅格组成的"捕鱼网"(光栅),光栅化的过程就像用这些栅格过滤光线,只允许特定方向的光通过,从而形成图像(例如液晶显示器的工作原理)。
二、光栅化的具体步骤
-
输入几何图元 光栅化处理的基本单位通常是三角形(因为三角形是平面且无歧义的几何形状),输入数据包括三角形的顶点坐标、颜色、纹理等信息。
-
投影到屏幕空间 通过矩阵变换将3D模型映射到2D屏幕坐标系,类似于用相机拍摄物体后得到平面照片的过程。这一步会剔除视锥外的不可见部分(如相机背后的物体)。
-
分解为像素并判断覆盖关系 计算机遍历屏幕上的每个像素,判断其中心点是否在三角形内部。例如,通过叉乘计算三个边的方向与点到边的关系,若所有方向一致,则点在三角形内。
-
颜色插值与混合 若像素被覆盖,则根据顶点颜色或纹理坐标进行插值计算(如三角形的三个顶点是红、绿、蓝,中间像素会渐变过渡),同时处理透明度和遮挡关系(如使用深度缓冲Z-buffer)。
-
输出到屏幕 最终将所有像素的颜色存入帧缓冲区(Frame Buffer),显示器逐行扫描这些数据形成图像
三、光栅化中的关键问题与解决
-
锯齿(走样) 由于像素是离散的,斜线或曲线边缘会出现锯齿。例如,楼梯状的斜线边缘看起来不平滑。
解决方法 :
- 多重采样(MSAA):对每个像素多次采样并混合结果,平滑边缘。
- 抗锯齿:先对图像进行模糊(低通滤波),再采样,减少高频信号带来的锯齿感。
-
性能优化
- 包围盒(Bounding Box) :仅处理三角形覆盖的像素区域,减少无效计算。
- 深度测试(Z-Buffer):通过记录像素的深度值,避免绘制被遮挡的物体。
四、现实中的光栅化应用
- 游戏渲染:实时生成逼真的3D场景,例如《少年派的奇幻漂流》中的虚拟老虎。
- UI界面:手机、电脑屏幕的显示均依赖光栅化技术。
- 科学可视化:将复杂数据(如气象模型)转化为直观的2D图像。
光栅化是计算机图形学的基石,通过将连续几何离散化为像素,让虚拟世界得以在屏幕上"活"起来。其核心逻辑是"分解-判断-填充",结合数学计算与硬件加速,实现高效渲染。