01 / 一条光线只有原点和方向
光线可写成参数方程。原点 O 通常是相机位置,单位方向 D 穿过成像平面上的某个采样点;参数 t 表示沿光线前进的距离。
P(t) = O + tD,t ≥ 0
为每个像素中心发射一条光线只能得到单次采样。景深、运动模糊和抗锯齿都需要改变相机位置、时间或像素内采样点并累积结果。
02 / 找到所有候选中的最近交点
球体相交可把光线方程代入球面方程,解一个二次方程;三角形相交常用重心坐标形式,同时求出距离和内部坐标。有效交点要求 t 位于当前光线范围内。
球面:|O + tD - C|² = r²
取满足范围的最小正根 t
取满足范围的最小正根 t
相交记录通常保存距离、位置、几何法线、着色法线、材质和图元编号。若没有任何命中,则返回环境背景或天空光。
设置 t 的最小值。次级光线从表面出发时,浮点误差可能让它立刻再次击中原表面;用一个与场景尺度匹配的小偏移可减少自相交。
03 / 次级光线回答更多可见性问题
| 光线 | 方向 | 回答的问题 |
|---|---|---|
| 主光线 | 相机到场景 | 像素看到什么 |
| 阴影光线 | 交点到光源 | 光源是否可见 |
| 反射光线 | 镜面反射方向 | 表面反射什么 |
| 折射光线 | 由折射率决定 | 透明物体后面是什么 |
递归追踪理想镜面反射很直观,但粗糙材质不会只朝一个方向反射。需要按材质散射分布随机选择方向,多次采样后才能估计积分。
04 / BVH 避免测试每个三角形
若每条光线都与场景全部三角形相交,代价随图元数量线性增长。包围体层次结构(BVH)把相邻几何包进轴对齐包围盒,再递归分组。
先测试大包围盒 → 未命中则跳过整组几何
命中则继续测试子节点 → 叶节点测试真实图元
命中则继续测试子节点 → 叶节点测试真实图元
高质量 BVH 构建会考虑盒子表面积与图元数量,尽量降低遍历期望代价。动态场景可更新包围盒、局部重建,或将对象级与三角形级结构分开。
05 / 路径追踪用随机采样估计渲染方程
路径追踪在每次表面交互处,根据材质概率分布采样一个后续方向,直到击中光源、离开场景或被终止。单个样本噪声很大,许多独立样本的平均值才逐渐收敛。
- 重要性采样把更多样本投向贡献大的方向。
- 俄罗斯轮盘赌用概率终止低贡献路径,同时保持估计无偏。
- 下一事件估计直接采样光源,改善小光源场景收敛速度。
- 降噪器借助法线、深度和历史信息,以较少样本重建稳定图像。
核心差异:光栅化高效枚举几何对屏幕的贡献;光线追踪灵活查询任意方向的可见性。现代实时渲染常将两者混合。