基于可控域扭曲和有序抖动降噪的高性能云层湍流渲染

2021-02-28 14:22龚昱宁张严辞陈学超
关键词:云层贝尔湍流

龚昱宁,张严辞,,陈学超,聂 宇

(1.四川大学 软件学院,成都 610207;2.四川大学 视觉合成图形图像技术国家重点学科实验室,成都 610065)

大气渲染中的云层渲染,对于可交互应用的真实感以及飞行模拟中身临其境效果都有着重要的意义。近几年,实时动态云层模拟的性能以及真实感成为了一个讨论热题。在CryTek工作室[1]对云雾进行数学建模的分析后,近几年许多厂商据此提出了他们对于体积云以及体积雾的解决方案,诸如基于点云[2-3]、天气贴图[4-7]或者顶点网格[7]的形体建模方式,体素渲染[7]或光线迈进[5-7]的渲染方式以及基于物理的体渲染光照模型[8-9]。体素渲染虽然可以提供更为准确的结果,但是其开销较大;光线迈进(raymarching)实现简单,且渲染效率与体素渲染相比较高,且对于为远景云层而言,并不需要体素渲染这样准确的结果。在Rockstar Games的云雾实现中[7],对近处雾渲染使用了体素渲染,远处云层渲染使用了光线迈进渲染。

地平线制作组[4]对湍流模拟的解决方案中,他们使用世界坐标的线性偏移,与卷曲纹理和细节纹理采样来模拟这样一种湍流效果。但这种方法的效果与细节不足够优秀。对于云层加速渲染,现有的技术有通过时空重投影降低单帧渲染分辨率、蓝噪声偏移与时空降噪[10]等,但即使应用了这些算法,云层渲染性能依旧不足够高。

针对上述问题,本文分别在建模和渲染方面做出一些改进。其中,在建模方面,为了让动态云层表现出有更加丰富细节的湍流效果,本文提出了一种通过对反Worley噪声进行域扭曲的算法,比地平线制作组提出的湍流效果,有着更真实且有更加丰富细节的效果,且这种方法可以很容易地整合进现有云层渲染算法中。在渲染提速方面,本文提出了一种使用贝尔矩阵的作为光线迈进偏移量的提高性能的算法,能有效降低达到光线迈进需要达到较好效果的迈进步数,以此提高性能。且这种添加偏移量的方法,可以很好地与蓝噪声(blue noise)、时空重投影降低单帧渲染分辨率等方法进行结合,再进一步提高渲染效率。

1 相关工作

1.1 云的渲染

为了模拟更加真实的天空,让3D程序使用者有更好的体验。对于自由度不高或没有写实性质要求的应用中往往采用简单的天空盒[11]或广告牌[12]实现。然而这种实现方式存在无法较好地表达出云层的流动效果、非真实感及走样性强烈等大量问题。除此之外,也有使用顶点网络与噪声偏移来渲染云层[13],此方法开销较小,但是无法表现出云层的动态流动效果,且每一片云都要人工放置,大幅度提升了工作量以及显存占用存储空间。

基于以上提到的几点局限性,许多研究者开始探索动态、开销小且真实的云层渲染方式。近几年,动态云层的模拟在形状建模与渲染上都有着较好发展。

形状建模是指,用一种符合真实云形状的数学建模,表征云层的密度分布情况。需要注意的是,这样一种建模必须满足可以并行,快速地查找任意一点的密度值,且有着连续而非离散的密度分布,以满足实时渲染的需求。并且使用者(如游戏制作中的美术人员)可以根据自己所想快速建模出想要的云层类型以及分布情况。现有的云层形状建 模 方 式 有 点 云[2-3]和 天 气 贴 图 建 模[5-7]2种。

点云可以很好地模拟云层因为温度以及风向的动态变化,其核心思想是把每朵云看成一个单位,然后计算这个单位根据温度、湿度、风向等参数以及每朵云之间相互影响带来的变化。也有人提出基于热力学的建模方式[2],但是这种建模方式实时更新所需开销较大,且存在每一次参数改变,GPU CPU都需要较多数据交互的问题,难以满足实时渲染可交互应用中的渲染需求。

2015年,地平线游戏制作组[4]提供的解决方案中使用了天气贴图建模的方式来建模。这种方法首先使用分布贴图与高度贴图,作为云层在不同高度与位置的密度分布情况,然后使用一张可平铺的Perlin Worley噪声纹理添加细节。虽然这样一种建模方式无法模拟温度、风向等参数的改变所产生的基于物理的变化,但可以通过噪声模拟流动效果。并且所需消耗相比点云低许多,并且美术人员可以简单的地通过绘制天气纹理得到他们需要的云层形状与分布。这种方法已经使用在许多实时渲染的可交互应用中[4-6]。

这样的模型进行渲染一般通过光线迈进来实现。光线迈进是光线追踪技术的一种变体,适用于一些特殊的情况,比如渲染有向距离场定义的物体或有体积等半透明的物体时。云层渲染即属于这样一种有体积的半透明物体。云层渲染中,根据CryTek工作室[1]提出的模型,在光线迈进的每一步都需要根据当前位置的密度,计算从视点到该位置累计光照值与累计削减度,本文通过朗伯比尔定律(Beer’s Law)来确定削减值。此外还需要计算光源发射出来的光线经过该点散射进观测方向的辐照度,本文往往通过相位函数(phase function)来确定这个比例,根据介质的不同,本文往往采取不同的相位函数模型,正如寒霜引擎技术分享[6]中所述,云的相位函数十分复杂,在实时渲染中,通常使用基于天文学[14]启发的Henyey Greenstein模型,这几年对此提出的改进,有基于经验模型的砂糖效果[15];与全局光照类似,某点折射向视点的辐照度不仅来源于光源的直接散射,同时也会受到其他部分散射到该点的光强度的影响,考虑到这些情况的复杂模型,若要求出准确的解,需要大量的计算量。因此有研究者提出了基于多次迭代的近似公式[8]。基于以上物理模型,便可以得到基于物理较为准确的渲染结果。

1.2 湍流流动的云层建模

云层的实时湍流模拟可以增加云层流动时的动态细节,给整体画面带来更强的真实感。但对其研究较少,近几年只有地平线制作组[4-5]提出了他们的解决方案。地平线游戏制作组对湍流的模拟中,首先让世界坐标随时间累计缓慢上升,模拟一种云层在向上流动的效果。之后使用卷曲纹理对世界坐标左右偏移营造出一种来回抖动的效果,再将新的世界坐标进行比例缩放,处理为纹理坐标,对一张3D细节纹理坐标进行采样,再将密度采样结果与之前纹理贴图建模过程中得到的结果进行一定运算方式的叠加,得到最终的密度。

1.3 域扭曲

域扭曲是计算机图形学中一种用来产生过程性纹理或者模型的常见技术。这种方法对一个可以过程性产生连续分布的密度空间或者几何形状的输入进行扭曲,以得到一些期望的结果,艺术家们常用这种技术做出有艺术感的噪声效果,现在也被用来做虚拟视景生成[16]。

1.4 贝尔矩阵

贝尔矩阵是一种用来有序抖动的算法,最早是在印刷刊物时被用来表示不同透明度的一种技术。图形学中现在也被用来让物体变得透明等,也有使用这种技术来做图像降噪[17]。

在一些体积光渲染[18-19]中,贝尔矩阵被用来提升光线迈进中体积光渲染的效率。云层渲染的效率和光线迈进的步数直接相关,因此如果能减少步数,便可以大幅度提高效率。受此启发,本文在云渲染中使用贝尔矩阵来减少步数,提升渲染效率,发现其效果优秀、性能提升较高。

2 本文方法

本文对云层渲染的实现中,流程上与地平线游戏制作组[4]提出的流程一致。对于更加丰富细节的湍流效果,本文在建模上进行了些许更改;对于贝尔矩阵提升效率的部分,本文在渲染部分提出了更改,并且应用了时空重投影[7,18](Temporal reprojection)。建模上,本文采用了一种基于可控域扭曲的建模方式,替代了地平线游戏制作组为模拟湍流效果而使用的卷曲噪声。

虽然地平线制作组的湍流模拟算法可以模拟出云层在流动时的湍流效果,但这样的解决方案存在不足。首先,这样的偏移方式在云层较快流动时会带来些许重复性的人造感;其次,云层发生变化的部位较小,无法让云层整体因为像现实中因湍流等发生较大的形体变化;最后,因使用了卷曲噪声与细节噪声对云体边缘进行偏移,流动方向上的边缘缺乏连续性,会突然出现或者消失一小部分云。虽然可以通过增大纹理尺寸来减少重复性人造感问题,但另外2个问题无法解决,且这样的弥补做法会占用更多的额外显存空间,且会降低缓存命中率。

然而,使用域扭曲,在参数合理情况下则可以很好规避以上问题。域扭曲这种在噪声基础上再叠加噪声的性质,可大幅度提升随机序列的长度,减少了重复性。其次,在对云层整体形状建模时,应用了域扭曲,而非像地平线制作组在整体形状建模后用噪声进行偏移,本文做法可以让不止只是边缘细节发生更改,整体云的形状也会发生变化,且变化会更加有连续性,不会有一部分云突然消失或者出现。

域扭曲使用到的布朗分形运动的叠加方式具有高度的自相似性,这也与湍流有着一定的自相似性符合。相比原方法,仅仅多了3次纹理采样,且由于利用了GPU的高速缓存以及线程挂起机制[9],性能几乎没有降低,且不需要一张额外的卷曲纹理,降低了内存消耗。本文对传统域扭曲进行了些许更改,让其变得更加可控,使得其能根据风向表现出更加符合风向流动的特点。结果上,与地平线游戏制作组相比,本文改进后的湍流模拟效果所需内存小且效果更加符合真实效果。整个流程如下:

步骤1 首先将深度缓存进行降采样以满足时空重投影的需要。并根据深度缓存,当前视点位置与预先设定的最大迈进步数计算光线迈进的步长。

步骤2 使用本文中的贝尔矩阵与蓝噪声等方式对迈进步长进行偏移。

步骤3 开始迈进,使用本文中带有湍流效果的密度模型进行采样,并在每一步上计算累计的光照值与累积的削减值。

步骤4 判断是否达到迈进终点。若未到达终点则继续迈进,若到达终点则结束迈进,继续下一步。

步骤5 将最后的结果进行时间重投影,并与场景渲染的结果进行混合。最后便得到最终的渲染结果。

2.1 基于域扭曲的云层建模

湍流是一种较为复杂的物理现象,科学家至今为止也无法准确地对湍流进行建模来预测湍流的运动轨迹。不同的噪声可以塑造出不同形状与种类的云[20],但单纯的一种噪声很难与另一种噪声简单叠加,模拟出云层流动连续的动感。若使用的噪声无法表现出云层连续的动感,则会造成很强的人造感。因此本文希望找到一种能近似表现连续流动的特殊噪声,用一种能随时间发生连续变化的特殊噪声来给云层添加细节。

根据Kolmogorov等[21]的理论,湍流在统计上不同比例下有自相似性。布朗分形运动噪声[22]作为一种常被用来模拟自然场景的噪声,由于其构成上是由同一个噪声的不同频率进行叠加,因此在统计上不同比例下也有较强的自相似性。但仅仅使用布朗分形运动来模拟云层的湍流,无法模拟云层局部连续的动态。这是由于布朗分形运动的叠加过程是多个噪声进行叠加,这样一种求和计算方式无法加入一个时间维度,让噪声发生像观测到的湍流一样发生局部的连续变化。而域扭曲可以让经过其变化的信号在一个新维度上发生连续的变化,这符合本算法的需求。

云层渲染建模需要使用Worley噪声与Perlin Worley噪声等2种噪声。本文分别对2种噪声进行布朗分形运动叠加后再进行域扭曲,结果如图1与图2所示(为了方便观察,在亮度上进行了非线性缩放)。本文将得到结果与使用染料在流体中观测到湍流进了对比[23],如图3所示。

图1 域扭曲反Worley噪声效果图

图2 域扭曲Perlin Worley噪声效果图

图3 通过染料在流体中观测到湍流效果图

本文发现使用了布朗分形运动的反Worley噪声(图1)进行域扭曲的结果,与在空气中观察到的湍流的形体具有相似性,都有旋涡且保持旋转,局部发生着持续变化,而部分与部分之间的关系发生的变化不大,且反Worley噪声在建模中担任了添加细节的作用,让渲染出的云有着“西蓝花”状,因此在实现上对其随着时间变化的幅度限制较低。

Perlin Worley噪声得到结果也与观察结果有部分相似性,但其整体的变化过大,并且Perlin Worley在云层模型建模中担任着表达云朵与云朵间位置的骨架作用,经过域扭曲的变化会让云朵有随机摇摆的效果而显得不真实。但为了让云的整体形态随着时间有一定的变化,在算法实现上使用了一定参数,控制其变化范围。

一维布朗分形运动的域扭曲的通用公式为:

布朗分形运动的域扭曲是一个反复迭代的过程,上面通用公式中offsetn表示第n次迭代时的偏移值,an表示第n次迭代时频率发生的变化。多维布朗分形运动的域扭曲可以由这个公式进行拓展,在每次迭代的时候用上一次的结果(多维),将这个多维结果用不同布朗分形噪声(或者一个布朗分形噪声针对每一维进行一些偏移)进行采样,产生多维结果,再将这个结果传入下一次迭代。最后若要获取一个标量,便可以由最后一次结果对一个布朗分形噪声进行采样以获取单个标量的结果。

受此启发,本文对地平线游戏制作组[4]中的建模进行了更改。

原算法为:首先用经过的时间乘以一个期望的变化频率,再乘以向上方向单位向量,再加到采样点的世界坐标位置上,以此来进行一定的偏移;其次,根据得到的坐标对Worley Perlin噪声、反Worley噪声与形状建模贴图进行采样,再使用了一种特定的方式对2个噪声的采样结果进行叠加。之后再使用卷曲噪声对世界坐标进行进一步的偏移,再用这个坐标对一个细节Worley噪声进行采样;最后将这个结果与之前的结果用一种特定的方式进行叠加。

本文的改变是:首先去掉了向上偏移,因为将世界坐标向上偏移的目的是通过让描绘云层细节的噪声向上浮动来模拟云层内部的动态变化,这种近似方法十分不准确,会带来较强的人造感效果。且若保留,会将这种人造感效果带到本文算法的实现中,会降低本算法的渲染质量。并且本文的算法已让云层有较为丰富的动态,不再需要这样一种简易处理方式来增加云层的动态。本文对原算法的改进如下:

算法1 基于域扭曲的可控湍流建模。

输入:当前点的世界坐标WorldPos

根据风向计算风向的单位向量WindDir

湍流振幅TurbulenceScale

湍流抖动的范围DisplacementScale

抖动频率Frequency

云层上下流动幅度UpandDownScale

控制整体形变大小的Displacement

FormSize

输出:当前点的密度采样结果ResultDensity

//计算域扭曲所需偏移量

三维用来存储湍流迭代信息的向量q;

q.x=SampleFBMofWorley(WorldPos+Wind Dir.x Frequency) WindDir.x;

q.y=SampleFBMofWorley(WorldPos+Upand DownScale Frequency) UpandDownScale;

q.z=SampleFBMofWorley(WorldPos+Wind Dir.z Frequency) WindDir.z;

//根据域扭曲对纹理噪声进行采样

DMWResult=SampleFBMofWorley(WorldPos+q TurbulenceScale);

DMPWResult=SampleFBMofPerlinWorley(World Pos+q TurbulenceScale);

OriWResult=SampleFBMofWorley(WorldPos+q TurbulenceScale);

OriPWResult=SampleFBMofPerlinWorley(WorldPos+q TurbulenceScale);

//对域扭曲表现出来的幅度加以控制

FinWResult=lerp(OriWResult,DMWResult,Dis placementScale);

FinPWResult=lerp(OriPWResult,DMPWResult,DisplacementFormSize)

//进行混合

ResultDensity=RemapClamped(FinWResult,-0.3f FinPWResult,1.0,0.0,1.0)。

第1部分,为了实现较为可控的域扭曲,本文对每个分量进行域扭曲计算时,用风向WindDir以及用户指定的上下流动幅度UpandDownScale、振幅TurbulenceScale、频率Frequency进行了限制。这些参数除了设定成标量以外,也可以像天气纹理一样由纹理获得,以得到更加精致的结果。通过这样的设置,本文可以得到更加可控的域扭曲结果,会对后面产生的动态效果带来极为重要的影响。最后得到了本文经过域扭曲后的纹理坐标(WorldPos+q TurScale)。

第2部分,本文对没有经过域扭曲与经过域扭曲的反Worley噪声、Perlin Worley噪声分别进行了采样。

第3部分,本文对2次反Worley噪声的采样结果(DMWyResult,OriWResult)进行混合,用一个参数DisplacementScale来控制从原结果到域扭曲的结果的变化比例,从另外一个角度限制域扭曲,确保了结果的准确。同样的操作,也对Perlin Worley噪声采样时使用(DMPWResult,OriPWRe sult),用DisplacementFormSize控制扭曲比例。

第4部分,本文应用了地平线游戏制作组[4]将2种噪声进行叠加的方式,获得了最后的结果

ResultDensity。

本文去掉了对卷曲噪声取样这一步,但保留了使用细节纹理,为最后云层整体添加细节。

通过多个参数的控制,本文对域扭曲这种随机过程进行了控制,使得最终结果更加可控。

2.2 基于贝尔矩阵的性能优化

云层渲染由光线迈进实现。近几年来有许多方法来提高效率,一定程度缓解了云层渲染需要的光线迈进所带来的较大开销。本文提出的贝尔矩阵的性能优化,可以进一步通过减少迈进步数,并且可以与近几年提出的蓝噪声[7]以及重投影等方式相互结合,进一步提升效率。

贝尔矩阵的公式为:

贝尔矩阵是一个迭代的过程,M2n代表第n次迭代得到的2n2n大小的矩阵,对于高阶的矩阵(n>2),每一个矩阵都可以由这个公式迭代得到。

在云层渲染中,由于相近像素点之间的密度存在一定的相似性,为了利用领域的相似性,若使用高斯模糊等方式进行卷积的操作,会大大降低细节的丰富度。光线迈进从起点开始,向前连续迈进相同的单位步长进行采样,若起点向前偏移一定的单位步长(0~1之间)再进行采样,将多次采样的结果进行取均值,便可以得到更加贴近准确的值,这样的方式可以类比于用蒙特卡洛算法,但是需要大量的计算量,时空重投影中就是采用了这样一个特性,并利用低差异序列以及蓝噪声进行偏移,将多次的结果累计,进而得到更加精确的值。

基于贝尔矩阵的优化受到上面两者的启发,通过把整体渲染纹理分为多个4×4的部分(本文使用了4×4的贝尔矩阵),在光线迈进的起点,用该点对应这个4×4矩阵所在位置的值与单位步长的乘积作为起点向前的偏移量,再进行光线迈进。因为相近的迈进结果会有相似的结果,通过贝尔矩阵这样一种视觉欺骗方式,通过周围的结果累计了自己不同初始偏移量的近似值。并且不会像高斯模糊一样产生过于模糊或产生出现“一层一层”的结果。

本文使用的4×4贝尔矩阵如下:

作为结果,即使较少的采样数情况,也可以得到很好地效果。

3 实验效果

3.1 实验环境

本次实验使用了3 840 2 160的渲染分辨率与GTX2080的显卡。为了很好地整合进现有的渲染管线,本文在Unity3D(2019.2.15f1)上进行了实验。

3.2 域扭曲实验效果

为表现该论文湍流效果的先进性,本节将具有本文实现带有湍流效果的云与2015年地平线游戏制作组技术分享[4]中提到的带有湍流效果的云进行了对比。其中域扭曲组是本文实现的算法。而原实现组是地平线制作组在技术分享上提到的算法,其核心是用一张卷曲噪声贴图对世界坐标进行偏移来模拟流动的效果。本文分别从云层上方以及下方进行了对比,并采用了1帧/s方式记录云的变化,然后用序列帧的方式拼接在下方。为方便观察,在本部分修改了光照渲染的系数,使得云层的边缘更易于观察。从上方观测时,域扭曲组和原实现组的效果图分别图4和图5所示。

图4 从上方观测时域扭曲组效果图

图5 从上方观测时原实现组效果图

整体上,按照本文方法,渲染出的云具有更丰富的扭动细节,并且运动模式像湍流一样有着自相似性,云层整体也发生些许形态变化。而对比组的动态幅度较低,在近处观测时会出现明显的人造感。

从上方观测云时,本文使用域扭曲组进行了位置的固定,以更加方便观察。而原来的实现,因算法的需求要在流动时才能产生湍流效果,因此随着时间变化,存在着向屏幕方向的流动。通过对比,域扭曲组对云层整体形状以及周围细节皆存在着持续性的变化,而原方法只在云层边缘发生着些许的扰动,形状变化相对于本文的实现较为生硬。从下方观测时,域扭曲组和原实现组的效果图分别图6和图7所示。

图6 从下方观测时域扭曲组效果图

图7 从下方观测时原实现组效果图

在从下方观测云层底部时,可以发现带有湍流建模组云层内部以及整体发生着些许的形状变化,并且在云层边缘有着更加丰富的上下流动效果,给云层流动带了更加丰富的细节与真实感。而原实现组只有处于外侧的云发生了形态上的变化,云层整体发生变化较小,整体的动态相对于本文的实现较为生硬。

3.3 贝尔矩阵实验效果

为表现本文使用贝尔矩阵对效率提升的先进性,本文与SIGGRAPH2019 Rockstar Games[7]技术分享中提出的蓝噪声的加速渲染效率进行了对比。

本文在应用时空重投影与降低分辨率渲染的基础上,将“不应用蓝噪声与贝尔矩阵”、“只用蓝噪声[7](即对比论文中的算法)”、“与用贝尔矩阵与蓝噪声(本文实现算法)”这三者在不同迈进数下得到的结果进行了对比。迈进数是指,将从视点发射的射线跟云层相交最高处与最低处的2个交点所连成的线段分为多少份来进行采样。越高的迈进数意味着采样间距越小,得到的结果也更为准确。

雨云由于密度相比于层云更高,因此在迈进累计上更容易出现因为光照衰减值达到阈值而使得算法提前结束,这样的情况会让算法整体运行更快。为表达本算法在多种情况下都有其先进性,本部分别在雨云与层云情况下,对不同迈进步数得到的结果进行对比与分析。

在层云情况下,实验结果如图8~10所示。每一组中,从左到右、从上到下,依次为迈进数8,16,24,32,48,64。

图8 层云下不应用蓝噪声与贝尔矩阵效果图

图9 层云下只应用蓝噪声效果图

图10 层云下应用蓝噪声与贝尔矩阵效果图

图11 为不使用蓝噪声与贝尔矩阵,使用128步迈进数时达到的收敛效果,以其效果作为对照组,对照组中用红色标出来的部分为每一组实验组中截取的部分。表1为各个组在不同步数下渲染每一帧所需的时间。

图11 层云下对照组效果图

表1 层云下不同算法在层云渲染所需时间 ms

其中,第1组在48步及其以上时不再出现“分层”问题与细节缺失问题,64步及其以上时才不会存在画面抖动现象。第2组在32步及其以上时不存在“分层”问题与细节缺失问题,48步及其以上时不再存在画面抖动问题。第3组即使在8步时也不存在“分层”问题,但8步时存在细节丢失问题,第16步及其以上不再存在抖动与细节丢失问题。由此可见,第1组需要达到跟对照组近似的效果需要的渲染步数是64步,每一帧需要17.0 ms的渲染时间。作为对比算法的第2组,达到近似的效果需要48步,即每一帧需要13.6 ms的渲染时间。本文算法的第3组达到近似效果需要16步,即每帧需要7.0 ms的渲染时间。本文算法相比第一组性能提升了58.8%,相比第二组的对比实验提升了48.5%。

在积云情况下,实验结果如图12~14所示。每组中,与步数对应的关系与前文一致。图15为渲染效果的对照组。对照组中用红色标出来的部分为每组实验组中截取的部分。表2为各个组在不同步数下渲染每帧所需的时间。

图12 积云下不应用蓝噪声与贝尔矩阵效果图

图13 积云下只应用蓝噪声效果图

图14 积云下应用蓝噪声与贝尔矩阵效果图

图15 积云下对照组效果图

表2 积云下不同算法在层云渲染所需时间 ms

其中,第一组在64步及其以上时不再出现“分层”问题,64步及其以上时才不会存在画面抖动与细节确实现象。第2组在48步及其以上时不存在“分层”问题与细节缺失问题,64步及其以上时不再存在画面抖动问题。第3组即使在8步时也不存在“分层”问题,第16步及其以上也不再存在抖动问题,但16步时存在细节缺失的问题,24步及其以上时不再存在细节缺失的问题。由此可见,第1组需要达到跟对照组近似的效果,需要的渲染步数是64步,每帧需要11.8 ms的渲染时间。作为对比算法的第2组达到近似的效果需要64步,即每帧需要11.8 ms的渲染时间。本文算法的第3组达到近似的效果需要24步,即每帧需要6.5 ms的渲染时间。相比于第1组与第2组,本文算法性能上提升了44.9%。

在迈进数较低时,虽然本文算法渲染每一帧所消费时间偏多一些,但是能带来更好的效果。总体上,本文算法能用较低迈进数得到另外两组需用较高迈进数才能得到的效果。相对于Rock star Games[7]中提出的方法,本文算法有着45%左右性能的提升。

4 结论

提出了使用域扭曲对云层进行建模,给流动云层带来了更多的湍流细节。且将贝尔矩阵应用到了云层渲染上,对光线迈进的起始点进行偏移,大幅度减少了达到较好效果所需的迈进数。实验表明,本文算法给动态云层带来更加丰富的湍流效果,让云层的动态更加真实与丰富。同时,提升了云层渲染的性能。后续将考虑把这种建模方法应用在雾以及体积光上,给这2种体渲染带来更加丰富的细节。

猜你喜欢
云层贝尔湍流
“湍流结构研究”专栏简介
贝尔和他的朋友
On English Grammar Teaching in Senior School
普贝尔省长的发明
乌云为什么是黑色的
重气瞬时泄漏扩散的湍流模型验证
穿透云层的月亮
乘坐飞机
湍流十章
弱分层湍流输运特性的统计分析