
栅格化是视频游戏中用于实时渲染的主要技术。尽管越来越多地使用光线追踪进行照明,但光栅化仍用于渲染 大部分场景。栅格化更快、更高效,并且通常会产生近乎真实的结果,但需要注意一些。让我们看看这两种渲染技术,包括它们的优点和缺点。
什么是栅格化?
栅格化包括将 3D 场景转换为 2D 图像,渲染从视口透视图可见的对象,并丢弃其余对象。3D 空间中的对象由三角形组成,这些 三角形被转换为点(像素),根据前者的纹理、照明和其他材质数据进行着色。

分步栅格化
- 3D 场景和三角形
- 3D 场景由由三角形(称为多边形)组成的对象组成。
- 每个三角形都有 3D 坐标 (x, y, z) 来传递它在场景中的确切位置。
- 3D 到 2D
- 3D 坐标将转换为 2D 点,将屏幕用作 POV 画布。
- 这些点指示屏幕上每个三角形的位置。
- 绘制最靠近屏幕的三角形,而隐藏的三角形被剔除。

- 三角形到像素
- 三角形叠加在像素上,此时称为片段。
- 覆盖三角形的片段(通常为 50% 或更多)会相应地着色。
- 片段着色
- 每个像素的最终颜色是使用应用于片段的材质、光照、纹理和特殊效果计算的。
什么是光线追踪?
光栅化采用一系列巧妙的技巧以 2D 形式渲染 3D 场景,而光线追踪则试图模仿光线及其自然属性。光线追踪涉及通过每个屏幕像素 投射 光线并对相交表面 进行采样 。命中点有助于确定 像素的颜色。

采用现代光线跟踪技术来计算场景照明。此 混合光线跟踪 管道包括两个主要步骤:
BVH 测试:光芒队在哪里终止?
Bounding Volume Hierarchy 有助于确定场景中光线的确切 交点 。它将几何体包裹在称为边界体积的框中。这些框按 层次结构 或树进行组织,较大的框依次打包较小的框。

- 包含连续较小框的大框称为顶级加速结构 ( TLAS )。
- 最低层包含三角形或多边形的框称为 底层 加速结构 (BLAS)。
- 当光线进入场景时,会针对 较大的框对其进行测试。
- 命中后,会测试其中 较小的框 。
- 每次点击都会延长进程,直到 BLAS 中的 三角形 相交。
- 如果光线未能击中多边形,则像素(通常)渲染为黑色。
- 命中点确定光线来源的像素的颜色。
Hit Point Shading(生命值点着色)
确定命中点后,必须计算 像素颜色 。它取决于表面属性(平滑度/粗糙度)、纹理、反射指数、透明度和 照明:

- 阴影 和漫射照明是通过从命中点向环境光源发射第二条光线来计算的。
- 如果光线被表面阻挡,则该点将被遮挡。否则,它就会亮起来。
- 反射光线 是从有光泽的表面投射而来的。它们在表面之间反弹,直到到达光源,在原始命中点反射它们。
什么是路径追踪?
路径追踪被认为是 3D 计算机图形学的圣杯。要了解其工作原理,我们需要回到光线追踪:
- 光线追踪涉及将光线投射到像素中,目的是模仿真实光线并沿光线求解 渲染方程。
- 但是,由于光线的行为具有无限复杂的特性,因此结果 并不完美。

路径追踪使用 Monte Carlo 方法,该方法使用随机采样来近似光线的 路径 和行为:
- 与光线追踪不同,路径追踪将每个像素的 多条光线 投射到屏幕中。
- 相交时,将收集表面数据,并根据命中点的材质属性重定向光线。
- 每次反射 都会产生最终像素颜色,从而模拟全局照明、光渗出和多次反射漫射照明。
- 光线追踪通常在第一次命中后 终止 。

每条光线的发送方向略有不同。这称为 随机抽样。随着每个像素的光线计数的增加,光线的路径和光照变得越来越准确。
- 每条光线使用 Monte Carlo 随机化对可能的光路进行采样。
- 使用 Importance Sampling,光线会偏向潜在的光源。
- 因此,我们得到了更多有用的光线和更少的空结果。
使用 ReSTIR 进行路径追踪
每个像素投射多条光线的成本很高。因此,游戏在空间和时间上重用光照样本以提高质量和性能。ReSTIR 或 基于储藏层的时空重要性重采样 就是这样一种解决方案:

- 沿着 可能贡献的 光源通过每个像素跟踪一两条光线。
- 将结果及其相关性存储在 reservoir (data structure) 中。
- 对下一帧重复该过程并增加 储液槽 大小。
- 检查 相邻 像素以获得高质量的样本。
- 从空间和时间库中选择最佳样本来 对像素进行着色 。