实时动态阴影补充延迟着色?

时间:2009-07-31 14:30:01

标签: c++ graphics directx hlsl

我目前有一个延迟渲染系统设置,可以渲染点光源和方向灯。我的问题是我可以选择不同形式的阴影,它可以根据点光源和定向光源制作阴影,可以使用延迟着色设置吗?

1 个答案:

答案 0 :(得分:7)

延迟渲染并没有什么特别之处需要独特的阴影技术。使用延迟渲染方案,大多数生成阴影的标准方法都可以正常工作。

阴影映射是目前在游戏等实时应用中使用的最常见的阴影算法。模板阴影在几年前很受欢迎,但由于各种限制,已经失宠了。阴影贴图与延迟着色一起正常工作。阴影映射的基本算法相当简单:

  1. 从灯光的角度渲染渲染目标纹理的深度(您需要为点光源渲染立方体贴图的6个面)。
  2. 当您为灯光执行灯光通过时,对于每个像素,将世界空间位置转换为灯光的视图空间,并将深度与阴影贴图中存储的深度进行比较。如果它大于阴影贴图深度,则该点位于阴影中,否则通常点亮。
  3. 与渲染一样,魔鬼在细节中。为了获得高质量的阴影,您需要仔细设置阴影贴图投影,以充分利用阴影贴图中可用的像素(搜索透视阴影贴图,级联阴影贴图)。由于精度问题,您将获得具有自阴影表面的各种伪影(“阴影痤疮”是最常见的一种),并且存在各种策略来减少这些伪影的发生率(深度偏差,投影矩阵调整)。为了减少分辨率不足的阴影贴图的块状,像素化外观,您可能需要执行一些阴影贴图过滤。百分比更接近过滤是标准方法,有多种方法可以执行PCF。

    您还要面对标准的质量/性能权衡,阴影和动态阴影往往是场景渲染中最昂贵的方面之一。有许多技巧和技巧可以尝试最大化阴影映射的性能。

    最近,基本阴影映射算法存在许多变化,它们试图通过不同地接近过滤问题来为给定的阴影贴图分辨率提供更好的结果。方差阴影贴图和指数阴影贴图是最近的两种技术,它们有一些很好的好处,但它们有一些独特的问题。

    Nvidia的developer site是图形编程的一个很好的资源,并且有很多关于阴影的文章。看看网站上提供的GPU Gems书籍的HTML版本,他们有关于阴影的各种文章,包括关于GPU Gems 3中的Variance Shadow Maps的权威文章。