《Real-Time Rendering 4th Edition》全文翻译 - 第7章 阴影(下)7.7 ~ 7.10

CSDN 这次文本编辑器改版后真是太舒服了!

业余翻译,若有不周到之处,还请多多指教!

实时渲染(第四版)Real-Time Rendering (Fourth Edition)

第7章 阴影 Chapter 7 Shadows

7.7 滤波阴影贴图 Filtered Shadow Maps

一种可以对生成的阴影贴图进行滤波的算法是 Donnelly 和 Lauritzen 的方差阴影贴图(variance shadow map,VSM)[368]。该算法在一张贴图中存储深度,在另一张贴图中存储深度的平方。生成贴图时可以使用 MSAA 或其他反走样方案。可以对这些贴图进行模糊处理,mipmap,放置在求和区域表中 [988] 或任何其他方法。将这些贴图作为可滤波纹理的能力是一个巨大的优势,因为从它们中检索数据时,可以使用整个采样和滤波技术合集。

我们将在此处更深入地描述 VSM,以了解该过程的工作方式。同样,此类算法中的所有方法都使用相同类型的测试。有兴趣进一步了解该领域的读者可以查阅相关参考资料,我们也建议阅读 Eisemann 等人的书 [412],该书为此主题提供了更大的扩展。

首先,对于 VSM,在接收器的位置采样深度图(仅一次),以返回最近的光遮挡器的平均深度。当该平均深度 \large M_{1},被称为一阶矩(first moment),大于阴影接收器 \large t 的深度时,该接收器被视为完全处于光线下。当平均深度小于接收者的深度时,将使用以下公式:

其中 \large p_{max} 是光中样本的最大百分比,\large \sigma ^{2} 是方差,\large t 是接收器深度,\large M_{1} 是阴影图中的平均预期深度。深度平方阴影图的样本 \large M_{2},称为二阶矩(second moment),被用于计算方差:

值 \large p_{max} 是接收器可见度百分比的上限。实际照度百分比 \large p 不能大于此值。这个上限来自切比雪夫不等式(Chebyshev’s inequality)的单面变体。该方程试图使用概率论来估计遮挡物在表面位置的分布超出表面到光的距离的程度。Donnelly 和 Lauritzen 证明,对于固定深度处的平面遮挡器和平面接收器,\large p=p_{max},因此公式 7.7 可作为许多真实阴影情况的良好近似。

Myers [1251] 解释了关于这种方法为何起作用。在阴影边缘,区域上的差异会增加。深度差异越大,差异越大。因此,\large (t-M_{1})^{2} 项是可见度百分比的重要决定因素。如果此值刚好略高于零,则意味着平均遮挡器深度比接收器更稍微接近光线,然后 \large p_{max} 接近 1(完全照亮)。这将沿着半影完全照亮的边缘发生。进入半影,平均遮挡物深度更接近光源,因此该项变大并且 \large p_{max} 减小。同时,方差本身在半影内变化,从沿边缘的几乎为零到最大的方差,在这些方差中,遮挡物的深度不同,并且面积均等。这些项相互抵消,以在半影上产生线性变化的阴影。与其他算法的比较请参见图 7.26。

图7.26. 左上角是标准阴影贴图。右上角是透视阴影贴图,增加了观察者附近的阴影贴图纹理密度。左下角,百分比渐近的软阴影,当遮挡物到接收器的距离增加时,阴影变柔和。右下角是具有恒定软阴影宽度的方差阴影贴图,每个像素用单个方差贴图样本进行阴影处理。(图片由Nico Hempe,Yvonne Jung 和 Johannes Behr提供。)

 

方差阴影贴图的一个重要特征是,它可以以优雅的方式处理由于几何形状而引起的表面偏差问题。Lauritzen [988] 推导了如何使用表面的斜率修改二阶矩的值。偏差和来自数值稳定性的其他问题可能是方差贴图的问题。例如,公式 7.8 从另一个相似的值中减去一个大的值。这种类型的计算往往会放大底层数值的精确度不足问题。使用浮点纹理有助于避免此问题。

由于 GPU 的优化纹理功能得到了有效利用,因此整体 VSM 可以显着提高处理时间,从而提高图像质量。虽然 PCF 需要更多的样本,并因此需要更多的时间来避免在生成较柔和的阴影时产生噪声,但 VSM 只能使用一个高质量的样本来确定整个区域的效果并产生平滑的半影。这意味着在算法的限制内,可以在不增加成本的情况下任意地使阴影变得柔和。

与 PCF 一样,滤波内核的宽度决定了半影的宽度。通过找到接收器和最近的遮挡物之间的距离,可以改变内核宽度,从而产生令人信服的软阴影。mipmap 操作后的样本对于宽度缓慢增加的半影的覆盖率估算不佳,从而产生了盒状伪像。Lauritzen [988] 详细介绍了如何使用求和区域表来产生更好的阴影。图 7.27 显示了一个示例。

图7.27. 方差阴影贴图,其中到光源的距离从左到右增加。(图片来自 NVIDIA SDK 10 [1300] 示例,由 NVIDIA 公司提供。)

 

当两个或多个遮挡物覆盖接收器且一个遮挡物靠近接收器时,沿半影区域的一个位置方差阴影贴图将分崩离析。来自概率理论的切比雪夫不等式(Chebyshev inequality)将产生与正确的光照百分比无关的最大光照值。最近的遮挡物(仅部分遮挡了光线)使方程的近似值偏离了目标。这会导致漏光(light bleeding,又称 light leaks),而被完全遮挡的区域仍会接收光。见图 7.28。通过在较小的区域上采集更多样本,可以解决此问题,将方差阴影贴图转变为 PCF 形式。与 PCF 一样,速度和性能之间也要取舍,但对于阴影深度复杂度较低的场景,方差贴图效果很好。Lauritzen [988] 提出了一种由艺术家控制的方法来改善该问题,该方法是将较低的百分比视为完全阴影,并将其余百分比范围重新映射为 0% 至 100%。这种方法使漏光变暗,但总体上使半影变窄。尽管漏光是一个严重的限制,但 VSM 可以很好地从地形中产生阴影,因为这种阴影很少涉及多个遮挡物 [1227]

图7.28. 在左侧,方差阴影贴图应用于茶壶。在右侧,三角形(未显示)在茶壶上投射阴影,从而在地面上的阴影中引起令人反感的伪像。(图片由马可·萨尔维(Marco Salvi)提供。)

 

能够使用滤波技术快速产生平滑阴影的希望在滤波阴影贴图中引起了极大的兴趣。主要挑战是解决各种漏光问题。Annen 等人 [55] 介绍了卷积阴影贴图(convolution shadow map)。扩展了 Soler 和 Sillion 的平面接收器算法 [1673] 背后的思想,该思想是通过傅立叶展开来对阴影深度进行编码。与方差阴影贴图一样,可以对此类贴图进行滤波。该方法收敛于正确答案,从而减少了漏光问题。

卷积阴影贴图的一个缺点是需要计算和访问多个项,从而大大增加了执行和存储成本 [56,117]。Salvi [1529,1530] 和 Annen 等人 [56] 同时并独立地提出了基于指数函数使用单个项的想法。该方法称为指数阴影贴图(exponential shadow map,ESM)或指数方差阴影贴图(exponential variance shadow map,EVSM),该方法将深度的指数及其二阶矩保存到两个缓冲区中。指数函数更接近于阴影贴图执行的阶跃函数(step function)(即是否在光线下),因此可以有效减少漏光伪像。它避免了卷积阴影贴图带来的另一个问题,即振铃(ringing),在此问题中,在超过原始遮挡器深度的特定深度处可能会发生轻微的漏光。

存储指数值的一个限制是,二阶矩值可能变得非常大,因此使用浮点数会超出范围。为了提高精度并允许指数函数更陡峭地下降,可以生成 z 深度以使其为线性 [117,258]

由于与卷积贴图相比,VSM 具有更高的质量,更低的存储量和更好的性能,因此,指数阴影贴图方法引起了三种滤波方法的最大兴趣。Pettineo [1405] 指出了其他一些改进,例如使用 MSAA 改善结果并获得一些有限的透明度的能力,并描述了如何使用计算着色器改善滤波性能。

最近,Peters 和 Klein [1398] 引入了矩阴影贴图(moment shadow mapping)。它提供了更好的图像质量,但是这是以使用四个或更多的矩(moments)为代价,从而增加了存储成本。可以通过使用 16 位整数存储矩来降低此成本。Pettineo [1404] 实现了这种新方法并将其与 ESM 进行了比较,从而提供了探索多种不同方法的代码基础。

层级阴影贴图技术可以应用于滤波后的贴图,以提高精度 [989]。与标准层级贴图相比,层级 ESM 的一个优势是可以为所有层级设置单个偏差因子 [1405]。Chen 和 Tatarchuk [258] 详细介绍了层级 ESM 遇到的各种漏光问题和其他伪像,并提出了一些解决方案。

可以将过滤后的地图视为 PCF 的一种廉价形式,只需少量样本即可。像 PCF 一样,此类阴影具有恒定的宽度。这些过滤的方法都可以与 PCSS 结合使用,以提供可变宽度的半影 [57,1620,1943]。矩阴影贴图的扩展还包括提供光散射和透明效果的功能 [1399]

 

7.8 体积阴影技术 Volumetric Shadow Techniques

半透明物体会衰减并改变光的颜色。对于某些透明对象集,可以使用类似于 5.5 节中讨论的技术来模拟这种效果。例如,在某些情况下,可以生成第二种阴影贴图。半透明对象将呈现给第二种阴影贴图,并存储最接近的深度和颜色或 Alpha 覆盖范围。如果接收器没有被不透明的阴影贴图遮挡,则将测试透明深度贴图,如果遮挡了,则根据需要检索颜色或覆盖范围 [471,1678,1679]。这个想法使人联想到第 7.2 节中的阴影和光投影,所存储的深度避免了投影到半透明物体和光之间的接收器上。此类技术无法应用于半透明对象本身。

自阴影对于真实渲染对象(例如头发和云朵)非常重要,在这些对象中,对象很小或半透明。单深度阴影贴图不适用于这些情况。Lokovic 和Veach [1066]首先提出了深度阴影贴图(deep shadow maps)的概念,其中每个阴影贴图的纹理像素都存储了光如何随深度下降的函数。通常通过一系列不同深度的样本来近似此功能,每个样本都具有不透明度值。贴图中包含给定位置深度的两个样本用于查找阴影效果。GPU 的挑战在于有效地生成和计算此类函数。这些算法使用类似的方法,并且遇到了一些与顺序无关的透明性算法(第5.5节)所遇到的类似挑战,例如,如何紧凑地存储并原样表示每个函数所需的数据。

Kim 和 Neumann [894]率先提出了基于 GPU 的方法,他们将其称为不透明阴影贴图。仅存储不透明度的贴图是在一组固定的深度下生成的。Nguyen 和 Donnelly [1274]提供了此方法的更新版本,生成的图像如图 719 页上的图 17.2 所示。但是,深度截面都是平行且均匀的,因此,由于线性插值,需要很多截面来隐藏截面之间的不透明度伪像。Yuksel 和 Keyser [1953] 通过创建更紧密地遵循模型形状的不透明度贴图来提高效率和质量。这样做使他们减少了所需的层数,因为对最终图像的每一层计算都更为重要。

为了避免必须依赖固定的截面设置,目前已经提出了更多的自适应技术。Salvi 等人 [1531]引入了自适应体积阴影贴图(adaptive volumetric shadow maps),其中每个阴影贴图纹理像素都存储了不透明度和层深度。像素着色器操作用于在光栅化数据流(表面不透明度)时进行有损压缩​​。这避免了需要无限制的内存容量来收集所有样本并在一组中进行处理。该技术类似于深度阴影贴图 [1066],但压缩步骤是在像素着色器中动态完成的。将函数表示形式限制为固定的少量不透明度/深度对,可以使GPU上的压缩和检索效率更高 [1531]。由于需要读取,更新和写回曲线,因此该成本比简单的混合要高,并且它取决于表示曲线的点个数。在这种情况下,此技术还需要支持 UAV 和 ROV 功能的最新硬件(第 3.8 节的内容)。有关示例,请参见图7.29。

图7.29. 使用自适应体积阴影贴图进行头发和烟雾渲染 [1531]。(经 Marco Salvi 和 Intel Corporation 许可转载,版权为Intel Corporation,2010。)

 

自适应体积阴影映射方法用于 GRID2 游戏中的逼真的烟雾渲染,平均成本低于2 ms /帧 [886]。Först 等人 [509]描述并提供了用于实现视频游戏深度阴影图的代码。他们使用链表存储深度和 Alpha,并使用指数阴影贴图在光照和阴影区域之间提供软过渡。

阴影算法的探索仍在继续,各种算法和技术的综合变得越来越普遍。例如,Selgrad等。[1603] 研究存储具有链接列表的多个透明样本,并使用具有分散写入的计算着色器来构建地图。他们的工作使用深度阴影图概念以及滤波后的贴图和其他元素,从而为提供高质量的软阴影提供了更通用的解决方案。

 

7.9 不规则 Z 缓冲区阴影 Irregular Z-Buffer Shadows

由于多种原因,各种阴影贴图方法很受欢迎。它们的成本是可以预测的,并且可以很好地适应不断增加的场景大小,最坏的情况是与图元数量成线性关系。它们依靠光栅化来定期采样灯光的世界视野,从而将它们很好地映射到 GPU 上。但是,由于这种离散采样,出现了问题,因为眼睛看到的位置与光线看到的位置不是一一对应的。当光以比眼睛更少的频率采样表面时,会出现各种走样问题。即使采样率相当,也存在偏差问题,因为在与眼睛所见位置稍有不同的位置采样了表面。

阴影体积提供了一种精确的分析解决方案,因为光线与表面的相互作用会产生一组三角形,这些三角形定义了给定位置是被照明还是处于阴影中。当在 GPU 上实现时,算法的不可预测的成本是一个严重的缺点。近年来 [1648] 所探索的改进令人着迷,但目前没有证据表明在商业应用中有采用这些方法。

从长远来看,另一种分析阴影测试方法可能具有潜力:光线追踪(ray tracing)。其基本思想在第 11.2.2 节中进行了详细描述,它的基本原理非常简单,尤其是对于阴影而言。光线从接收器位置射向光。如果发现任何阻挡光线的物体,则接收器处于阴影中。快速射线追踪器的大部分代码专用于生成和使用分层数据结构,以最大程度地减少每条射线所需的对象测试数量。在动态场景的每个框架上构建和更新这些结构的方法有着数十年的历史,也是一个持续的研究领域。

另一种方法是使用 GPU 的光栅化硬件来查看场景,但不只是 z 深度,还存储了有关光的每个网格中遮挡物边缘的附加信息 [1003,1607] 。例如,假设在每个阴影贴图纹理像素处存储与网格单元重叠的三角形列表。这样的列表可以通过保守光栅化来生成,其中如果三角形的任何部分与像素重叠,而不仅与像素的中心重叠,三角形都会生成一个片元(第 23.1.2 节)。这种方案的一个问题是通常需要限制每个纹理像素的数据量,这反过来可能导致确定每个接收器位置的状态不准确。考虑到现代 GPU 的链表原理 [1943],每个像素存储更多数据当然是可能的。

但是,除了物理内存限制外,每个纹理像素在列表中存储可变数据量的问题还在于,GPU 的处理效率可能变得极低,因为单个warp 可能会包含一些片元线程,这些线程需要检索和处理许多项, 而其余的线程则处于空闲状态,无需进行任何工作。构建着色器以避免动态 “if” 语句和循环导致的线程发散对性能来说至关重要。

在阴影图中存储三角形或其他数据并针对它们测试接收器位置的另一种方法是翻转问题,存储接收器位置,然后针对每个三角形测试三角形。Johnson 等人首先探讨了保存接收机位置的概念。[839] 以及 Aila 和 Laine [14],被称为不规则 z 缓冲区(irregular z-buffer,IZB)。名称有点误导,因为缓冲区本身具有阴影贴图的正常,规则形状。相反,缓冲区的内容是不规则的,因为每个阴影贴图纹理像素将在其中存储一个或多个接收器位置,或者可能根本没有。参见图 7.30。

图7.30. 不规则 Z 缓冲区。在左上方,从眼睛观看的图像在像素中心生成了一组点。显示了形成立方体面的两个三角形。右上角为这些点在光源的视角中的显示情况。在左下角,将插入一个阴影贴图网格。对于每个纹理像素,将生成其网格单元内所有点的列表。在右下方,通过保守地对其进行栅格化来对红色三角形执行阴影测试。在触摸的每个纹理像素(以浅红色显示)时,列表中所有点均相对于三角形进行测试,以判断灯光的可见性。(底部的光栅图像由 Timo Aila 和 Samuli Laine 提供 [14]。)

 

使用 Sintorn 等人 [1645] 提出的方法,还有 Wyman 等 [1930,1932],一种多 pass 算法创建了IZB,并测试了其内容在灯光下的可见性。首先,从眼睛渲染场景,以找到从眼睛看到的表面的 z 深度。这些点将转换为灯光的场景视图,并由此设置灯光视锥的紧密边界。然后将这些点放置在光源的 IZB 中,每个点都放在其对应纹理像素的列表中。请注意,有些列表可能是空的,是灯光可以看到的空间,但是眼睛看不到任何表面。遮罩保守地光栅化到灯光的 IZB,以确定是否隐藏了任何点,等等。保守栅格化可确保即使三角形不覆盖光纹素的中心,也将针对可能重叠的点进行测试。

可见性测试在像素着色器中进行。测试本身可以可视化为光线追踪的一种形式。从图像点的位置到光源会产生一条光线。如果一个点在三角形内并且比三角形平面更远,则该点将被隐藏。一旦光栅化所有遮挡物后,将使用可见性结果对表面进行着色。该测试也称为视锥追踪(frustum tracing),因为三角形可以认为是定义视锥,该视锥会查看检查点是否包含在视锥中。

仔细的编码对于使此方法与 GPU 兼容至关重要。Wyman 等人 [1930,1932] 注意到它们的最终版本比初始原型快两个数量级。这种性能提升的一部分是直接的算法改进,例如剔除表面法线背离光线(因此始终不照明)的图像点,并避免为空纹理像素生成片元。其他性能提升来自改善 GPU 的数据结构,以及通过在每个纹理像素中使用较短的,相似长度的点列表来最大程度地减少线程差异。图 7.30 显示了一个带有长列表的低分辨率阴影图,用于说明目的。理想情况是每个列表一个图像点。分辨率越高,列表越短,但遮挡器生成的片元数量也越多。

从图 7.30 的左下方图像可以看出,由于透视效应,地面上可见点的密度在左侧明显比右侧更高。通过将更多的光的贴图分辨率聚焦在观察视角附近,使用层级阴影贴图有助于减少这些区域中的列表大小。

这种方法避免了其他方法的采样和偏差问题,并提供了完全清晰的阴影。出于审美和感官上的原因,通常需要柔和的阴影,但附近的遮挡物(例如 Peter Panning)可能会有偏差问题。Story 和 Wyman [1711,1712] 探索了混合阴影技术。其核心思想是使用遮挡物距离混合 IZB 和 PCSS 阴影,当遮挡物靠近时使用硬阴影的计算结果,而在更远的地方使用软阴影的计算结果。参见图 7.31。阴影质量通常对于附近的物体最为重要,因此,仅对选定的子集使用此技术,就可以降低 IZB 成本。此解决方案已成功用于视频游戏中。本章将从这样的图像开始,如第 224 页的图 7.2 所示。

图7.31. 在左侧,PCF 为所有对象提供均匀柔和的阴影。在中间,PCSS 通过与遮挡物的距离使阴影变柔和,但是与箱子左上角重叠的树枝阴影会产生伪像。在右边,来自 IZB 的清晰阴影和来自 PCSS 的柔和阴影提供了改进的结果 [1711]。(图片来自育碧的“全境封锁”。)

 

7.10 其他应用 Other Applications

将阴影贴图视为定义一定的空间,将光与暗分开,也可以帮助确定对象的哪些部分需要阴影。Gollent [555] 讲解了
CD Projekt 的地形阴影系统如何为每个区域计算仍然被遮挡的最大高度,然后可以将该最大高度用于阴影,不仅可以遮挡地形,还可以遮挡场景中的树木和其他元素。为了找到每个高度,为太阳绘制可见区域的阴影图。然后检查每个地形的高度场位置是否有阳光的可见性。如果在阴影中,则通过将世界高度增加一个固定的步长,直到看到太阳,然后执行二进制搜索,来估计太阳首次可见的高度。换句话说,我们沿着垂直线行进,然后进行迭代以缩小与阴影图的表面相交的位置,从而将明暗分开。对相邻的高度进行内部插值以在任何位置找到此遮挡高度。在图 7.32 中可以看到用于地形高度场的软阴影的此技术的示例。在第 14 章中,我们将看到更多使用光线步进(ray marching)穿过明暗区域的方法。

图7.32. 为每个高度场位置计算的地形以首次看到太阳的高度为单位。请注意阴影边缘的树木是如何正确产生阴影的 [555]。(CD PROJEKT ®,Witcher ®是CD PROJEKT Capital Group的注册商标。The Witcher © 游戏CD PROJEKT SA由CD PROJEKT SA开发。保留所有权利。The Witcher 游戏基于 Andrzej Sapkowski 的小说。所有其他版权和商标均为其各自所有者的财产。)

 

值得一提的最后一种方法是渲染屏幕空间阴影。由于分辨率有限,阴影贴图通常无法在小要素上产生准确的遮挡。这在渲染人脸时尤其成问题,因为我们特别容易注意到它们上的任何视觉伪像。例如,渲染发光的鼻孔(当不需要时)看起来是不协调的。虽然使用仅针对感兴趣区域的高分辨率阴影贴图或单独的阴影贴图可以提供帮助,但另一种可能性是利用已经存在的数据。在大多数现代渲染引擎中,从摄像机角度来看的深度缓冲区(来自较早的预渲染)在渲染期间可用。存储在其中的数据可以视为高度场。通过迭代采样该深度缓冲区,我们可以执行光线步进过程(第 6.8.1 节),并检查朝向光的方向是否被遮挡。尽管代价高昂,因为它涉及到重复采样深度缓冲区,但这样做可以为剪辑场景中的特写镜头提供高质量的结果,在剪辑场景中通常需要花费毫秒的时间。该方法由 Sousa 等人提出 [1678],并在当今的许多游戏引擎中普遍使用 [384,1802]

总结整章,到目前为止,某种形式的阴影贴图(shadow mapping)是用于将阴影投射到任意表面形状上的最常用算法。当在大面积(例如室外场景)中投射阴影时,层级阴影贴图可提高采样质量。通过 SDSM 为近平面找到合适的最大距离可以进一步提高精度。百分比渐进滤波(PCF)使阴影更柔和,百分比渐进软阴影(PCSS)及其变体使近处阴影更硬,不规则的 z 缓冲区可提供精确的硬阴影。过滤后的阴影贴图可提供快速的软阴影计算,并且在遮挡物远离接收器(如地形)时,效果特别好。最后,屏幕空间技术可用于更高的精度,尽管成本很高。

在本章中,我们重点介绍了当前在应用程序中使用的关键概念和技术。其中每个技术都有自己的优势,具体的选择取决于世界的大小,构图(静态内容还是动画),材质类型(不透明,透明,头发或烟雾)以及灯光的数量和类型(静态光源或动态光源;局部光源或远距离光源;点光源,聚光灯,或区域光),以及诸如基础纹理可以隐藏任何伪像的程度之类的因素。GPU 的功能不断发展和完善,因此我们希望在未来的几年中会继续出现与硬件良好匹配的新算法。例如,第 19.10.1 节中描述的稀疏纹理技术已应用于阴影贴图存储,以提高分辨率 [241、625、1253]

Sintorn,Kampe等人 [850,1647] 以一种创新的方法探索了将光的二维阴影贴图转换为三维三维像素集的想法(小盒子;请参见第13.10节)。使用体素的优点是可以将其分类为亮或暗,因此需要的存储量最少。高度压缩的稀疏体素八叉树表示法可存储大量灯光和静态遮挡物的阴影。Scandolo 等人 [1546] 将其压缩技术与使用双阴影图的基于间隔的方案相结合,从而提供了更高的压缩率。Kasyan [865] 使用体素圆锥追踪(第13.10节)从区域光生成软阴影。有关示例,请参见图 7.33。更多的圆锥形阴影显示在第 585 页的图 13.33 中。

图7.33. 上方是使用基本的软阴影近似生成的图像。下方是场景体素化时,使用视锥线跟踪的基于体素的区域光阴影。请注意,汽车的阴影要多得多。照明也因一天中的时间变化而有所不同。(图片由Crytek [865]提供。)

 

进一步阅读和资源 Further Reading and Resources

本章的重点是基本原理以及阴影算法需要什么质量(可预测的质量和性能)才能在交互式渲染中使用。我们避免了在渲染领域完成研究的过度详尽的分类,因为有两本书已经解决了这个问题。Eisemann等人的《实时阴影》(《Real-Time Shadows
》)一书。[412] 直接关注交互式渲染技术,讨论了各种算法及其优势和成本。SIGGRAPH 2012 课程提供了本书的摘录,同时还增加了对较新作品的引用 [413]。可从其网站 www.realtimeshadows.com 上获得其 SIGGRAPH 2013 课程的演示文稿。Woo 和 Poulin 的《阴影算法数据挖掘器》 (Shadow Algorithms Data Miner [1902])概述了用于交互式和批处理渲染的多种阴影算法。这两本书都提供了该领域数百篇研究文章的参考。

塔夫特的成对文章 [1791,1792] 很好地概述了常用的阴影映射技术及其所涉及的问题。Bjørge [154] 提出了一系列适用于移动设备的流行阴影算法,以及比较各种算法的图像。里尔(Lilley)的演讲 [1046] 对实用阴影算法进行了扎实而广泛的概述,重点是 GIS 系统的地形渲染。Pettineo [1403,1404] 和 Casta〜no [235] 的博客文章因其实用技巧和解决方案以及演示代码库而特别有价值。Scherzer 等人 [1558] 简要总结了专门针对硬阴影的作品。Hasenfratz 等人对软阴影算法的研究 [675] ,虽然已过时,但在一定程度上涵盖了广泛的早期工作。

 

 

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值