提示:源文 Imperfect Shadow Maps for Efficient Computation of Indirect Illumination ,是给虚拟点光源的间接光照做阴影的(使用不完美阴影贴图)。
核心就是近似可见性。
摘要
提示:这里可以添加本文要记录的大概内容:
作者提出了一种基于近似可见性查询的大型和全动态场景中间接照明的交互式计算方法。虽然直接照明的高频特性需要准确的可见度,但间接照明主要由平滑的渐变组成,这往往会掩盖由于不正确的可见度而导致的错误。我们通过使用不完美的阴影贴图(从基于粗略点的场景表示呈现的低分辨率阴影贴图)来近似间接照明的可见性来利用这一点。这些与基于虚拟点光源的全局照明算法结合使用,能够以实时帧速率对动态场景进行间接照明。我们证明了不完美的阴影贴图是可见性的有效近似,这使得全局照明的模拟比使用准确的可见性快一个数量级。
提示:以下是本篇文章正文内容,下面案例可供参考
一、介绍
- 作者介绍了全局光照的一些列发展。IR(即时辐射度)和VPL,ISM(低分辨率阴影贴图),提出了:尽管 ISM 中包含不准确之处以及即时光能传递方法所继承的限制,但生成的渲染与参考渲染非常相似,但渲染速度是原始速度的十倍。
- 作者的贡献如下:
- 可见性的近似表示——不完美的阴影贴图——以促进间接照明的计算。
- 一种基于即时辐射的技术,它使用 ISM 在现代 GPU 上实时计算大型动态场景中的(多反射)间接照明。
- ISM 对间接照明的影响分析。
二、相关工作
- 作者介绍了标准全局照明方法:
- (可见性)进行直接和间接照明: 路径追踪、光子映射和光线追踪。
- (可见性)基于虚拟点光源(VPL):即时辐射、即时全局照明。
- (不可见性)近似全局照明方法:来自附近和远处几何体的辐照度被解耦:来自附近几何体的所有入射光都被简单地集成,根本不计算可见性。
- 作者提出进一步探索近似可见性的想法并证明它可以实现实时全局照明:使用简化的、基于点的几何图形表示仅用于确定可见性,而不用于阴影计算。
- 实时全局光照:
- PRT(计算辐射转移):可以预先计算光传输,包括所有可见性信息。类似,使用单次反射间接照明的静态场景的实时渲染是可能的,它具有一种即时光能传递的变体,该变体在多个帧上重用 VPL 及其各自的阴影贴图。
- 作者的方法:可以实现完全动态的场景和间接照明的多次反弹。ISM 通过使用近似可见性来实现完全动态场景的实时全局照明,而不受低频照明或小场景的限制。
- 渲染中的可见性近似:对光泽反射的精确遮挡并不总是必要的——这一观察已经被用于从环境图中渲染光泽反射。我们方法的动机是相似的:通过近似可见性来加速全局光照的昂贵计算。
三、不完美的阴影贴图
- 3D 点对之间的可见性测试通常是全局照明算法中最耗时的部分。使用基于虚拟点光源 (VPL) 计算间接照明的算法可以使这些查询更加连贯。其中可见性只需要在少量 VPL(几百个)和所有其他场景点之间计算,而不是许多任意场景点对。解决这些连贯可见性查询的一个不错的选择是使用阴影映射。
- 然而,即使对于中等大小的场景,每帧计算数百个阴影贴图也太慢了,并且不能很好地适应场景复杂性,需要一种可以快速解决数百个动态生成的 VPL 的可见性查询的方法。
- ISM 是低分辨率阴影贴图,它是根据场景的粗略简化点表示计算得出的,然后是通过拉-推通过来填充孔洞。虽然 ISM 可能包含不正确的深度值,但间接照明中产生的误差很小,但计算增益很大。
1.场景预处理
- 通过一组密度大致均匀的点来近似 3D 场景。每个点都是通过随机选择一个概率与三角形面积成正比的三角形,然后在三角形上选择一个随机位置来创建的。对于每个点,我们还存储其相对于其三角形的重心坐标以及三角形索引,以支持动态场景,而无需重新计算点表示。重心坐标还使我们能够检索每个点的法线和反射率,这是二次间接光反弹所必需的。
2.创建ISM
- 一个单一的 ISM 是通过将点表示放入深度缓冲区(使用框 splatting 内核,即 GL 点)创建的,其中点 splat 的大小基于其到相应 VPL 位置的平方距离(假设每个点样本代表相同的平均面积)。当 ISM 用于计算间接照明时,它需要覆盖整个半球的深度信息(VPL 在半球上发光),为此我们使用抛物线图 。通常,ISM 可以与其他常见的阴影贴图投影一起使用,例如正交投影或透视投影。如前所述,我们可以通过根据相应三角形的变形对点进行变形来轻松处理动态场景。虽然这会导致点分布不均匀,但我们的结果不会受到影响,因为我们的技术不依赖于准确的均匀分布。
- 经典阴影贴图和不完美阴影贴图的比较,带和不带推拉。 ISM 包含孔洞和不正确的深度值。这些像素中的大部分在拉-推操作之后被校正。请注意,单个 ISM 预计不会产生准确的阴影。然而,来自许多 ISM 的阴影平均化,伪影消失,这是渲染间接照明的理想选择
- 许多低分辨率 ISM 在一个通道中创建和渲染,并存储在单个大纹理中。为此,顶点着色器分割表示场景的输入点流,并将等量的点分配给大纹理中的每个 ISM。每个 ISM 接收点集的固定、随机子集。我们通常使用分辨率为 128 × 128 像素的抛物线 ISM,存储在 4096 × 4096 纹理中。
3.讨论
- pull-push pass 确实显着改善了结果,但与参考阴影的差异仍然可见。
- 具有不完美阴影贴图的全局照明:这个教学场景中的间接光由两个 VPL 表示。每个 VPL 使用基于点的场景表示生成阴影贴图。由于粗略的可见性信息就足够了,每个 VPL 仅使用点的稀疏子集(编码为颜色)以实时速率生成不完美的阴影贴图。总结所有 VPL 的贡献,产生最终的间接照明。右侧显示了不完美阴影贴图的示例(底部有和顶部没有拉-推);暗值表示较小的深度值,而亮值表示较大的深度。
- 我们使用简单的基于点的几何表示,主要是因为它可以轻松地用于并行创建数百个 ISM,并且它为动态场景提供直接支持。
四、使用 ISM 的间接照明
- 使用不完美的阴影贴图来确定每个 VPL 的可见性,因为它们非常高效——一次可以渲染数百个 ISM——并且它们的渲染成本仅松散地取决于整体多边形数量。
- 完全在 GPU 上从光源创建虚拟点光源。
- 每个 VPL 的 3D 位置是通过从(直接)点光源的角度渲染一个立方体贴图来确定的,我们通过构建必要的累积和边缘分布来执行重要性采样,从中我们选择 Nvpl VPL。
- 每个 VPL 创建一个抛物线 ISM,沿表面法线定向,在单个视图中捕获整个半球。
- 使用 G-Buffer 有效地从 Nvpl VPL 中收集 [Segovia et al. 2006] 在最终图像的渲染过程中。换句话说,我们仅从每个像素的 VPL 子集收集并执行几何感知模糊以去除噪声。
1.多次反弹
- 对于多次反弹,我们将 ISM 推广到不完美反射阴影贴图 。
- 我们直接在 GPU 上为每个额外的反弹生成 VPL,然后我们使用 ISM 进行渲染。给定第一次反弹的 VPL,我们为第二次反弹生成 VPL。场景的基于点的表示用于为每个初始 VPL 创建不完美的反射阴影贴图。
- 即,我们将阴影点渲染到 IRSM 中(不完美反射阴影贴图),而不是渲染阴影几何。
- 这会产生一个大纹理,其中包含第一次反弹 VPL 的所有抛物面图,但现在每个抛物面都存储自己的间接照明(而不是深度值)。然后对该纹理应用重要性采样以生成第二个反弹 VPL(类似于从直接光立方图生成的第一个反弹 VPL)。从这些点中提取的位置和法线信息用于将第二次反弹 VPL 定位和定向到几何体上。然后用不完美的阴影贴图渲染这些第二次反射 VPL 的照明,就像来自第一次反射 VPL 的照明一样。可以应用相同的原理来渲染进一步的反弹。
五、结果
- 使用 ISM 和 pull-push 进行处理漏光
- 不完美阴影贴图与传统阴影的比较
- 照明反弹次数(一次(1024的VPL)、两次、三次(都是256个VPL))
- 然而,如果使用的 VPL 数量不足,就会出现时间闪烁,这与最初的即时辐射度方法非常相似。当使用的点样本太少时,这种情况会进一步加剧。
- 更大的 ISM 需要更多的点样本才能真正提高渲染质量。
1.ISM 的其他应用
- 区域灯(重点来了):ISM 也可以用作从复杂形状的(纹理)区域光渲染软阴影的方法。图 10 显示了一个动画场景,其中一个有光泽的 BRDF 被一个多色的弯曲区域光照亮,我们用 512 个点光源来近似。每个点光源的阴影都是用 ISM 计算的。尽管每个单独的 ISM 都不准确,但生成的渲染不会出现明显的伪影。虽然有些技术仅针对渲染矩形区域光而提供更高的性能,例如Guennebaud 等人。ISM 实现了复杂形状的纹理光源以及 BRDF 与入射光的集成,从而产生光泽反射。
- 环境地图:相同的想法可用于从环境贴图中渲染直接照明。我们用 1024 个 VPL(再次使用重要性采样)来近似环境图,并使用 ISM 来计算阴影。图 11 显示了一个示例,其中光泽对象被环境贴图照亮,使用经典阴影贴图和 ISM 进行渲染。两者之间只有微小的差异,这表明 ISM 可以成为一种有用的技术,用于对包括光泽反射在内的全动态场景的环境贴图照明。
总结
- 通过近似可见性进行间接照明
- ISM的构建
- 使用ISM进行间接照明
- ISM在区域灯上的软阴影渲染应用