(完整版)延迟渲染的一些思考
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
延迟渲染的一些思考
最近一直在准备开题,打算做延迟渲染(Deferred Shading)相关的实现。Deferred Shading 是目前实现多动态光源实时渲染的最主流的技术了。其实Deferred Shading后面还有Deferred Lighting和Inferred Lighting这两种更先进一点的改进技术,可师兄师姐们的经验告诉我,开题不能开太难了。如果开题太难了,最后实现的时候实现不出来,那就是给自己找麻烦了。
其实Deferred Shading技术在国外已经提出近20年了,在游戏中实际应用也有近10年了,近几年出的几个好的游戏引擎中几乎都用到了它。在国外,DS应该说是相当成熟了,可国内运用这种技术的引擎好像还没有听说过。我想并不是国内没有人会这种技术,网上很多博客都提到DS了,也有人自己实现了DS效果。只是这种技术对硬件的要求比较高,国内的游戏要照顾大多数的玩家。国外的玩家有可能因为想玩某个很酷的新游戏而升级硬件,国内几乎没有哪一款游戏有这种魅力。我想这也是为什么国内的游戏技术水平与国外的相差的不止一个级别的原因之一。
国内有些研究过DS的朋友在网上公布了他们的研究结果,不过好像并没有想像中那么好。他们的实现中要么就没有考虑阴影(比如燕良的博客中的他实现的源代码和效果图,我还没有认真研究他的源码,不过从他的效果图中看不到有阴影的迹象。
但光源数量达不到DS算法研究者声称的几十上百个动态光源的效果(吕希鸣的博客中有他实现的效果,他用的是Shadowmap实现的阴影,但他自己都坦言:“在GeForce-7300GT 上,最多画4个光源,再多就变幻灯片了,而且模型数量不能太
多。”/lv_ximing/archive/2010/07/27/5766569.aspx)。
因为这个问题,我纠结了很长时间,DS算法说起来是比较简单,空间换时间。可为什么大部分相关文章在谈到DS的优点的时候,都说可以实现多动态光源,去很少提到阴影的具体实现方法,好像阴影是理所当然的事。
《GPU精粹2》中有一篇文章《S.T.A.L.K.E.R.中的延期着色(Deferred Shading in
S.T.A.L.K.E.R.)》,其中介绍的阴影也是用shadowmap来实现的。
《GPU精粹3》中有一篇专门的介绍延迟渲染的,《Tabula Rasa中的延迟着色技术》,其实网上就有这篇文章的翻译:(“天堂里的死神”童鞋很给力,《GPU精粹3》的中文版是10年6月才出版的,他09年就翻译了这篇文章。)
阴影也是用shadowmap实现的。他还有一篇相关的博客《“杀戮地带2”中的延迟渲染》
是用的shadowmap来实现的。
这么多的经典游戏中都是用的shadowmap,看来shadowmap是比较好的选择了。不过也有文章提到用DS实现阴影体渲染的,最后将会附上原文,但没有使用多个光源,如果真的有多个动态光源,估计计数量也够呛。
好了,开题的事就基本定下来了,题目就定为“多光源动态光照的实时渲染”之类的吧,反正是基于延迟渲染的,即使实现了延迟渲染之后,想进一步做Deferred Lighting和Inferred Lighting,也在题目范围之内。也算了了一大心事了,开题报告就好说了。此事告一段落,等导师让我们准备开题答辩时,再写开题报告吧。从此可以全心地准备找实习了,腾讯5
月8来来汉笔试,期待中。希望能去游戏开发岗位实习。
这是《OpenGL Shading Language(2nd Edition)》第13章的一节,讲的是用延迟渲染实现阴影体。(最近比较忙,时间有限,我只把这篇文章中基本关键部分翻译出来了的,水平有限,仅供参考。)
13.3. Deferred Shading for Volume Shadows
With contributions by Hugh Malan and Mike Weiblen
One of the disadvantages of shadow mapping as discussed in the previous section is that the performance depends on the number of lights in the scene that are capable of casting shadows. With shadow mapping, a rendering pass must be performed for each of these light sources. These shadow maps are utilized in a final rendering pass. All these rendering passes can reduce performance, particularly if a great many polygons are to be rendered.
It is possible to do higher-performance shadow generation with a rendering technique that is part of a general class of techniques known as DEFERRED SHADING. With deferred shading, the idea is to first quickly determine the surfaces that will be visible in the final scene and apply complex and time-consuming shader effects only to the pixels that make up those visible surfaces. In this sense, the shading operations are deferred until it can be established just which pixels contribute to the final image. A very simple and fast shader can render the scene into an offscreen buffer with depth buffering enabled. During this initial pass, the shader stores whatever information is needed to perform the necessary rendering operations in subsequent passes. Subsequent rendering operations are applied only to pixels that are determined to be visible in the high-performance initial pass. This technique ensures that no hardware cycles are wasted performing shading calculations on pixels that will ultimately be hidden.
To render soft shadows with this technique, we need to make two passes. In the first pass, we do two things: