工程科学与技术   2017, Vol. 49 Issue (4): 158-166
基于延迟着色技术的大场景反走样渲染架构设计
罗德宁1,2, 张建伟1,2     
1. 四川大学 计算机学院,四川 成都 610065;
2. 四川大学 视觉合成图形图像技术国家重点学科实验室,四川 成都 610065
基金项目: 国家高技术研究发展计划资助项目(2015AA016405)
摘要: 为解决飞行仿真领域其视景系统对逼真、复杂场景渲染质量要求高的问题,提出基于延迟着色技术的大场景反走样渲染架构以实现全球地景及场景特效的真实感渲染,达到飞行训练的效果。本渲染架构主要解决延迟着色技术与硬件反走样技术——覆盖采样反走样(CSAA)不兼容的问题,在延迟阶段生成带CSAA反走样的多渲染目标缓存(G-Buffer),在着色阶段通过记录在特定通道中的透明度蒙版信息进行几何体边缘恢复以进行最终的光照计算;对不同绘制组件开启不同等级的反走样等级以达到效果与效率的平衡,并利用类层次细节(LOD)模型构建技术及标记重要边界信息进行后处理等加强反走样效果。采用本渲染架构开发的视景系统,从实际训练及实验所得到的数据与效果表现上决定不同负载组件最终的采样倍数,这样系统的实时性高(>60 fps),能达到飞行模拟视景对渲染效率的要求,减少延迟与卡顿;同时该框架反走样效果好于亚像素还原反走样(SRAA)算法,从而视景系统能达到性能与画质的最佳组合。通过实际训练与飞行模拟专家鉴定,基于该框架系统的视景系统能达到飞行仿真训练的目的。
关键词: 反走样    覆盖采样反走样    延迟着色    类层次细节    渲染架构    
Designing Anti-aliasing Rendering Structure for Large Scenes Based on Deferred Shading
LUO Dening1,2, ZHANG Jianwei1,2     
1. College of Computer Sci.,Sichuan Univ.,Chengdu 610065,China;
2. National Key Lab. of Fundamental Sci. on Synthetic Vision,Sichuan Univ.,Chengdu 610065,China
Abstract: In order to meet the high requirements of realistic and complex scene rendering in the field of visual flight simulation,this paper proposed an anti-aliasing rendering structure for large scenes based on deferred shading,to achieve realistic rendering for a global landscape and all kinds of effects.The incompatible problems that built-in hardware anti-aliasing CSAA did not work with deferred shading were mainly solved by our rendering architecture,which depended on generating a multi-render target G-Buffer with CSAA anti-aliasing in the deferred phase and performing the final lighting calculation by recovering the geometry edge through the transparency mask information recorded in a particular channel during the shading phase.At the same time,different rendering components were set different levels of anti-aliasing to balance between efficiency and effectiveness.To improve anti-aliasing effects,the LOD model-building technology was used and the important post-process boundary information were marked.Owing to the final sampling multiples of different load components form actual training and the data and effect performance of the experiment,the visual system developed by rendering architecture had reached high real-time performance.It usually met over 60 fps,which greatly reduced latency and blocking.Meanwhile,the anti-aliasing effect was better than SRAA algorithm.Therefore,the visual system could achieve the best combination of performance and quality.It can achieve the purpose of flight simulation training identificated by training experts.
Key words: anti-aliasing    CSAA    deferred shading    LOD    rendering structure    

飞行仿真训练中,对视景系统的实时、真实感渲染要求较高,因此对飞行视景仿真系统的研究和设计[1]至关重要。延迟着色技术[2]是目前渲染引擎设计的主流渲染方式,能满足虚拟场景实时渲染的要求[3]。相比传统的前向渲染(forward rendering)方式在多光源渲染时低效率的问题,延迟着色在场景几何体渲染期间,不涉及任何光照,只输出光照的属性,之后作为输入在屏幕空间上进行光照处理,减少了不必要的计算开销,提高了多光源时的渲染效率。

文献[2]提到延迟着色框架无法兼容硬件多重采样反走样(MSAA)技术[4],因为渲染阶段每个像素只有一个样本,缺少几何体信息,再使用MSAA就变成了暴力的超级采样反走样(SSAA)[5]。作为延迟着色的改进方法延迟光照(deferred lighting)[6]部分解决了这个问题,但再次渲染场景的代价也不小。更重要的是,由于延迟着色框架的引入,基于后处理(post process)的反走样算法也流行起来。

早期后处理反走样方法,主要根据邻近像素间的深度或法线的差异程度进行边界检测,这样每个像素得到一个权重,就可以把邻近像素的颜色拿来插值得到反走样效果[2]。这种反走样的质量不足以与硬件反走样相比,但这是后处理反走样技术的开端。

文献[7]不再采用独立边界像素点决定反走样的混合方式,而根据边界像素点周围的状况确定出垂直方向进行混合,这样还原的子像素信息更加精确。该方法以线代替点作为搜索方向,因此计算量较大,渲染性能也下降明显。近年来,Reshetov提出形态学反走样(MLAA)[8],把边界分门别类,总结成Z、U、L等几种特定形状,而Z和U可以分解成L,最终根据L划分成三角形,从而确定混合区域。MLAA省去了文献[7]中繁重的计算,提高了反走样计算速度。

MLAA派生出多种不同的方法,这些都是基于图像形态学检测的后处理反走样技术,包括快速近似反走样(FXAA)[9]、距离到边反走样(DEAA)[10]、有方向的局部化反走样(DLAA)[11]、亚像素还原反走样(SRAA)[12]、亚像素改良形态学反走样(SMAA)[13]、边界斜率预测的形态学反走样[14]等。这些基于后处理的方法其实都在试图通过像素信息估算出子像素级的几何,然后进行反走样处理。如文献[7]通过独立点估算,MLAA通过L型估算,FXAA和DLAA通过线段估算。

基于后处理的反走样算法兼容延迟着色技术,主要对走样边界进行估算,而延迟着色架构不加以改进,无法适配目前大多硬件都能直接支持的SSAA、MSAA及CSAA[15]反走样方法。这些硬件反走样方法提供了性能与质量相权衡的可选等级,相比后处理反走样技术应用于游戏或3D应用程序中,使图像边缘更柔化、更平滑,渲染质量更好。

如何让硬件反走样方法用于延迟着色技术中,SRAA[12]基于着色变化频率一般低于几何变化频率,可以在较低分辨率上着色,而用较高分辨率恢复几何。SRAA的基本流程为:在延迟渲染框架中,渲染一个高分辨率(或者带MSAA)的G-Buffer,但在着色的时候仅在普通分辨率的情况下进行。累积的结果通过G-Buffer重建子像素信息,最后进行类似MLAA的反走样处理。这种方法结合了MSAA和MLAA,但可以用较低的采样样本做到高采样MSAA才能得到的效果,同时不增加着色的计算量。SRAA由于原理的问题,只能用在延迟着色框架中。

因硬件提供的反走样方法质量高、速度快,如果结合延迟着色技术就需要修改原有图形渲染流水线。在兼容了硬件反走样的延迟着色框架下,还可以结合后处理技术[16],这样可以利用低于硬件的内存开销和计算量达到更好的反走样效果。

作者针对全球地景及场景特效的真实感渲染,采用延迟着色渲染架构,并在此基础上结合延迟光照的特点进行适当改进,同时兼容硬件反走样CSAA,对不同渲染组件开启不同等级的反走样效果,从而提高大场景反走样的处理效果。

1 相关技术

本文所涉及到的技术有延迟着色技术、延迟光照技术和CSAA。着重介绍各技术的基本原理及优缺点。

1.1 延迟着色技术

多光源渲染时,前向渲染不能有效判断被渲染物体的遮挡情况,所以被遮挡物体也被计算,这样既占用了本不多的计算资源,又浪费了带宽。延迟着色是一种对3D场景进行后期光照处理的技术,能使3D光照计算转化为2D计算,避免多次渲染同一像素。

从前向渲染(图1)与延迟着色(图2)的流程图可知,在片元着色阶段,延迟着色将光照计算延迟到下一个基于屏幕着色的绘制遍进行;从渲染过程可知,前向渲染像素复杂度为Omn)(m为几何体数量,n为光源数量),延迟着色复杂度为 $O(m'n)$ $m'$ 为屏幕像素数量, $m' \ll m$ ),所以延迟着色能大大提高渲染效率。

图1 前向渲染过程 Fig. 1 Forward rendering process

延迟渲染剔除掉了物体在画面中被遮挡的几何体,只进行针对性的光照计算,从而避免了大量额外运算。式(1)展示了一个常见的光照着色方程:

${L_{\rm{o}}}(V) = \sum\limits_{k = 1}^n {{f_{{\rm{shade}}}}({B_k},{{\mathit{\boldsymbol{l}}}_k},{\mathit{\boldsymbol{v}}},{\mathit{\boldsymbol{n}}},{{\mathit{\boldsymbol{c}}}_{{\rm{diff}}}},{{\mathit{\boldsymbol{c}}}_{{\rm{spec}}}},m)} $ (1)

式中,Bk为当前像素的光密度或颜色,lk为当前像素的光线向量,v为当前像素的视线方向,n为当前像素的法向量,cdiff为当前像素的散射光颜色,cspec为当前像素的镜面光颜色,m为当前像素的镜面光相关系数。

图2 延迟着色过程 Fig. 2 Deferred shading process

对于每个像素,使用式(1)计算出每个光源对其的影响并做累加即可得到其最终的着色颜色。因此,如果有式中所需的几个必要元素即可完成对要渲染物体的正确着色,而得到这些基本元素即为延迟着色的G-Pass所要完成的操作。延迟着色中的G-Buffer一般包含深度、法线、散射颜色属性、高光颜色属性、自发光颜色属性等基本信息。

除此之外,具体的细节及G-Buffer的详细组织跟渲染架构密切相关,但深度、法线、散射光颜色属性是必要的。有了G-Buffer之后即可通过第2个Deferred Pass,并使用G-Buffer中的信息完成最终着色。

从上述G-Buffer所包含的必要信息可以看出,用一个即使是最大空间的渲染目标(render target,RT)也不能包含全部必要信息,至少需要2个。在硬件没有多渲染目标(multi-render target,MRT)支持的情况下就意味着多个Pass,这种情况下较传统的前向渲染效率不会高太多。而有了MRT之后,其所对应的另一个问题即为多个缓冲所带来较大的空间占用率。

1.2 延迟光照技术

由延迟着色中的G-Buffer可以看出,有2个信息需要占用相应的RT空间:Diffuse albedo和Specular albedo;延迟光照的改进即将这两部分从延迟着色的G-Buffer中去掉,只在Deferred阶段做相应的光照计算,只在最终的Shading阶段进行。因而,延迟光照相对于延迟着色其实增加了一个最终Shading的阶段。延迟光照之所以能将光照与最终的着色分解,需要对原始的着色方程进行如式(2)所示的调整:

${L_{\rm{o}}}(V) = \sum\limits_{k = 1}^n {{{\mathit{\boldsymbol{c}}}_{{\rm{diff}}}} \otimes {f_{{\rm{diff}}}}({B_k},{{\mathit{\boldsymbol{l}}}_k},{\mathit{\boldsymbol{n}}}) + {{\mathit{\boldsymbol{c}}}_{{\rm{spec}}}}({B_k},{{\mathit{\boldsymbol{l}}}_k},{\mathit{\boldsymbol{n}}},{\mathit{\boldsymbol{v}}},m)} $ (2)

如果在延迟着色中使用了更复杂的着色模型,可能就需要根据具体情况对式(2)进行不同的改动,以便各个Pass间的独立。

延迟光照的主要流程为:

1)准备G-Buffer(法线&深度);

2)进行延迟光照并得到Light-Buffer;

3)在Light-Buffer的基础上重新渲染场景并进行最终的着色。

通过上述描述基本上可以看出延迟着色与延迟光照的主要区别:

1)延迟着色需要更大的G-Buffer完成对Deferred阶段的前期准备,且需要硬件有MRT的支持,这对硬件要求更高。

2)延迟光照需要2个几何体元的绘制过程完成整个渲染操作:G-Pass与Shading Pass。这个既是劣势也是优势:由于延迟着色中的Deferred阶段是在完全基于G-Buffer的屏幕空间进行,这也导致了物体材质信息的缺失,在处理多变的渲染时就需要额外操作;延迟光照可以在Shading阶段得到物体的材质信息进而使这一问题的处理变得较简单。

3)2种方法的上述操作均是只能完成对不透明物体的渲染,透明或半透明的物体则需额外的传统Pass完成。

1.3 覆盖采样反走样(CSAA)

反走样技术广泛应用于图形实时渲染过程中以提升渲染效果,一些硬件也直接支持反走样技术。常见的硬件反走样技术有SSAA、MSAA和CSAA,这些反走样技术提供了性能与质量之间的可选等级。

SSAA在每个像素分布的多个采样点都执行一遍像素着色(pixel shading,PS),质量好,但却是最暴力的采样方法,效率低而且占用较大的存储空间。MSAA在每个像素只执行一次像素着色,相比SSAA效率有很大提高。CSAA解耦了color/depth buffer和coverage buffer,用较少的color/depth空间存储原来高采样数才能得到的质量。从表1中可以看出3种反走样技术在效率与空间占用上差别。CSAA在空间存储上占用最少,采用较低的采样倍数能达到较好的效果,本文提供的渲染框架即是利用CSAA反走样技术提高并改善场景的效果。

表1 3种硬件反走样对比 Tab. 1 Three kinds of hardware Anti-aliasing

常用的CSAA采样模式如表2所示,底层接口提供了如表2颜色与覆盖采样的说明。CSAA即为将边缘多边形里需要取样的子像素坐标覆盖掉,把原像素坐标强制安置在硬件和驱动程序预先算好的坐标中,如同取样标准统一的MSAA,能够最高效率执行边缘取样,效能提升显著。例如:16倍CSAA取样性能下降幅度仅比4倍MSAA略高一点,处理效果几乎和8倍MSAA一样;8倍CSAA有着4倍MSAA的处理效果,性能消耗却和2倍MSAA相同[15]

表2 CSAA采样模式 Tab. 2 CSAA mode

2 架构设计

传统的前向渲染在处理多光源时基本需要一个与光源数量及待绘制物体数量密切相关的复杂计算量,导致效率低下[17]。延迟着色即将这种与光源相关的计算转到屏幕空间,最大程度地减少计算浪费。延迟着色与显卡硬件已集成的反走样存在矛盾,因为延迟渲染已改变了硬件反走样计算的渲染流程。针对如飞行仿真等模拟场景,对反走样的要求较高。因此,整体渲染架构以延迟着色技术为主,结合硬件反走样技术CSAA及一些后处理技术以增强渲染效果。

2.1 整体渲染架构

飞行视景系统主要以全球地景及场景特效的真实感渲染为目标。大场景渲染中,为达到真实仿真的效果必须满足庞大的地形实时调度和复杂模型的渲染,这对渲染负载能力提出较高的要求。

对于地形,其顶点间隔较大,在视景运动过程中变化也不剧烈,且在实际着色过程中只需要用到颜色、法线和距离分量,因此在渲染架构设计时可将其单独作为低负载部分。

视景中对于高精度模型的渲染,模型顶点的变化较为剧烈,特别是顶点非常密集的场景细节部分,需要进行最高规格的反走样处理。同时,高精度模型不仅需要颜色、法线和距离通道,同时还需要光照贴图和阴影贴图通道。因此,在渲染架构设计时将高精度模型作为高负载部分。

通过实验发现,对于低负载组件,往往配置4倍CSAA,即可大幅度消除走样、闪烁等问题。对于高负载部分,必须在原有的3个通道的基础上额外增加光照和阴影通道,同时设置16倍CSAA或32倍CSAA。受到当今显卡管线设计的限制,在对多个MRT进行输出时不能对不同的通道设置不同的抗锯齿等级,因此,对于带有5个输出的MRT通道,32倍的显卡设置无疑给显卡增加了较大的压力。对于地形顶点而言,高精度的模型只占所有顶点中很小的一部分,而这些顶点还将在送入管线之前接受视锥体裁剪、最小像素投影裁剪及遮挡裁剪的测试。通常在飞行模拟情况下,系统承受来自多通道超采样上的压力属正常范围。故可针对不同渲染组件开启不同等级的反走样效果。

由于延迟光照需对模型进行2次渲染,本架构引擎使用基于延迟着色的设计,并基于此结合延迟光照的特点进行适当改进,该整体渲染架构设计见图3

图3 整体渲染架构设计 Fig. 3 Whole render structure design

2.2 延迟着色结合CSAA反走样

渲染架构设计的G-Buffer如表3所示。

表3 本渲染架构设计G-Buffer Tab. 3 G-Buffer of rendering architecture

表3中,R8、G8、B8、A8为纹理单元各通道,且G-Buffer内已经没有深度通道,直接使用R32F格式的缓冲区或纹理保存深度。这需要做一个线性变化,将非线性的深度转到R32F的纹理上,如式(3)所示:

$\left\{ \begin{aligned}& q = \frac{f}{{f - n}}\text{,}\\& {d_{{\rm{linear}}}} = \frac{{nq}}{{q - {d_{{\text{non-linear}}}}}}\end{aligned} \right.$ (3)

式中,f为远平面,n为近平面。因为一些应用需要保存极远的3维位置信息,而往往32位浮点数的信息才能满足精度和宽度需求,这样需要占用128位的缓冲区域。对于需要多通道输出对齐的图形管线而言,带来了巨大的显存带宽消耗。在实际应用中,仅需存取线性化的深度,即可通过视口投影矩阵的参数反算出该像素点在3维空间中的实际位置,见式(4)。同时,线性化的深度有助于消除因为距离过远而带来的Z-Fighting(同一像素点上的深度斗争)问题。通过线性化,消除冗余,同时提高深度的精度。

$\left\{ \begin{aligned}& d' = d + \left( {d - \frac{{f + n}}{{f - n}}} \right)\text{,}\\& (x,y) = 2({f_x},{f_y})/({w_x},{w_y}) - 1\text{,}\\& {\mathit{\boldsymbol{p}}} = {\mathit{\boldsymbol{PMI}}} \cdot (x,y,d',1)\end{aligned} \right.$ (4)

式中,(fxfy)为面片的位置,(wxwy)为窗口宽和高,PMI为投影矩阵的逆矩阵。此外,G-Buffer中RT1中只用前2个分量保存归一化后法线的前2个分量nxny,因为在绘制物体时只需绘制面向视点的面片,所以能够确定法线第3分量的自由度,从而还原法向量信息,如式(5)所示:

$z = \sqrt {1 - ({n_x},{n_y})({n_x},{n_y})} $ (5)

MRT下的延时着色技术与CSAA抗锯齿技术在本质上并不相互兼容,因为作为预渲染的产物—一个标准G-Buffer所有分量体现的是经过图形管线栅格化后的片元信息,并不具备任何的几何边缘信息,而CSAA期望得到的结果刚好相反。如果对G-Buffer增加超采样,受限于当今主流的渲染管线约束,并将所有的渲染目标进行反走样处理,这造成的结果往往是对于人眼十分敏感的颜色通道RT0、光照缓冲RT3及阴影缓冲RT4可以得到正确的结果;但对于并不保存实际颜色而在后处理中进行数值合成的其他通道(如距离缓冲RT2和法线缓冲RT1),超采样后边缘的信息往往是错误的。对缓存应用CSAA技术以后,在边缘像素上,保存了不止一个图元的信息,这对于可见的颜色来说是理所当然的,但对于数值信息明显不正确。

在基于实时仿真的训练中,区别于一般的游戏设计(其对反走样和远处闪烁往往要求较低),有必要采取一些方法减轻或消除这两种技术带来的矛盾。目前业界常规的处理方式是:不在栅格化过程中进行反走样处理,而是将其留到片元处理阶段。后处理的一些反走样方法,其效率和效果因较为均衡而获得广泛的支持。但针对具体的仿真应用而言,其只在静态画面上提供优异的反走样效果,在动态表达上缺乏连续性。归根结底,后处理技术在数据输入前已缺失图元的几何信息,其在帧与帧之间的连续性上表现并不理想,尤其是在原始图元较小,距离视点较远的区域上更为明显。最终用户所观察到的结果则是:非常平滑的帧画面,但是对于精细的部件和远处的物体,会有剧烈的闪烁或像素的跳动。这对于飞行仿真系统训练而言,显然十分不利。

通过以上分析,在栅格化阶段十分有必要进行反走样处理,但附带的产物是保存数值数据的缓冲区同样被超采样而得到错误的边界信息。例如使用像素上保存的距离信息进行光线跟踪从而计算在球面模型上的暴风云,边缘上的像素同时保存了天和山脉的距离,并在硬件抗锯齿阶段被均化,错误的边缘信息会计算出完全不正确的结果,从而导致山脉边界有一条奇怪的白边(图4)。这显然对一些基于例如距离计算的后处理特效是非常明显的错误,获得这样错误结果的具体显卡操作流程可以参考图5的描述。对此本文提出下面的解决办法和渲染设计以避免此类问题的发生。

图4 山脉边缘白边 Fig. 4 White edge on hill

为在开启CSAA后得到正确的G-Buffer以供延时着色引擎处理,需要获取G-Buffer中几何体正确的边界信息。假定一个绘制遍中送入管线的若干图元为一个图元组,图元组中具体的图元称为子图元。

图5 开启抗锯齿效果后的显卡流水线 Fig. 5 Display card pipeline after AA

对于图元组几何边界内部的像素,几何体的绘制顺序是根据视点方向从远到近进行绘制。因此,对于RT0,并不需担心其内部的轮廓信息,因为显卡在绘制时候已经处理好了子图元之间边界像素的融合。对于基于数值的缓冲区,因为子图元几何体之间的连续性,它们之间不会发生剧烈的数值突变。同时,因为可以认为这些数值信息只是在RT0输出的颜色信息中进行下一步色彩处理,所以肉眼对此不连续性并不敏感。

对于位于图元组几何边缘上的像素,需要为其开辟一块缓冲区,以便后面延时着色进行混合。本渲染架构中,背景像素是基于屏幕空间绘制的天空颜色,前景像素是山脉、移动的物体或地面建筑的像素信息。对于轮廓上的像素信息,应该为两者间最后输出颜色边缘比重得到的最终线性混合结果。期望的轮廓信息如图6(a)所示,边界信息为图元组的公共边界部分,对于内部的子图元间的边界信息,应当考虑为不透明度为1.0的整体区域。

图6 不透明度混合蒙版缓冲实例 Fig. 6 Opacity mask blend buffer instance

以上可从式(6)的混合方程可以看出:

${C_{\rm{f}}} = {C_{\rm{s}}} \cdot {T_{\rm{m}}} + {C_{\rm{t}}} \cdot (1 - {T_{\rm{m}}})$ (6)

式中,Cf为混合结果颜色,Cs为源颜色,Tm为模板缓存的不透明度信息,Ct为目标颜色。

如果用 $\left( {{S_{\rm{r}}},{S_{\rm{g}}},{S_{\rm{b}}},{S_{\rm{a}}}} \right)$ 表示源颜色, $\left( {{T_{\rm{r}}},{T_{\rm{g}}},{T_{\rm{b}}},{T_{\rm{a}}}} \right)$ 表示目标颜色,对于一个绘制遍中,第4通道的Alpha信息不能满足期望的输出,因而不能生成图6(b)所示的蒙版缓冲。这是因为如果使用Alpha混合,对于一个目标颜色Ta为1.0的不透明区域,如果使用的源颜色Sa位于0到1之间,根据标准的混合结果,最终得到的第4通道的不透明度结果Sf为:

${S_{\! {\rm f}}} = {S_{\! \rm{a}}}{S_{\! \rm{a}}} + 1.0 (1 - {S_{\! \rm{a}}}) = 1 - {S_{\! \rm{a}}} + {S_{\! \rm{a}}}{S_{\! \rm{a}}}$ (7)

显然右式不等于1.0,如图6(a)所示,在 $\overset\frown{AB}$ 栅格化后所在的像素上,可能会出现异常的像素,从而导致在后期渲染阶段出现错误的渲染结果。因此在RT2的第3分量中开辟一块8位的区域用以保存不透明度信息,并强制其在绘制图元的时候写入1.0,即可得到正确的结果:

${S_{\! \rm{f}}} = {S_{\! \rm{b}}}{S_{\! \rm{a}}} + 1.0(1 - {S_{\! \rm{a}}}) = 1 - {S_{\! \rm{a}}} + {S_{\! \rm{b}}}{S_{\! \rm{a}}}$ (8)

Sb=1.0时,左式始终为1.0。多个子图元在开启CSAA以后投影所获得的模板缓冲如图6(b)所示,排除掉模板值为1.0和0.0的部分,最后结果进行式(6)的处理。

2.3 走样后处理

使用LOD可以实现不同层次下物体的渲染,其基本思想是使用物体的一种简化形式表达物体,这样可以使绘制的图形尽量简洁。当视点靠近物体时,用详细的细节表示;当视点远离物体时,用简化模型来表示[18]

LOD的计算为视点到物体包围盒中心的距离,LOD的切换同样是根据距离确定的,也可以根据屏幕像素大小切换。利用LOD模型构建技术的基本思想是让场景中尺寸小的、不重要的细节随视点的拉远而消失得更快,从而减少走样的产生。标记颜色分主干和附属物、尺寸系数、标记于r分量、风险系数、标记于g分量,从而根据式(9)计算透明度:

$\left\{ \begin{aligned}& e = 5.0{\rm{/}}{g^{1.8}},\\& t = \frac{{rx}}{{2d\tan \left[{\left(\text{π}/180 \right) \cdot \left( f{\rm{/}}2 \right) }\right] }}\end{aligned} \right.$ (9)

式中:g为风险系数;s为像素前端,取1.0;e为像素后端;r为尺寸系数;x为屏幕宽;d为视点到面片的距离;f为视场角。最后判断t的范围是否在[es]内,是则返回介于0和1之间的Hermite插值作为最终的透明度值。

这样对于离视点越远场景中的一些面片,逐渐透明以致于消失,平滑过渡。同时,针对一些关键区域,采用近景精细化建模、远景贴纹理方式提高精度,减少走样。

图7为LOD效果前后对比。可以看出,在一定范围内,图7(a)中没有增加类LOD效果的房子都还清晰可见,图7(b)中加了LOD后远处放大的房子区域由远到近,房屋逐渐模糊,白色建筑逐渐消失,但这不影响呈现最终图像的效果。

图7 LOD前后效果 Fig. 7 Before and after effect using LOD

有针对性地标记一些物体,进行后处理,如高斯模糊,这对场景中一些较细的线条改善明显,如图8所示。应用高斯模糊前后的对比非常明显:未用高斯模糊如图8(a)所示的标识线有明显的锯齿;应用高斯模糊后,标识线的锯齿明显改善,提升了显示效果。

图8 高斯模糊前后效果 Fig. 8 Gaussian blur contrast effect

3 实验结果与分析

本文实验数据及效果对比都是在同一配置环境下进行的。实验平台采用Intel(R)Core(TM)i3-2120 CPU @3.30 GHz处理器及NVIDIA GeForce GTX 680的2048 MB图形显卡。

为测试不同组件应开启多少倍数的CSAA反走样等级,针对低负载部分,如地形、树木及城市建筑等在同一场景(广汉机场ZUGH)不同采样倍数情况下得到如图9中菱形点组成的线;图9中还对比了高负载部分机场以方形点组成的线及地形与机场组成的全地形以三角点组成的折线图在不同采样模式下帧率。随着采样倍数的增加,图像质量越来越好,如图10所示,但帧率在不断下降。从图9还可以看出,低负载的地形在同样采样模式下帧率高于高负载的机场组件,但都随着采样倍数的增加帧率逐渐降低。同时对高负载机场和低负载地形组合场景下,在不同的采样倍数下得到图9三角点组成的折线图,当机场采样倍数为32倍时,帧率低于60 Hz,这就不能达到飞行模拟视景的要求。这主要是因为对于带有5个输出的MRT通道,32倍的采样率对显卡计算量急剧增大,耗费时间较长。

图9 不同模式下组件帧率 Fig. 9 FPS in different CSAA mode

图10 不同组件效果对比 Fig. 10 Render effect

因此,根据实验数据得到针对不同组件开启不同等级的反走样效果采样率如表4所示。针对地形及其他低负载组件开启4倍CSSA,高负载的机场部分开启16倍Q的CSSA。既达到了飞行模拟视景对渲染效率的要求,减少延迟与卡顿,又达到渲染质量的要求,从而达到性能与画质的最佳组合。

表4 不同组件开启不同等级反走样 Tab. 4 Different levels anti-aliasing for different components

飞行模拟视景是针对复杂大场景的渲染,实时性要求高,效果表现要好。表5展示了复杂度不同的3种典型民用机场场景按照表4开启不同组件的反走样等级得到的渲染帧率,在复杂度最高的ZUUU场景下帧率最低能达到62 fps。因此飞行仿真训练过程中,基本能保证实时训练的效果。

表5 不同机场最低、最高帧率 Tab. 5 Min/max FPS of different airports

同时该反走样渲染架构与SRAA算法的反走样效果做了对比,如图11所示。在跑道上,图11(a)(c)为SRAA的反走样效果,对边缘的锯齿有较好的反走样效果;图11(b)(d)为CSAA在反走样上的效果,相比SRAA,边缘的反走样效果更好。通过本文走样后处理后场景会有一定的模糊效果,这在实际飞行训练过程中能够接受。

图11 与SRAA效果对比 Fig. 11 Comparing with SRAA effects

最后,渲染架构渲染出的一些效果如图12所示。可知采用该渲染架构大大提高了大场景的反走样效果,能达到飞行仿真训练的目的,也解决了图4中边界融合等问题。

图12 渲染效果 Fig. 12 Render effect

4 结 论

鉴于传统的Forward Rendering对多光源渲染时低效率的问题,各种Deferred Rendering方法被提出并广泛使用,也是本渲染架构采用的底层技术。

本系统解决了延迟着色技术不兼容硬件反走样CSAA技术,并进一步优化模拟机视景系统的效果。对于研究过程中的问题,G-Buffer的存储开销较大,类层次细节构建技术中相关参数自适应处理问题,效率的进一步提高,还待进一步的优化改进。

参考文献
[1]
Huang Bing, Chen Junli, Wan Wanggen. Research and realization of the visual flight simulation system[J]. Computer Simulation, 2009, 26(11): 235-238. [黄炳, 陈俊丽, 万旺根. 飞行视景仿真系统研究与实现[J]. 计算机仿真, 2009, 26(11): 235-238. DOI:10.3969/j.issn.1006-9348.2009.11.059]
[2]
Oles S.Deferred shading in STALKER,9th section of GPU Gems 2[M]//Programming Techniques for High-Performance Graphics and General-Purpose Computation.Berlin:Addison-Wesley Professional,2005:143–166.
[3]
Pan Zhaohuan.Research on real-time rendering engine based on deferred shading[D].Wuhan:Wuhan University of Technology,2011. [潘兆焕.基于延迟着色技术的实时渲染引擎的研究[D].武汉:武汉理工大学,2011.]
[4]
Aths.Multisampling anti-aliasing:A closeup view[OL].2003-5-22.http://alt.3dcenter.org/artikel/multisampling_anti-aliasing/index7_e.php.
[5]
What is supersampling (antialiasing technique)[OL].2005-2-5.http://www.neoseeker.com/Hardware/faqs/kb/10,72.html.
[6]
Naty.Deferred lighting approaches[OL].2009-6-2.http://www.realtimerendering.com/blog/deferred-lighting-approaches/.
[7]
Iourcha K,Yang J C,Pomianowski A.A directionally adaptive edge anti-aliasing filter[C]//ACM Siggraph/Eurographics Conference on High PERFORMANCE Graphics 2009,New Orleans.DBLP,2009:127–133.
[8]
Reshetov A.Morphological antialiasing[C]//Conference on High PERFORMANCE Graphics.NewYork:ACM,2009:109–116.
[9]
Lottes T.FXAA[J/OL].2011-01-25.NVIDIA White Paper,http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf.
[10]
Malan H.Distance-to-Edge anti-aliasing[R].Vancouver:ACM SIGGRAPH Course Presentation,2011.
[11]
Andreev D.Anti-aliasing from a different perspective[OL].In:Proc.of the Game Developers Conf.2011.http://and.intercon.ru/releases/talks/dlaagdc2011/slides/.
[12]
Chajdas U G,Mcguire M,Luebke D.Subpixel reconstruction antialiasing for deferred shading[C]//Symposium on Interactive 3D Graphics and Games.ACM,2011:15–22.
[13]
Jorge J, Echevarria J I, Tiago S. SMAA:Enhanced subpixel morphological antialiasing[J]. Computer Graphics Forum, 2012, 31(2pt1): 355-364. DOI:10.1111/j.1467-8659.2012.03014.x
[14]
Zhong Yuchen,Wang Rui.Slope-based straight line predicting morphological antialiasing technique[J].Journal of Software,2012,23(Suppl 2):149–157. [钟宇琛,王锐.边界斜率预测的形态学反走样方法[J].软件学报,2012,23(增刊2):149–157.]
[15]
Coverage-Sampled Antialiasing.NVIDIA White Paper,2007-2-15.http://developer.download.nvidia.com/SDK/10.5/direct3d/Source/CSAATutorial/doc/CSAATutorial.pdf.
[16]
Du Wenjun, Feng Jieqing. An unified anti-aliasing method of deferred shading[J]. Journal of Computer-aided Design & Computer Graphics, 2016, 28(1): 58-67. [杜文俊, 冯结青. 面向延迟着色的统一反走样算法[J]. 计算机辅助设计与图形学学报, 2016, 28(1): 58-67.]
[17]
Zhang Zaixing, Yu Xinyao. An important virtual reality technology[J]. Robot, 1995, 17(6): 375-382. [张再兴, 余新耀. 一种重要的虚拟现实技术[J]. 机器人, 1995, 17(6): 375-382.]
[18]
Biljecki F, Ledoux H, Stoter J. An improved LOD specification for 3D building models[J]. Computers Environment & Urban Systems, 2016, 59: 25-37.