混合渲染管线
现代游戏引擎普遍采用光栅化 + 光线追踪的混合管线,在性能和质量之间取得平衡。
反射
光栅化传统的反射方案是屏幕空间反射(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
- 递归深度过深:限制最大递归次数,使用俄罗斯轮盘赌
- 降噪不足:增加时间累积帧数,使用更好的空间滤波
- 光线过多:降低每像素采样数,使用重要性采样