Skip to content

光栅化管线

光栅化管线由多个有序阶段组成,每个阶段专注于特定的处理任务,共同协作完成渲染。管线运行于 GPU,充分利用其并行计算能力,达到实时渲染的性能要求(通常 30-60 帧每秒)。光栅化管线的设计兼顾了速度与质量,适用于游戏、虚拟现实、实时可视化等场景。

光栅化管线与光线追踪管线不同,前者基于几何投影和像素填充,快速生成近似光照效果;后者模拟真实光路,追求物理真实感,但计算成本较高。光栅化管线的优势在于硬件优化和实时性,使其成为现代图形渲染的基石。

主要流程

光栅化管线由以下主要阶段组成,分为 CPU 端的应用程序阶段和 GPU 端的渲染阶段。每个阶段功能明确,协同完成从几何到像素的转换。

应用程序阶段(Application Stage)

  • 功能:运行于 CPU,由开发者控制,负责准备渲染所需的数据和逻辑。
  • 任务:
    • 场景管理:组织三维场景中的物体(模型、相机、光源)。
    • 数据准备:生成顶点数据(位置、法向量、纹理坐标)、索引缓冲区、纹理、变换矩阵(模型、视图、投影)。
    • 动画与物理:计算物体运动、骨骼动画、碰撞检测等。
    • 剔除优化:执行视锥剔除(Frustum Culling)、遮挡剔除(Occlusion Culling),减少无效物体提交。
    • 绘制命令:通过 API(如 glDrawArrays)提交渲染指令。
  • 优化点:
    • 批量提交数据,减少 CPU-GPU 通信。
    • 使用顶点缓存(Vertex Buffer Objects, VBO)高效传输几何。

顶点着色(Vertex Shading)

  • 功能:GPU 上运行的可编程阶段,处理每个顶点的几何变换和属性计算。
  • 任务:
    • 坐标变换:将顶点从模型空间依次变换到世界空间、观察空间(视图矩阵)、裁剪空间(投影矩阵)。
    • 属性计算:处理法向量(用于光照)、纹理坐标、顶点颜色等。
    • 输出:裁剪空间坐标(gl_Position)和其他属性,传递给后续阶段。
  • 优化点:使用统一变量(Uniforms)传递矩阵,减少重复计算。

图元组装与裁剪(Primitive Assembly & Clipping)

  • 功能:将顶点组织为图元(如三角形、线段、点),并进行裁剪优化。
  • 任务:
    • 图元组装:根据绘制命令(如 GL_TRIANGLES)和索引,将顶点连接为三角形。
    • 背面剔除:根据顶点顺序(逆时针 CCW 为正面,顺时针 CW 为反面)移除不可见三角形(glEnable(GL_CULL_FACE))。
    • 视锥裁剪:剔除位于视锥体外的图元,裁剪部分可见图元。
  • 与背景联系:
    • 你的三角面正反面问题:CCW 顺序定义正面,影响背面剔除。
    • GLFW 示例中,glBegin(GL_TRIANGLES) 指定三角形图元。
  • 优化点:提前剔除减少光栅化负担。

光栅化(Rasterization)

  • 功能:将连续的图元转换为离散的像素片段(Fragments)。
  • 任务:
    • 扫描转换:确定三角形覆盖的像素,使用扫描线算法。
    • 属性插值:插值顶点属性(如颜色、法线、纹理坐标),生成每个片段的数据。
    • 透视校正:对纹理坐标等属性进行透视校正,避免失真。
  • 优化点:使用多级纹理(Mipmaps)优化纹理采样。

片段着色(Fragment Shading)

  • 功能:为每个片段计算最终颜色,决定像素外观。
  • 任务:
    • 光照模型:实现环境光、漫反射(Lambert)、镜面反射(Phong)等。
    • 纹理采样:从纹理中获取颜色或法线(法线贴图)。
    • 高级效果:阴影贴图、环境光遮蔽(SSAO)、基于物理的渲染(PBR)。
  • 优化点:延迟渲染(Deferred Shading)减少光照计算。

测试与混合(Testing & Blending)

  • 功能:决定片段是否写入帧缓冲区,以及如何与现有像素合成。
  • 任务:
    • 深度测试:比较片段深度(glEnable(GL_DEPTH_TEST)),剔除被遮挡的片段。
    • 模板测试:用于特殊效果(如轮廓、镜像)。
    • 混合:处理透明效果(glBlendFunc),如玻璃、烟雾。
    • 抗锯齿:如多重采样抗锯齿(MSAA),平滑边缘。
  • 优化点:早期深度测试(Early-Z)减少片段着色开销。

输出与显示(Framebuffer Output)

  • 功能:将帧缓冲区的像素数据显示到屏幕。
  • 任务:
    • 双缓冲交换(glfwSwapBuffers),避免闪烁。
    • 输出到渲染目标(Render Target),用于后处理或离屏渲染。

光照模型

  • 光照模型:
    • 环境光:全局亮度,模拟间接光照。
    • 漫反射:基于法向量和光方向(如 Lambert)。
    • 镜面反射:高光效果(如 Phong,考虑视角)。
    • PBR:基于 BSDF(如 GGX),结合微表面、菲涅耳效应。
  • 法线贴图:增强表面细节,无需增加几何复杂度。
  • 纹理优化:Mipmaps、纹理压缩(如 BC7)减少内存占用。

抗锯齿

  • 抗锯齿:
    • MSAA:多重采样,平滑边缘。
    • FXAA/TAA:后处理抗锯齿,适用于动态场景。

后处理

  • 后处理:
    • 景深:模拟相机焦距效果。
    • 运动模糊:增强动态感。
    • 色调映射:调整亮度和对比度,模拟 HDR。

后处理增强:景深、SSAO、TAA 弥补光栅化局限。