为什么阴影贴图是标准的?


41

尽管我是一名程序员,但我几乎没有接触过游戏开发。我这个问题已有一段时间了,现在我正在研究游戏开发,所以我认为这是个好时机。

为什么阴影贴图似乎是游戏用来制作阴影的唯一方式?直言不讳,它看起来很糟糕。即使现代游戏的阴影设置已达到最大值,也会出现锯齿状的块状Y阴影,这非常分散注意力。

11年前制作的《毁灭战士3》使用的阴影体积看上去比我见过的任何阴影贴图实现都要好得多,其中包括在发布此问题的同一周发布的AAA游戏。《毁灭战士3》的第三方修改器甚至使阴影的边缘变得柔和,使它们在视觉上更加令人印象深刻。

实现诸如阴影卷之类的东西是否存在某种技术问题或限制?阴影贴图是否易于实施,以至于开发人员甚至不需要考虑其他任何东西?

我能够找到的关于该主题的唯一信息是,构成体积的多边形可能很大,从而要求更高。影子卷可能对系统有更高的要求,但是如果是这样的话,它们在2004年如何摆脱使用它们的困扰?

这个问题并非仅针对阴影映射与阴影体积,它们只是我在完整产品中使用过的仅有的两个,而我只是无法在其他任何技术上找到很多信息。


3
仅需注意-Doom 3当时的性能非常密集,即使在某些现代系统上,它仍然是起伏不定的(而且我并不是在谈论集成GPU,尽管在这里并不太合适;当然,很有可能由于年代久远,但是...)。我已经看到它在许多不能进行阴影和照明的计算机上运行。显然,要在游戏中获得正确的阴影有很多复杂性,而《毁灭战士3》就是一个很好的例子,说明了逼真的图形在众多计算机配置上的难易程度。
a安2015年

1
《毁灭战士3》比开发开始时要早几年(至少考虑到图形API的选择)。它有几个后端可以处理几代硬件在Shader Model 2.0之前的版本,这意味着大约1/4的引擎几乎是便携式的(甚至早于GLSL),其余3/4是古老的NV和ATI硬件扩展的代码路径。与游戏发布时间无关。它选择的模具阴影量可能是其最少的问题。
安东·科尔曼

Answers:


48

正如您所提到的,阴影贴图和模具阴影(阴影体积)绝对是其中的两个,所以我将继续比较两者。而且,由于您已经指出了阴影贴图的最明显缺点以及模板阴影的优点,因此我将做相反的事情。

模具阴影的缺点

  1. 阴影与浇铸网格的形状匹配。这是非常有限的,并且可能是不使用模板阴影最大技术原因。树叶,灌木,铁丝网,布上的撕裂和其他常见的阴影投射游戏元素都使用Alpha透明度来定义对象的形状。但是由于模具阴影与网格匹配,而不是与网格上纹理的可见部分严格匹配,因此不能将其用于此类对象。例如,树中的一簇叶子通常是四边形上的一簇叶子的纹理。模具阴影只能显示四边形本身的阴影(并且存在问题,因为四边形不是封闭的网格,但这是次要的细节,我将跳过此答案,因为它是通常可以解决)。
  2. 无法做准确的柔和阴影。您已经指出,《毁灭战士3》已经过修改,可以产生柔和的阴影。至少在此版本中,此阴影将阴影映射用于柔和阴影。我也看到过用于软化硬阴影的屏幕空间技术,但是它们容易出现各种问题。
  3. 无法在透明对象上做阴影。有一些解决方法-在单独的通道中为透明对象渲染阴影,然后将它们合成。但是除了困难的解决方法外,模版阴影的性质还使得屏幕上的每个像素处于或不处于阴影中。这也是如上所述没有柔和阴影的原因。
  4. 正如Angew在评论中指出的那样,通常被称为“ Carmack's Reverse”的模版阴影通常是首选的,也是最可靠的实现,实际上已申请了专利。(未获得Carmack的专利;他必须为Doom 3的开源版本解决这一问题)

赞成阴影贴图

除了不受我专门列出的模板阴影限制之外,阴影映射还有一些其他优点:

  1. 可扩展性。尽管阴影贴图既不便宜也不完美(ed:但是模具阴影也不便宜),但通过更改阴影贴图的分辨率或更改阴影的过滤效果,以保真度为代价进行交易是相对容易的。这使得调整不同系统的阴影质量/性能相对容易。正如您所指出的那样,这通常并不完美,但这在很大程度上取决于播放器的感知能力以及他们所玩游戏的分辨率(更高的屏幕分辨率将更容易看到阴影的阻塞性映射)。一些AAA游戏(例如Fracture)通过选择正确的滤镜和调整正确的旋钮,在阴影贴图方面做得非常出色,而许多AAA游戏只是将其拍打起来并​​说“足够好”。
  2. Cookies(带阴影的阴影):添加聚光灯或彩色玻璃的纹理,您可以模拟各种现实世界的光源。顺便说一下,这对于模板阴影也是可行的,但是无论如何,它几乎都涉及阴影映射的所有设置(用于将光的纹理投影到对象上的投影矩阵与用于阴影映射的投影矩阵相同)。
  3. 透明阴影:大多数游戏对此的尝试不多,但阴影映射可能会产生透明阴影。我不仅指像我前面提到的树木和篱笆这样的alpha切口,而且还指部分透明的阴影,例如烟尘中的阴影。

这些列表都不是详尽无遗的。

因此,尽管您对阴影映射和模板阴影的观察是正确的,但模板阴影的缺点却可以阻止很多理想的效果,并且阴影映射也有其自身的一些优势。


1
啊,我没有考虑其中的大多数东西,像树叶这样的透明纹理是一个相当大的问题。感谢您的回答!
2015年

1
没问题:)其中一些很容易错过!
Jibb Smart 2015年

8
我想说阴影体积的另一个问题是,深度传递不像相机在阴影中一样,并且深度失败已获得专利。
恢复莫妮卡

好点,Angew。我已经添加了不使用模板阴影的原因,并阐明了不使用模板阴影的主要原因是不使用模板阴影的“最大技术理由”,因为专利问题本身可能就是一个阻碍。
Jibb Smart 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.