译文:GPU Gems 3 - Chapter 13

原文地址:

http://http.developer.nvidia.com/GPUGems3/gpugems3_ch13.html

第13章 - 后期处理立体光束的散射效果

本章中,我们介绍一种方法,当大气环境中存在阴影时,通过后期处理制造出立体光束散射的效果。通过改进现有的日光散射分析模型,加入立体遮蔽效果(effect of volumetric occlusion),然后在像素着色器中实现。在本书附赠的DVD中,有demo,展示了这项技术应用于很多种场景的动画图像。截图如下:

13.1 介绍

在现实世界中,我们在真空中几乎看不到东西,因为观察者和物体之间没有任何介质。在实时渲染中,通常用均匀的复杂度低的假设计算光在不同介质中的传播效果。这是基于辐射转移方程式(radiative transport equation (Jensen and Christensen 1998))的intractable特性,可以在一个复杂的互动的动画场景中说明放射,吸收和散射。本章中,我们考虑的是散射光在全部是立体阴影的环境中的效果。告诉大家,这个效果如何在应用于一个或多个图像光源的GPU像素着色器后期处理中实时计算出来。

13.10 参考文献

Dobashi, Y., T. Yamamoto, and T. Nishita. 2002. "Interactive Rendering of Atmospheric Scattering Effects Using Graphics Hardware." Graphics Hardware.

Hoffman, N., and K. Mitchell. 2002. "Methods for Dynamic, Photorealistic Terrain Lighting." In Game Programming Gems 3, edited by D. Treglia, pp. 433–443. Charles River Media.

Hoffman, N., and A. Preetham. 2003. "Real-Time Light-Atmosphere Interactions for Outdoor Scenes." In Graphics Programming Methods, edited by Jeff Lander, pp. 337–352. Charles River Media.

James, R. 2003. "True Volumetric Shadows." In Graphics Programming Methods, edited by Jeff Lander, pp. 353–366. Charles River Media.

Jensen, H. W., and P. H. Christensen. 1998. "Efficient Simulation of Light Transport in Scenes with Participating Media Using Photon Maps." In Proceedings of SIGGRAPH 98, pp. 311–320.

Karras, T. 1997. Drain by Vista. Abduction'97. Available online at http://www.pouet.net/prod.php?which=418&page=0.

Max, N. 1986. "Atmospheric Illumination and Shadows." In Computer Graphics (Proceedings of SIGGRAPH 86) 20(4), pp. 117–124.

Mech, R. 2001. "Hardware-Accelerated Real-Time Rendering of Gaseous Phenomena." Journal of Graphics Tools 6(3), pp. 1–16.

Mitchell, J. 2004. "Light Shafts: Rendering Shadows in Participating Media." Presentation at Game Developers Conference 2004.

Nishita, T., Y. Miyawaki, and E. Nakamae. 1987. "A Shading Model for Atmospheric Scattering Considering Luminous Intensity Distribution of Light Sources." In Computer Graphics (Proceedings of SIGGRAPH 87) 21(4), pp. 303–310.

13.2 云隙光

当空间中的可以让光发生散射的介质,比如气体分子和水汽,达到一定浓度时,遮挡住光的物体会投射出一定体积大小的阴影,并且制造出光的辐射现象。这种现象被叫做云隙光,也有叫它sunbeams, sunbursts, star flare, god rays, light shafts. 这样一来,本来平行照射的太阳光线就被散播到了各个方向。

最初的云隙光渲染方法是非实时的,利用算法计算并修改阴影体。不久之后,诞生了针对多光源进行计算的方法。这个方法在实时渲染中得到延续,就是利用以切片为基础(slice-based)的立体渲染技术。再后来通过硬件进行阴影贴图。以切片为基础的立体渲染方法能够展示出取样假象,需要高填充率和其它场景设置的配合。虽然阴影贴图增加了效率,由于切片为基础的缺点,实用这种方法会占用较多视频内存资源和渲染同步。另一个实时方法,在Radomir Mech(2001)的基础上,用多边形立方体,重叠的立方体(James 2003)在frame-buffer中通过depth peeling混合来累积。另一个相同的做法(James 2004),去掉了depth peeling使用累积立方体厚度的需求。我们的方法用到了为每一个像素进行后期处理的操作,不需要任何预处理或者其它场景设置,能在arbitrary complexity的动画场景中,满足任何情况光束的需求在复杂的动画场景中有更多的可能性。

在先前的著作中(Hoffman and Preetham 2003),已经实现了光在均匀介质中散射的GPU shader。我们把它进一步扩展到,通过一个后期处理的步骤实现立体阴影。这种后期处理的基础特征可以追溯到图像处理操作,辐射模糊(radial blur),在CG的很多demo(Karras 1997)中都出现过。虽然这些demo是用软件进行栅格化(rasterization)来实现后期处理的效果,我们通过硬件加速shader的后期处理,来支持更复杂的基于日光分析模型的取样。

13.3 立体光散射

为了计算每个像素的照明(illumination),我们需要说明从光源到该像素的散射,散射介质是否遮蔽的(occluded)。以阳光为实例,我们从日光散射的分析模型开始,回想一下方程式1如下:

这里的s表示光在介质中穿行的距离,q是光线和太阳之间的角度。E sun代表来自太阳的照明源,bex 是由光的吸收和向外散射的属性组成的消失变量,b sc 是由Rayleigh和Mie scattering属性组成的角动量散射条件(term, 也可能是项的意思)。这个方程式重要的是特征是,第一项计算了从放射点(emission point)到viewpoint一共吸收了多少光,第二项计算了view ray穿行过程中散射出去的附加量(additive amount)。在Hoffman and Mitchell 2002中,由遮蔽现象(比如云彩和建筑物,以及其它模型)所引发的效果,被简述为光源的减弱(attenuation of the source illumination)。方程式2如下:

D(f)是view location f的结合起来的衰弱的阳光遮蔽物体(sun-occluding object)的阻光率。这样做需要为图中每一点决定光源遮蔽,从而变得复杂。在屏幕上,我们没有完整的体积信息来决定遮蔽。不过,我们可以通过在图像空间中,通过把从像素到光源的射线上的样本进行相加,估算每个像素的遮蔽可能性。打到发射区上的样本与打到遮蔽体上的样本之间的比例,就是我们想要的遮蔽百分比,D(f). 在发射区域比遮蔽物体亮度高的情况下,用该方法估算效果最好。在13.5一节中,我们讲述如何处理不存在这样对比度的场景。

如果我们把照明样本根据样本按序号分开,n,后期处理简单地对图像的附加取样进行处理如方程式3:

13.3.1 控制求和

我们额外再介绍一下,以衰减系数为参数控制求和结果的方法。方程式4

这里exposure控制后期处理中的总体强度,weight控制每个样本的强度,decayi (for the range [0, 1])耗散每个样本的从光源射出后沿途的贡献值。这种指数式衰减因子实际上让每道光都能从光源平缓地从光源处射下来。

exposure和weight是简单的计量因子。增加它们其中任何一个都会在整体上增强计算出来的亮度。在demo中,样本的weight通过微粒的控制进行调整,exposure通过粗粒的控制进行调整。

因为样本都是来自原图,半透明物体没有额外加过效果。通过连续地附加屏幕空间(screen-space)通道,多光源可以应用于每一条光线投射。虽然这个实例中,我们用的是自己的日光分析模型,但实际上其它图像资源也能使用这个方法。

太阳的位置a,以及每一个屏幕空间图像点f,我们用从源头图像开始,沿着射线矢量,每间隔一个等量,连续地取样本,然后求和Df = (f-a)/n(density). 这里我们用density来控制样本间隔,这样做是希望从总体上减少样本迭代,并且保持一个有效的非混叠取样密度。当我们提高密度因子值时,样本间距也就增加了,结果就是光束更亮了,覆盖范围变短了。

在图13-2中,来自f1样本是没有被遮蔽的,结果就是通过常规L(s,q)评估得到了散射照明的最大值。在f2, 一部分样本沿途中碰到了建筑物,所以计算到的散射照明就少了。通过为图像中每一个像素进行射线求和,我们得出包含遮蔽掉的光散射的体积。

我们可以减少对光源图像进行降采样时的带宽需求。通过过滤减少取样假象,而且还能收获由filter kernel引起的相邻取样的本地散射。在demo中,一个基础双线过滤器足够了。

13.4 后期处理像素着色器 post-process pixel shader

这项技术的核心是13-1中列出的后期处理像素着色器,实现了方程式4的简单求和。

拿到初始图像后,样本坐标沿着射线的方向,从像素点延伸到屏幕空间的光点上。屏幕空间中的光点是通过标准的world-view-project转换计算出来的,计量和偏移都在坐标[1-,1]的范围内。方程式4求和出来的连续样本L(s, q, fi ),通过weight常数和指数式衰减的衰减系数进行计量,目的是为了将控制效果的方法参数化。样本密度之间的距离有可能被调整,作为最终的控制因子,混合结果的颜色是通过常量衰减系数exposure来计量的。

例13-1 后期处理着色器实现附加取样 post-process implementation of additive sampling

13.5 Screen-Space Occlusion Methods 屏幕空间遮蔽方法

如我们所讲的,在屏幕空间中取样不是纯粹的遮蔽取样。由于表面的纹理的不同,会导致不理想的条纹出现。幸运的是,我们可以用下面的方法处理这些不理想的效果。

13.5.1 The Occlusion Pre-pass Method 遮蔽计算光子图方法

如果我们把遮蔽物体渲染成黑色不加纹理地放到source frame buffer中,图像处理生成地光射线会呈现在图像上。然后遮蔽的场景物体会被进行普通的着色渲染,后期处理结果以附加的形式混合进场景中。这个方法可以与渲染未着色深度pre-pass的普通技术同时使用,以限制完全着色的像素的深度复杂度。图13-3展示了该方法的步骤。

13.5.2 遮蔽Stencil方法 The Occlusion Stencil Method

在早期的图形硬件中,通过stencil buffer或者alpha buffer可以得到相同的结果,而不需要使用pre-pass。图像的primary放射元素(比如天空)被当作normal进行渲染,并且同时设定stencil bit. 接下来渲染遮蔽的场景物体时不会用到stencil bit。到了后期处理时,只有带有stencil bit的样本才会计入附加混合中(additive blend)。

13.5.3 遮蔽对比度方法 The Occlusion Contrast Method

同样地,这个问题还可以这样解决。当纹理内容,雾,空气透视,光适应(light adaption)面对光源时的效果强度增强时,减少纹理对比度。任何能减少照明频率和遮蔽物体对比度的方法都可以消除拖尾假象(streaking artifact).

13.6 Caveats

尽管这种方法可以强制性地达到想要的效果,但它不是完全不受限制的。当处理距离光源相对较近的区域时,来自背景物体的光束会出现在前景物体前面,如图13-4所示。在一个全方面的辐射传递解决方案中,前景物体应该正确地遮挡住背景光束。这个问题没有引起人们注意的原因是,它会被当作是相机镜头效果的表现,也就是光散射发生在场景前面的一层中。当高频率纹理物体出现时,这种假象可以减少。

因为遮蔽物体超出了图像边缘,光束就会闪烁,因为它们超出了可视样本的范围。这种假象可以通过在屏幕周边扩大渲染范围以增加样本可及范围来减少。

最后,当需要垂直面对光源时,光的屏幕空间位置能够趋于无限大,致使样本之间的间隔变大。可以用保护带(guard-band)区域夹住屏幕空间位置来减小。换一种说法,效果会在向着垂直面的方向上逐渐减弱,当用到遮蔽方法时又会进一步减弱。

13.7 The Demo

本书DVD中的demo用了Shader Model 3.0做后期处理,因为需要用到的纹理样本超出了Shader Model 2.0的极限。最终的效果是一样实现了的,与早先在图形硬件中用stencil occlusion方法附加frame-buffer混合多通道(pass)来实现相比,效率几乎一样。如图13-5所示。

13.8 应用扩展

在低分辨率的条件下取样有可能见到纹理带宽需求。通过随机取样变化样本图形能进一步增强,由此可以减少在取样密度减少时出现的常规图形假象。

我们的方法是在着色器的单通道执行中进行后期处理。在多通道方法中,像素着色器求和是,从光源辐射出的同轴长方形带宽可能被累积进连续输出带宽的结果,通过方程式L(s, q, f) = Li - 1(s, q, f) + Li (s, q, f)。这也许不是最能适应当前硬件设计的办法,但需要的取样最少,运算限制最小。

在光束强度和避免过度饱和之间创造平衡,需要调整衰减系数。一个能够表现光对连贯图像调色平衡适应度的分析公式,可能产生一个自动方法来获取连贯地观察图像。举个例子,假如我们能够评估照明的平均值,最小值和最大值在图像上混合后的正确色彩斜坡,就能够避免图像过度曝光或者灰暗。

13.9 总结

我们介绍了一个由于环境中的阴影而产生体积光散射的简单的后期处理方法。我们通过扩展现有日光散射分析模型的方法来涵盖体积遮蔽的贡献,我们还介绍了如何在像素着色器中实现它。demo也展示了,这是一个非常实用的方法,能够应用于任何场景复杂度的动画图像。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容