Skip to content

混合渲染管线

现代游戏引擎普遍采用光栅化 + 光线追踪的混合管线,在性能和质量之间取得平衡。

反射

光栅化传统的反射方案是屏幕空间反射(SSR),但只能反射屏幕内的物体,且有遮挡和边缘问题。光线追踪反射精确且完整。

  • 实现策略:

    • 对粗糙度低于阈值的像素,反射方向生成反射光线
    • 反射光线递归深度通常限制在 1-2 次
    • 对反射结果应用降噪(时间累积 + 空间滤波)
  • 优化技巧:

    • 降低反射分辨率(如半分辨率),使用双边滤波上采样
    • 次要反射(反射的反射)使用探针或环境光近似
    • 对远距离物体使用更低精度的 BVH 或 Impostor

阴影

光栅化的 Shadow Map 只能产生硬阴影,PCF 软化边缘但仍不自然。光线追踪支持面光源的软阴影,半影区域自然过渡。

  • 实现策略:

    • 对每个可见像素,向光源发射阴影光线
    • 面光源使用软阴影采样,在光源表面随机采样点
    • 直接光照使用 1-2 条阴影光线,间接光照使用路径追踪
  • 优化技巧:

    • 级联阴影:近距离使用高分辨率阴影光线,远距离使用低分辨率
    • 阴影复用:相邻像素共享部分阴影光线
    • 延迟阴影:先渲染无阴影图像,再单独计算阴影通道叠加

全局光照

全局光照是光线追踪的最大优势,但计算成本极高。实时应用使用近似方法。

  • 屏幕空间全局光照(SSGI):

    • 在屏幕空间反射随机光线,估计间接光照
    • 优点是快速,缺点是只能反射屏幕内的物体
  • 有限的路径追踪:

    • 每像素追踪 1-2 次反射,估计间接光照
    • 使用时间累积和降噪,数百帧后收敛
    • 静态场景可以预烘焙,运行时复用
  • 光照探针:

    • 在场景中放置探针,预计算每个探针的全局光照
    • 运行时插值探针结果,动态物体使用最近的探针
    • Epic 的 Lumen 技术结合了实时路径追踪和探针缓存

性能调试

实时光线追踪的性能调试需要专门的工具和指标。

  • 关键指标:

    • 每像素采样数(SPP):越高噪点越少但性能越差
    • 光线遍历深度:BVH 树的访问次数,衡量加速结构质量
    • 三角形测试数:实际求交的三角形数量,衡量剔除效率
    • 帧时间分布:求交、着色、降噪各阶段的耗时
  • 调试工具:

    • NVIDIA Nsight Graphics:可视化光线数量、BVH 遍历、降噪效果
    • Radeon GPU Profiler:分析硬件 RT Core 的利用率
    • 自定义热力图:按像素显示采样数、方差、递归深度
  • 常见瓶颈:

    • 加速结构质量差:使用 SAH 启发式重建 BVH
    • 递归深度过深:限制最大递归次数,使用俄罗斯轮盘赌
    • 降噪不足:增加时间累积帧数,使用更好的空间滤波
    • 光线过多:降低每像素采样数,使用重要性采样