CN113327314A - 一种基于层次的覆盖全空域的云表示与实时绘制方法 - Google Patents
一种基于层次的覆盖全空域的云表示与实时绘制方法 Download PDFInfo
- Publication number
- CN113327314A CN113327314A CN202110226262.XA CN202110226262A CN113327314A CN 113327314 A CN113327314 A CN 113327314A CN 202110226262 A CN202110226262 A CN 202110226262A CN 113327314 A CN113327314 A CN 113327314A
- Authority
- CN
- China
- Prior art keywords
- cloud
- algorithm
- particle
- particles
- lod0
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 81
- 239000002245 particle Substances 0.000 claims abstract description 264
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 123
- 238000009877 rendering Methods 0.000 claims abstract description 57
- 238000012163 sequencing technique Methods 0.000 claims description 23
- 230000007704 transition Effects 0.000 claims description 11
- 238000005286 illumination Methods 0.000 claims description 9
- 230000003287 optical effect Effects 0.000 claims description 8
- 230000006835 compression Effects 0.000 claims description 7
- 238000007906 compression Methods 0.000 claims description 7
- 239000011159 matrix material Substances 0.000 claims description 7
- 238000012545 processing Methods 0.000 claims description 5
- 230000006872 improvement Effects 0.000 claims description 3
- 239000010410 layer Substances 0.000 description 36
- 238000005457 optimization Methods 0.000 description 21
- 239000012634 fragment Substances 0.000 description 16
- 230000000007 visual effect Effects 0.000 description 14
- 238000005520 cutting process Methods 0.000 description 13
- 238000004364 calculation method Methods 0.000 description 10
- 230000000694 effects Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 238000004088 simulation Methods 0.000 description 8
- 239000000872 buffer Substances 0.000 description 7
- 238000009826 distribution Methods 0.000 description 7
- 239000003595 mist Substances 0.000 description 7
- 230000009466 transformation Effects 0.000 description 7
- 238000002360 preparation method Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 230000001186 cumulative effect Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000008520 organization Effects 0.000 description 4
- 238000005070 sampling Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000003247 decreasing effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000002156 mixing Methods 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 102000007299 Amphiregulin Human genes 0.000 description 2
- 108010033760 Amphiregulin Proteins 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004040 coloring Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000002356 single layer Substances 0.000 description 2
- 101000832077 Xenopus laevis Dapper 1-A Proteins 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000002238 attenuated effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 239000011362 coarse particle Substances 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- -1 floor maps Substances 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000011478 gradient descent method Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000000877 morphologic effect Effects 0.000 description 1
- 230000004660 morphological change Effects 0.000 description 1
- 230000008092 positive effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 102000055501 telomere Human genes 0.000 description 1
- 108091035539 telomere Proteins 0.000 description 1
- 210000003411 telomere Anatomy 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
- G06T13/20—3D [Three Dimensional] animation
- G06T13/60—3D [Three Dimensional] animation of natural phenomena, e.g. rain, snow, water or plants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/20—Perspective computation
- G06T15/205—Image-based rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/04—Indexing scheme for image data processing or generation, in general involving 3D image data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Computing Systems (AREA)
- Geometry (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种基于层次的覆盖全空域的云表示与实时绘制方法,其特征在于,根据云层的不同距离分别设置一对应的层次细节表示和绘制方法;其中,采用LoD0~LoD3算法分别用于绘制第一级~第四级距离范围内的云层;其中:LoD0算法为传统绘制方法;LoD1算法为:给定粒子半径R和数量m,计算LoD0粒子集合的坐标轴对齐包围盒;在包围盒中随机生成多个新的半径为R的粒子,如果新粒子与LoD0粒子集合中粒子的重合体积小于设定值h,或该新粒子与其他新粒子重合体积大于设定值H,则丢弃该新粒子;调整设定值h、H,最终留下m个新粒子;LoD2算法为改进的粒子云实时渲染算法;LoD3算法为带有噪声的雾化绘制方法。
Description
技术领域
本发明属于计算机图形图像技术、虚拟现实技术、软件技术领域,涉及一种基于层次的覆盖全空域的云表示与实时绘制方法。
背景技术
云是一种特定高度范围内由大气中的微小液滴聚集引起的天气现象,它的光学性质与周围大气的差异使其呈现出独特的光照特点。有关云的渲染工作已经形成从理论到方法都较为完整的体系,但在自由视点、超大场景的飞行模拟视景系统等应用中,大规模云的实时渲染依然面临挑战,传统方法的主要问题体现在大量的计算资源消耗破坏飞行视景的高帧率,其覆盖空间范围受限容易造成视域边界的瑕疵,云与其他如雨、雪等气象条件的相互作用缺少融合,难以获得运行流畅、自然的、逼真的天空气象一体化模拟效果。大规模云现象模拟既要求云有足够好的渲染结果,又要求它具有足够广的覆盖范围。这对粒子云基本方法的运行效率是较大的挑战。在飞行视景实时仿真系统中,根据现存各类飞行器的巡航高度,用户的视点可能分布在约0至40千米的海拔高度范围之内。将地球视作半径为6378千米(赤道半径)的标准球体,则计算得可视范围最远达到715.4千米。若以粒子云模型中每256平方千米平均约1000个云粒子、透视投影视角水平方向约90°估算,单帧需要绘制的云粒子数量将达到1.57×106个。与此同时,实时绘制系统的刷新率要求达到60赫兹,即每帧时间约16.67 毫秒,考虑到其余计算模块的时间需求,最终能供云模块使用的计算时间约为2-6毫秒。在如此短的时间内处理并渲染如此多的云粒子是非常难以达成的目标。
粒子云的模型是一个粒子信息的数组,原粒子云算法的数据组织具有层级关系,如图1,云层包含云块,云块包含云粒子。云块是实例化的云模型,拥有对应模型所有粒子的副本。
计算并渲染粒子云的步骤如图2所示,分为准备阶段与绘制阶段。本发明使用的系统每帧依次调用各模块的准备阶段函数以及绘制阶段函数。以下说明各步骤:
1.收集云粒子:准备阶段,CPU主线程从视点所在位置的临近云块中收集以视点为圆心、一定裁剪半径之内的云粒子,更新它们到视点的距离,并放入待排序粒子数组;
2.排序云粒子:CPU主线程使用标准库的快速排序方法将粒子数组根据到视点距离排序;
3.发送数据:CPU主线程调用图形库函数接口将云和光照有关的参数、贴图及排好序的粒子数组发送至图形驱动,由驱动传输数据至硬件;
4.发送绘制指令、执行绘制指令:绘制阶段,CPU主线程调用图形库函数接口发出绘制指令至图形指令队列,硬件执行到此指令时调取数据并绘制;
5.粒子转换为公告板:在图形硬件的几何着色器中,根据各粒子位置、朝向与公告板长宽生成四边形,进行部分光照计算后将图元发送至下一流水线阶段;
6.片元着色:在片元着色器中,执行纹理映射与部分光照计算后将片元发送至下一流水线阶段。
这些步骤每帧依次发生,最终使得内存中存储的云粒子被整理、传输到图形硬件,并被有序地绘制到屏幕上。
原粒子云算法的主要问题在于裁剪半径阈值的选取。当阈值较小时,绘制效率较高,但可以观察到明显的云现象边界;当阈值较大时,云现象边界有一定扩充,但效率很快下降。针对地球的球形形状,以及大约6300千米的半径,本发明首先选用了72千米、144千米、 216千米、288千米共四个裁剪半径以切合在云层上方时所观察到的视域范围,以及淡积云、浓积云两种云的类型,视点位于海拔20千米处进行测试实验。
实验结果表明CPU端粒子收集与排序占用的时间较多,且当裁剪半径达到144千米时, CPU部分的计算时间要求(约为2-6ms)就难以满足。另外,在计算能力较弱的图形设备上测试粒子云原始算法,其结果表明GPU绘制部分也有超时风险。
层次细节(Level of Detail,LoD)是一种绘制系统中的策略。其主要思想是,离相机近的物体采用具有更多细节、精度更高的三维模型渲染,而离相机较远的物体采用更粗糙、精度更低的模型渲染;在采取合适的判断方法和过渡策略后,使得远处模型渲染结果与近处更精细模型的渲染结果基本一致。这一方法利用了图形渲染中同一物体位于远处时占画面的比例较小、数量较大、清晰程度较低的特点。通常来说,渲染粗糙模型的计算消耗更低,因此经过精心设计的层次细节方法能够在绘制大量出现的物体时维持缓慢增加的计算负担。
层次细节策略多见于对表面网格模型的渲染,从模型的几何简化到绘制的方法都已有许多文献加以论述。然而,这些文献的适用条件与本发明不一致,这是因为本发明所使用的元球模型不同于表面网格模型,渲染目标也是光在云这一介质中的散射效果而非物体的表面。虽然也有一些类似的探索云的层次细节技术的研究工作(唐凯,康凤举,褚彦军.Vega中云的仿真方法[J].系统仿真学报,2005(09):2051-2053+2069;李胜,徐泽骅,汪国平.一种飞行视景仿真中高效的粒子云层绘制方法,201610962466.9.),但是这些工作并无法实现漫天无边界的云层的绘制的效果。
发明内容
针对现有技术中存在的技术问题,本发明的目的在于针对宏观的地球表面的天候的模拟,提供一种基于层次的覆盖全空域的云表示与实时绘制方法。本发明设计了基于层次的覆盖全空域的云表示方法,通过设计并应用各层次模型的预生成和数据组织算法、相应的过渡策略和绘制效率实时优化方法,既保证了大量云粒子渲染的真实感,又具有很高的效率。
本发明的技术方案为:
一种基于层次的覆盖全空域的云表示与实时绘制方法,其特征在于,根据空中云层距离视点的不同远近分别设置一对应的层次细节表示和绘制方法,绘制云层并对绘制结果进行平滑过渡处理,组合渲染满天空的云层;其中,采用LoD0算法绘制第一级距离范围内的云层、采用LoD1算法绘制第二级距离范围内的云层、采用LoD2算法绘制第三级距离范围内的云层、采用LoD3算法绘制第四级距离范围内的云层;第一级距离范围的距离<第二级距离范围的距离<第三级距离范围的距离<第四级距离范围的距离;其中:
1)LoD0算法为传统的粒子云绘制方法;
2)LoD1算法为:
2-1)给定期望生成的粒子半径R和数量m,计算LoD0粒子集合的坐标轴对齐包围盒;
其中LoD0粒子集合为LoD0算法所得的粒子集合;
2-2)在包围盒中随机生成多个新的半径为R的粒子,其数量是m的数倍;
2-3)如果生成的新粒子与LoD0粒子集合中粒子的重合体积小于设定值h,或该新粒子与其他新粒子重合体积大于设定值H,则丢弃该新粒子;
2-4)调整设定值h、H,重复步骤2-3),最终留下m个新粒子;
3)LoD2算法为对粒子云实时渲染算法进行改进的算法,其中改进之处包括:a)不计算云粒子上的光照,将云粒子的累积光学厚度写入贴图;b)投影方式选用平行投影而非透视投影;
4)LoD3算法为带有噪声的雾化绘制方法。
进一步的,对于LoD0算法、LoD1算法和LoD2算法,在GPU端进行绘制粒子前先对粒子排序,然后按照从远到近的顺序绘制;其中GPU端对粒子排序的方法为:
21)设定GPU并行计算单元大小为W,W为2的幂次;将构成云的粒子的数据构造为W×H 大小的矩阵,其中H≤W;
22)若两粒子的序号之差不超过W,则采用双调排序算法进行比对排序;当两粒子的序号差大于W时,则先将矩阵转置后再采用双调排序算法进行比对排序。
进一步的,对于LoD0算法、LoD1算法和LoD2算法,优先在GPU端进行绘制粒子前先对粒子排序,同时支持CPU快速排序算法;然后按照从远到近的顺序绘制;其中CPU快速排序算法为:在云模块中保存多帧收集到的粒子数组信息,当前帧使用上一帧的排序结果,并将当前帧的排序结果在下一帧再发送到图形硬件绘制;如果预期排序的时间消耗不超过一帧,则在当前帧将需要排序的粒子转交给排序线程,下一帧取回排好序的粒子并使用图形接口发送;若预期排序消耗超过一帧,则开启多个排序线程,绘制时取回多帧前排好序的粒子数据。
进一步的,LoD0算法对应的第一级距离范围为72km以内,LoD1算法对应的第二级距离范围为72km至288km,LoD2算法对应的第三级距离范围为288km至512km,LoD3算法对应的第四级距离范围为512km以外。
进一步的,对云厚度的控制方法为:设云块中的云粒子自身的半径为R、云层下边界的海拔高度为HB、云层上边界的海拔高度为HT,云层目标下边界的海拔高度为HB′、云层目标上边界的海拔高度为HT′;如果HT-HB与HT′-HB′都大于2R,则使用r作为云粒子高度缩放比例,将各云粒子中心的海拔高度HC缩放为HC′=r·(HC-HB-R)+HB′+R;当HT-HB或 HT′-HB′小于或等于2R时,则以先使用r0作为比例,将各云粒子中心的海拔高度HC缩放为 HC′=r0·(HC-HB-R)+HB′+R;然后以s作为水平方向压缩比例,压缩云粒子;若 HT-HB≤2R且HT′-HB′>2R,则先将云粒子竖直方向的边长恢复为2R,再将HC′变换为HC;当HT-HB≤2R,HT′-HB′≤2R时,r=1;其中,r0→0。
进一步的,渲染满天空的云层时,设置云层的覆盖率为云层中的空缺部分与云层整体面积的比。
进一步的,使用一张分形灰度噪声图作为云粒子绘制掩码,当调整覆盖率时,若云粒子中心P在该分形灰度噪声图上采样得到的值小于设定值c则绘制此云粒子,否则丢弃此云粒子;其中该分形灰度噪声图中像素灰度值小于任一覆盖率c的部分的面积等于其总面积的c 倍。
与现有技术相比,本发明的积极效果为:
为了解决以上出现的云绘制的效率问题,我们的发明主要具有如下方面的优势。其一,是降低数据量,主要是降低远处的粒子数量;其二,提升算法效率,主要是优化排序算法等。增大裁剪半径对画面的影响越来越小,但新增的远处粒子占用的CPU及GPU计算资源与近处粒子相似,因此本发明为降低数据量所设计的具体方案中,最为重要的就是层次细节策略。
本发明在层次细节部分所做的工作,主要是在原始算法的基础上,设计并实现了一套云的层次细节工作流程,包括从云的原始模型生成层次细节模型的算法、使用有效过渡策略实时渲染多层次的云的算法以及有关云的数据组织与绘制效率的优化算法。
附图说明
图1是粒子云数据层级关系,其中(a)数据水平分布示意、(b)数据包含关系。
图2为粒子云计算步骤流程图。
图3为本发明的流程图。
图4为以水平或者接近水平的观察方向时,不同层次云的与视点距离的范围阈值。
图5为生成LoD1粒子示意图。
图6为平铺云块示意图。
图7为双调排序局部性优化示意,其中(a)行内比对(b)行间比对。
图8为视见体、云块与半空间的关系图。
图9为云厚度设置为0时的云粒子渲染示意图。
具体实施方式
下面通过具体实施例和附图,对本发明做进一步详细说明。
本发明的流程和原理图如图3所示。
1.多层次细节模型
根据实际情况,本发明设计了4个不同的层次细节表示和绘制方法,进行组合渲染满天空的云层,以适应不同距离范围内的绘制需要。即满天的云层根据距离视点的远近选择使用不同的层次细节。这四个层次细节的数据组织和绘制方法如下:
·LoD0:采用原始粒子云,使用粒子云的基本算法的数据和绘制方法(背景技术中的粒子云基本算法,即背景技术中的步骤1-6,此为基本的粒子云绘制方法);
·LoD1:粗糙粒子云,使用本发明算法生成的粒子更少的模型及粒子云绘制方法;
·LoD2:投影粒子云,使用本发明算法投影到贴图的粒子云模型及带有透明度的表面网格绘制方法;
·LoD3:薄雾效果,不使用粒子云模型,而使用带有噪声的通用的雾化绘制方法。
在本发明中,以上几个层次细节从LoD0至LoD3分别适用于72km以内、72km至288km、 288km至512km、512km以外,如图4所示进行无缝紧密连接。这些数值基本满足了前文提到的可视距离要求,也可以根据处理器性能做出相应更改(即不限于上述给定的距离数值进行不同层级的区分)。
在层次细节策略设计中,LoD1和LoD2需要使用经过处理简化的粒子云模型,本发明将介绍它们的生成方法。
层次细节模型需要考量两个方面的要点。其一,生成的模型与原始模型间的误差是否较小;其二,是否足够简化,达到减轻绘制负担的目的。
对第一点的评估主要考量生成图像的差异及用户的视觉体验。第二点则使用减小的数据量和实测时间消耗来评估。以下分别描述LoD1和LoD2的模型生成算法。
1.1 LoD1生成
LoD1即较粗糙的粒子云模型,使用比原始模型半径更大、数量更少的粒子来渲染,如何保持云的形状与原始模型的差异较小是本发明首先面对的问题。定义视觉差异:
其中A、B为云粒子集合,为投影像素平面的法向量,pi(X)为粒子集合X在像素pi上的累积光学厚度,即云粒子集合A、B在以为法向量的投影平面上的累积光学厚度差异之和。这与视景系统用户的直观体验是相符的,且不难看出,若要使视觉差异尽可能小, LoD1的云粒子集合在投影范围上需要尽可能接近LoD0的云粒子集合,因此两者在三维空间中的体积应有较多重合部分。
但是,的极值既难以通过代数或几何方法直接求出,也因难以判断其是否具有全局或局部的凹凸性,而使得随机梯度下降法不一定能求出正确的解,这使得统计学习方法的有效性存疑。因此,本发明选用了根据两者体积间关系得出的一种随机生成算法。
对一个输入的原始粒子云集合表示的云模型(即具有LoD0的层级),给定期望生成LoD1 的粒子半径R和数量m,其LoD1层级模型生成算法的过程如下:
1.先计算出LoD0粒子集合的坐标轴对齐包围盒(Axis-Aligned Bounding Box);
2.在包围盒中随机生成多个新的半径为R的粒子,其数量是m的数倍;
3.丢弃新粒子中与LoD0粒子的重合体积的绝对值较小,或与其他新粒子重合体积过大的粒子,留下m个新粒子。
如图5所示,此算法最终能保留粒子半径与数量符合要求,且与LoD0重合体积较多的 LoD1模型。经过仔细调整重合体积的合适区间,并多次运行以上算法取与LoD0重合体积最多的生成结果,最终得到的LoD1能够达到接近原有体积的目的。
通过视景系统同一视角下LoD0与LoD1的视觉效果对比,后者的目标半径是前者的两倍,而目标数量是前者的1/4。不难发现生成的LoD1在区域细节上,尤其是分布不集中的云粒子的位置视觉差异较大,这是本算法的局限性所在,且难以有效解决。进一步地,本发明认为若生成期望半径更大、期望数量更少的粒子,不仅会造成更大的视觉差异,甚至会较大幅度地改变原有云的外观,且因为云粒子变得稀疏可能影响光照计算结果的正确性,因此不选择生成更多的粒子云细节层次。事实上,采用类似策略中(Yusov,Egor."High-Performance Rendering of Realistic Cumulus Clouds Using Pre-computedLighting."In High Performance Graphics,pp.127-136.2014.),多个细节层次渲染结果的差异也体现了这一问题。
1.2 LoD2生成
本发明将LoD2设计为投影粒子云,是LoD0模型在平面上的投影。当裁剪半径进一步扩大时,即使简化的粒子云也会导致准备阶段收集的粒子数量增加,从而使得系统的绘制负担较快速地上升。然而,由于粒子云渲染需要使用不透明度混合步骤,无法利用图形处理器的遮挡剔除功能,因此光栅化步骤产生的约数倍至数十倍屏幕大小的片元都将调用等量的片元着色器,产生相当大的计算消耗。因此,本发明的LoD2选用更为简化的、投影到平面的粒子云。由于各平面间几乎无重叠区域,故产生的片元总量不会达到屏幕分辨率的复数倍。
采用模型简化方法(Décoret,Xavier,Frédo Durand,X.Sillion,andJulie Dorsey. "Billboard Clouds for Extreme Model Simplification."In ACMSIGGRAPH 2003Papers,pp. 689-696.2003.),将三维模型投影到平面的简化模型生成方法应考量不同角度上的投影效果和误差,并选取数个误差最小的投影面,以部分网格在这些面上的投影代替原模型。然而,在粒子云模型中这样的方法经实践证明并不合适,这是因为粒子云具有半透明的特点,使得离视点最近的投影不会完全遮蔽面向另一角度的投影,这会导致累积光学厚度和光照积分的求解出现错误。最终,本发明在LoD2中选择使用最大的投影面,也就是水平面(视点/相机所对应的地表的点所在的水平面)来投影粒子云。考虑到相比其他投影面,水平面更能反映LoD0 的形态特点,且其裁剪范围较大,期望的视觉误差较小,因此可以认为是一种可行的选择。
LoD2的预生成算法与背景技术中的步骤1-6中粒子云实时渲染算法基本一致,主要有两项明显区别:不计算云粒子上的光照,仅仅将云粒子的累积光学厚度写入贴图;投影方式选用平行投影而非透视投影。采用LoD0算法生成的多种LoD2贴图,分辨率为128×128像素,这一分辨率在层次细节的渲染和云阴影计算中都足够使用。
2.云层的实时渲染
云现象的规模较大时首先需要解决空间分布问题。不同于基于四叉树的云层分布策略(参考Yusov,Egor."High-Performance Rendering of Realistic Cumulus CloudsUsing Pre-computed Lighting."In High Performance Graphics,pp.127-136.2014.),本发明使用了平铺(Tiled)方式组织云的分布,如图6。
不选用四叉树策略的原因有二:首先,本发明LoD0使用预生成的模型,若使用四叉树策略,LoD1需要枚举四个LoD0云块的所有组合,这会使数据量急剧增加,得不偿失;其次,上文已说明本发明只设计两个粒子云层次的原因,故无必要使用多层四叉树。
本发明层次细节的单帧渲染遵循从远及近的绘制顺序,依次调用各层次的渲染方法。以下将简述这些方法的细节。
LoD0+LoD1粒子云渲染方法
由于使用的渲染方法相同,云层所有LoD0粒子与LoD1粒子每帧都被收集到同一粒子数组中,并按照图2的流程送入图形处理器完成渲染。这一做法也防止了因为绘制顺序问题导致的过渡区域遮挡关系错误,因为若先画LoD0,则过渡区内LoD0的云粒子会被LoD1的云粒子遮挡。
另外,在这一过程中,片元输出的深度只会用来判断场景已有的物体是否遮挡此片元,而不会向深度缓存中写入。这一方面是因为云粒子对场景在屏幕空间上的起伏情况不应有影响,否则写入深度将会使其他依赖屏幕空间深度的算法产生不正确的结果;另一方面也是由于深度精度问题容易造成两粒子间的深度测试误差,从而产生不正确的条带状现象。
LoD2平面贴图方法
准备阶段,此方法收集LoD2中距离符合阈值的云块,将每个云块的位置和投影贴图序号整理到数组中,传入图形硬件并绘制。由于LoD2是水平分布的平面贴图,几乎无互相遮挡,故无需将其排序。绘制阶段,LoD2的片元着色算法与原始粒子云一致。
LoD3薄雾方法
为了模拟极远处云散射的光经过大气衰减和散射后进入相机时的低频率变化特点,LoD3在远处绘制了一层带有低频噪声的薄雾。绘制薄雾时,使用以多面体拟合的雾面覆盖地球表面,着色时使用粒子云着色与雾的衰减相结合的方式绘制,并添加一定量的低频噪声。
LoD间的平滑过渡方法
由于各LoD的绘制都使用了不透明度混合,LoD之间的过渡也主要使用变化的透明度来达成。各LoD准备阶段,实际收集的云块范围稍微超出其指定阈值,且超出部分的粒子、平面贴图和薄雾根据其超出程度调整透明度,程度越大则透明度越高。受益于较好的模型生成算法与过渡方法,多个LoD间的过渡效果较为平滑。
3.效率优化方法
尽管层次细节策略本身带来了效率的大幅改进,仍然存在其他的方法和技巧能进一步提升整体运行效率。粒子云算法的渲染流程中,在许多步骤上都可以做出有效的优化。
3.1粒子排序优化
LOD0,LOD1和LOD2中都采用了粒子云的绘制,粒子云需要按照从远到近的顺序绘制才能生成正确的图像,这要求算法在绘制粒子前先将其排序。如果使用标准库里的快速排序算法,其期望执行效率是O(n·logn),从而使得多达数万个粒子的排序在实时系统中成为一个不小的负担。因此,本发明实现了两种排序策略,一种是GPU端的高效排序算法,另一种是CPU端的多线程错帧排序策略。
GPU高效排序
目前,已有不少利用GPU具有较强并行计算能力的特点来排序数据的算法,包括并行化的冒泡排序、基数排序、双调(Bitonic)排序等,还有一些混合排序算法。以基数排序系列算法为例,其中包含许多先进、快速的排序方法。不过,一方面本发明算法的粒子数量在不同天候下的变化范围较大,使用更灵活的数据量范围有助于提高运行效率;另一方面考虑到本发明算法按照浮点数距离排序粒子,在浮点数组上执行基数排序将会隐含对浮点数二进制表示的有序性假设,且不利于在不同场景下使用不同精度的浮点数距离,故本发明并未采用基数排序方法。
事实上,本系统设计和实现了GPU上的双调排序算法。首先,双调序列的定义是一个先单调递增、后单调递减的数字序列(也可以与此相反,先单调递减、后单调递增)。双调序列的一个重要性质是,将长度为2n的双调序列A分为等长的前后两半A′和A″,按以下规则生成 Amax和Amin序列:
Amax[i]=max{A′[i],A″[i]}=max{A[i],A[i+n]},0≤i<N
Amin[i]=min{A′[i],A″[i]}=min{A[i],A[i+n]},0≤i<n
则Amax和Amin仍是双调序列,且
Amax[i]≥Amin[j],0≤i<n,0≤j<n
如果不断执行这个划分过程,最终会划分到长度为1的子序列,把这些子序列按照AmaxAmin顺序递归合并,则会得到一个从大到小排列的序列;将子序列按AminAmax的顺序递归合并,则会得到一个从小到大排序的序列。这样,双调序列能够转变为单调序列。这一过程称为“双调合并”,其时间消耗是分治消耗与遍历消耗的乘积,复杂度是O(n·logn)。
进一步地,无序序列能转变为双调序列。对于长度为1或2的序列,它们总能满足双调序列的定义;对于更长的无序序列,它的每个长度为2的子序列都是双调序列,故每次取这一序列中相邻的两个双调序列,前一个转变为单调递增序列,后一个转变为单调递减序列,两序列合并得到新的双调序列。这一排序过程的时间消耗是分治消耗与双调合并消耗的乘积,复杂度是O(n·log2n)。
虽然双调排序的线性时间复杂度不如许多经典排序算法,由于它的比较和存储操作可以只发生在同一个相对位置上,故较为适合并行化运行。
不过,尽管双调排序算法本身较为高效,它的实际表现很大程度上取决于硬件存取粒子信息的效率。类似于CPU,GPU中也有多级缓存,因此利用数据局部性优化排序顺序能较大改善朴素的双调排序算法效率。不过,这一优化策略与硬件规格相关,主要包括GPU支持的并行计算单元数量以及L3缓存的大小,故适配不同机器时需要采用不同的参数来优化排序。
局部性优化的具体做法是:
1.设定GPU并行计算单元大小为W(W为2的幂次,须接近硬件并行计算单元数),而将构成云的粒子的数据视为W×H大小的矩阵,其中H≤W,不足的数据由缺省值补齐。由于双调排序的每次比较可以看作是发生在粒子序号中部分二进制位相同的两个粒子上,所以比对的两粒子序号之差总是2的幂次。
2.如图7(a),若两粒子的序号之差不超过W,则它们的比对发生在同一行,若以行为单位进行批处理计算,则局部性得到保证。因此,仍先比对粒子距离小于或等于W的粒子,这与朴素的双调排序算法相同。
3.如图7(b),当粒子序号差大于W时,在矩阵中它们处于同一列,这是因为序号之差大于W且为2的幂,而W也是2的幂,故序号之差与W只有质因子2且前者2的指数大于后者,故序号之差为W的倍数。因此先将矩阵转置后再做比对,就可以有效利用局部性计算比对结果了。
带有局部性优化的GPU排序效果十分明显,大幅度地降低了整体的排序的时间消耗。其缺点主要在于H≤W的限制,这使得总排序的粒子数量不能大于W2。实际应用时,由于粒子数量保持在数万个,W取值512或以上是足够使用的,否则需要进一步调整LoD范围来限制传入驱动的粒子数量。
本发明针对粒子数据还设计了另一个优化。由于粒子包含的各种数据较多,其大小可能达到80字节,不利于数据的存取和比对,而排序本身只需要粒子与相机的距离这一参数即可,因此本发明在GPU中创建了只包含了粒子距离与粒子序号的数据结构,表示对单个粒子的引用,完成排序后再根据排序结果修改粒子数组,进一步提高了计算的效率。
3.1CPU多线程排序
GPU并行计算的一大缺点是,现有GPU架构中计算和绘制指令是线性的,无法由应用指定在GPU的部分计算单元中执行并行计算、另一部分单元中执行绘制指令。事实上,GPU并行计算和绘制在时间上具有无重叠的先后关系,这意味着并行计算占用的时间一定会影响实时绘制中单帧的GPU总时间。因此,尽管本发明在GPU排序中已经做出了大量优化,使得排序效率相对较高,但实际应用中可能面临复杂的硬件环境,例如GPU由于性能问题时间紧张而CPU时间或处理器核资源充足的情况,故本发明同时支持CPU快速排序算法。
无论从时间复杂度还是实际时间消耗的角度来看,标准库的快速排序算法已经很难做出有效的优化了。不过,前文提到快速排序算法时间消耗较大,这是针对绘制系统分配给云模块的CPU时间较为紧张这一基本情况而言的。例如,若绘制系统要求60Hz的刷新频率,则分配给每一帧的单线程CPU时间约为16.6ms,分配给云模块的CPU时间可能只有2-3ms。这一时间对于快速排序多达数万粒子是不够稳妥的。但是,如果利用多线程计算的特性,使快速排序能占有一帧甚至多帧时间,则在CPU上进行的排序既不影响主线程云模块的时间,亦不影响GPU时间,是一个可行的选择。
通常来说,多线程计算需要考虑计算任务分配和同步的问题,有时同步会对整体效率造成较大影响。但是,在实时绘制系统中,本发明使用了一种被称为轮询(Round-Robin)的技巧,即在云模块中保存多帧收集到的粒子数组信息,本帧使用上一帧的排序结果,而本帧排序的结果在下一帧再发送到图形硬件绘制。只要预期排序的时间消耗不超过一帧,则应在本帧将需要排序的粒子转交给排序线程,下一帧几乎不阻塞地取回排好序的粒子并使用图形接口发送。若预期排序消耗超过一帧,则可以开启多个排序线程,绘制时取回多帧前排好序的粒子数据即可。
这一策略在CPU计算能力满足需求且具有空闲核的情况下是一种有效的优化。但是,如果CPU没有空闲的核,由于同步策略的原因此算法至少会产生额外的同步负担,故需要根据实际硬件情况选择具体的优化策略。
3.2其他优化策略
云块裁剪优化
云的粒子数据需要在CPU端遍历各云块、筛选后送入图形驱动进行绘制。如果只是简单地根据距离收集云块和粒子,必然存在完全位于相机视见体外的、实际没有被画出的图元,这对数据传输和图形流水线都是不必要的负担。根据相机视角大小,这些图元甚至在传输的数据中占据大部分空间,这是实际使用时难以接受的。因此,本发明实现了CPU端根据相机视见体裁剪云块的算法,该方法在进行云块和粒子的数据收集时采用,从而起到裁剪并得到精简的数据,从而起到优化的作用。
云块是空间中的长方体,判断云块是否与四棱台状的视见体相交,一种可行的方式是首先判断云块和视见体的各面之间的关系,如图8所示。若三维空间中有一平面,此平面将三维空间划分成两部分,这两部分称为半空间;判断长方体或四棱台是否在某个半空间内或与两个半空间都相交,只需要枚举其顶点,判断它是否在此平面一侧即可,这是由它们的几何性质决定的。三维空间中的任一平面X可以由函数表示为
Ax+By+Cz+D=0
则其划分出的两个半空间可以表示为
Ax+By+Cz+D>0
Ax+By+Cz+D<0
判断两点是否在同一半空间内,只需要将其坐标代入以上的半空间不等式,若符号相同则在同一半空间内,即平面同侧;若符号相反则在不同半空间内,即平面两侧。一个长方体或四棱台顶点完全在平面同一侧时,其体积也完全在此侧;否则它与此平面相交,两侧都有此几何体的体积。
因此,若云块在视见体某一面上与视见体完全不同侧,则排除它们相交的可能性;视见体在云块某一面上与云块完全不同侧时同理。枚举视见体和云块共12个面,每个面判断另一几何体的8个顶点是否在此面某一侧,即实现了根据相机视见体裁剪云块的算法。
实际使用时,由于云块数量较多,以上裁剪算法的计算代价仍不够小,因此首先判断视点与云块的距离、再判断其是否与视见体相交是对整体效率提升最大的策略。
图形驱动同步优化
由于CPU、GPU的计算是异步的,传输某帧数据时可能由于GPU正在使用上一帧的数据进行渲染从而产生同步等待时间,因此本发明在同步粒子数据时也使用轮询策略,云模块申请多个粒子缓存,每帧向驱动中传入当前帧已整理好的粒子,并绘制预期已传输完毕的粒子。
若粒子排序使用CPU多线程排序方法,其轮询策略与图形同步优化的轮询策略相叠加可能造成1-2帧的数据延迟。由于实时绘制系统的刷新率较高,本发明认为这种情况不会造成视觉上明显的时间误差,可以接受。
渲染分辨率调整
图形硬件渲染大规模粒子云时,由于生成的片元需要根据其透明度与所在像素执行不透明度混合步骤,故无法使用硬件遮挡剔除算法来排除大量的片元着色器调用。因此,粒子云渲染中片元着色器占用了较多GPU时间。本发明为了减少片元着色器调用,实现了以可调的渲染分辨率绘制云的方法。其他实际应用中常将分辨率设置为1/4屏幕分辨率(长宽各1/2);否则若设置分辨率过小,上采样结果将表现不佳。
本发明为云渲染创建了分辨率较小的帧缓存,渲染时首先将已绘制到主要帧缓存像素中的背景颜色传入此帧缓存(由图形硬件完成下采样),其后将云的多层次模型渲染到此帧缓存中,最后根据此帧缓存的每个像素上是否有云粒子像素这一信息与主要帧缓存的像素融合。
4、结果
通过144千米裁剪半径的原始算法与本发明算法在两种不同云类型(淡积云、浓积云) 与两种不同时间(正午、黄昏)下的运行结果对比,视点位于海拔30km处,俯角15°。
通过对比可看出,本发明算法基本满足了覆盖可视距离范围内的天空的要求,而基本绘制算法不仅不能满足要求,还具有较明显的云现象边界。这一边界会随视点移动而移动,较大地破坏了场景真实感。
关于不同裁剪半径下的算法运行效果,本发明选用了72千米、144千米、216千米、288 千米共四个裁剪半径,以及淡积云、浓积云两种云的类型,测试时视点位于海拔20千米处,云层只有一层,底部海拔3千米,厚度为2千米。各计算步骤的时间消耗如下表1所示。
表1各项测试中各步骤的平均时间消耗
两种不同类型云块的平均粒子数量分别为:淡积云695.8个,浓积云387.0个。浓积云显得更密集、所占范围更大,是由其粒子半径普遍更大所致。
表1中原始算法部分,由于浓积云平均粒子数小于淡积云,因此在CPU主线程执行的收集与排序算法消耗的时间比后者更少;但是它的粒子半径普遍更大,所占屏幕比例较多,因此粒子数较少时(72千米,144千米)绘制消耗的时间较多。当粒子数较多(216千米,288 千米)时,几何着色器的时间消耗所占绘制时间的比例增大至与片元着色器相近,故此时两种云的绘制时间相差不多。
对比表1中的本发明算法与原始算法对应项可以看出,层次细节粒子云基本上是在72千米裁剪范围的原算法上额外增加了较少的时间代价,其粒子云范围就扩展到了288千米,且可视范围大于512千米。其中,浓积云绘制时间是唯一比起原始算法时间超出较多的测试项,这是因为本发明算法在绘制浓积云时生成了较多的片元,且这一结果仍优于288千米范围的原始算法。因此,本发明改进后云层绘制算法相较原算法有了长足的提升。
关于GPU排序算法,本发明也做了对比测试。仍使用144千米裁剪半径的原始算法,单层淡积云,视点位于海拔20千米处,底部海拔3千米,厚度为2千米。结果如下表2:
表2排序时间消耗
排序方法 | 平均排序时间 |
CPU标准库快速排序 | 4.78ms(CPU) |
局部性优化的GPU双调排序 | 1.73ms(GPU) |
由表2可以看出,优化后的GPU双调排序算法运行时间较显著地优于CPU上执行的标准库快速排序算法,但差异并不夸张,GPU耗时约为CPU耗时的36.2%。由于前文提到的缺点,即排序占用的GPU时间增大了本模块在GPU上计算的总时间,从而可能使得其他模块时间更紧张,所以GPU排序的开启与否应视硬件情况而定。在GPU计算能力不足,各模块时间紧张时,若CPU排序时间尚可接受,则应使用多线程优化的CPU排序。
由表中按距离裁剪与视见体裁剪的时间对比可以看出,视见体裁剪较大幅度地减少了收集到的粒子数量,因此排序与绘制的时间消耗都明显下降。由视见体裁剪与混合裁剪的对比可以看出,视见体裁剪本身的计算消耗较大,所以一旦结合按距离裁剪的计算简单、速度快的优势,就能提升收集粒子的效率。最终使用的混合裁剪方法较大幅度地减少了收集、排序和绘制时间消耗,是有效的优化。
5.云形态的调整
在给出云层的多层次模型的生成之前,需要首先给出云的基本形态和这些形态的调整的方法和功能。
粒子云形态的本质是云粒子模型的空间分布。不同的云粒子模型可包含不同的空间分布和外观。本发明使用的视景系统中已有预先建立的云粒子模型(共399种),在调整云的类型时系统将原有的所有云块去除并重新生成。这一过程包括了重新选择模型以及重新载入云粒子。
事实上,系统中每一种云形态都对应了部分云模型组成的一个随机模型池。在云的形态变化或云块重新生成时,云的粒子模型从此模型池中取出,经过一定的随机化处理变为云块所持有的粒子数组。此后,除非云块被删除或再次设置云的形态变化,否则单个云块的粒子数据几乎不会改变。
本发明对云形态的调整方法无需重置云块,以下介绍云的厚度调整和覆盖率调整两部分。
5.1云的厚度的控制
虽然不同类型的云在现实中应当分布于不同的海拔高度,本发明仍为云厚度的任意调整做出了相应的接口。
一般来说,云层厚度应大于粒子直径,此时r为正有理数。特殊地,本发明提供了扩展的调整方法,以处理将云层厚度调整到小于粒子直径的情况,此时HT-HB与HT′-HB′都可能小于或等于2R,因此我们为r设置了下界,以防止出现除0或r为非整数的情况。
1)如果HT-HB与HT′-HB′两者都大于2R,此时使用r作为云粒子高度(厚度)的缩放比例,将各云粒子中心的海拔高度HC缩放为
HC′=r·(HC-HB-R)+HB′+R
即将粒子变换到了目标位置,且此粒子与其他粒子的海拔高度差是变换前海拔高度差的r 倍。此处按照定义HC-HB≥R。
2)当HT-HB或HT′-HB′小于或等于2R时,不能采取以上方法变换。事实上,本发明为 r预留了一个非负的最小值r0→0(即趋于0的正数),以保证云粒子间的相对位置信息在变换后被保留。以HT-HB>2R且HT′-HB′≤2R的情况为例,首先以参数r0代替r执行以上从HC到HC′的变换;接下来,由于云层厚度小于云粒子大小,本发明在这种情况下压缩了云粒子竖直方向的边长。此竖直方向并不都垂直于水平面,而是垂直于云粒子公告板与水平面相交产生的直线。其水平方向的压缩比为
考虑极端情况下即s=0的压缩效果。为了保证云粒子在云层厚度压缩至0时仍然有视觉上的连续性,此情况下每个云粒子应为水平展开的云粒子在公告板上的投影。如图9,设视线与水平面的夹角为θ,则此时云粒子公告板在竖直方向上的长度应为原长度的sinθ倍。此时,云粒子看起来像被“拍平”后分布在高度为HB′=HT′的水平面上,类似于层次细节中的LoD2 在虚拟相机上的投影。这也符合将云的厚度压缩到0时的预期。
再考虑一般情况。由于1≥s>0时云粒子在竖直方向上的压缩比sP取值范围为(sinθ,1],故本发明以s为比例线性插值两区间端点的值
sP=s·1+(1-s)·sinθ
插值方法保证了sP随s增大而单调增,故sP≥sinθ,因此也保证了粒子间的连续性,从而使实际云层画面不出现意外的空洞。
依此类推,当HT-HB≤2R且HT′-HB′>2R时,相当于执行以上调整策略的逆变换。先执行粒子边长压缩的逆变换,即将粒子竖直方向的边长恢复为2R;再执行云粒子中心高度变换的逆变换,将HC′变换为HC:
HC=r′·(HC′-HB′-R)+HB+R
当HT-HB≤2R,HT′-HB′≤2R时,r=1,只需要重新设定s的值:
这一方法最终解决了云层高度范围小于粒子直径所产生的压缩问题。
在调整云层高度时,本发明以同样的比例设置了包络椭球的高度,以使其符合所包络的云粒子分布范围。
5.2云层的覆盖率
气象学定义云的覆盖率为地面观察天穹时云所占半球面的面积比。在本发明中,覆盖率的调整与此定义稍有差别,因为这一覆盖率既不易量化,也不易调整;本发明所使用的覆盖率即云层中的空缺部分与云层整体面积的比。例如,当覆盖率为1/2时,云层在水平面上的投影应有1/2部分被云粒子覆盖,其余1/2部分无云粒子。
为了保持覆盖率调整时云本身呈现的随机性,本发明使用一张分形灰度噪声图作为云粒子绘制掩码,这张分形灰度噪声图基本保证其“像素灰度值小于任一覆盖率c的部分的面积等于其总面积的c倍”,具体描述如下。
令像素边长为1,此二维灰度图边长分别为W和H,则像素面积为1,此图面积为W×H。图中像素灰度值P[x][y]∈[0,1],0≤x<H,0≤y<W。给定[0,1]区间内任意阈值c,满足如下条件:
Count(P[x][y]<c)×1≈W×H×c
其中Count表示满足条件的像素数。此公式意为,对于任意c,灰度值小于c的所有像素的面积之和约为图像总面积的c倍。
当调整覆盖率时,若云粒子中心P在此噪声图上采样得到的值小于c则绘制此云粒子,否则丢弃此云粒子。实际表现基本符合要求。
在调整云覆盖率之后,云对天空光的遮蔽系数也作出了相应的调整。
5.3多态云的结果
云形态的多样性调整方法提供了可以近似地使用较密的云层和合适的覆盖率来产生稀疏云层的方式。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。
Claims (7)
1.一种基于层次的覆盖全空域的云表示与实时绘制方法,其特征在于,根据空中云层距离视点的不同远近分别设置一对应的层次细节表示和绘制方法,绘制云层并对绘制结果进行平滑过渡处理,组合渲染满天空的云层;其中,采用LoD0算法绘制第一级距离范围内的云层、采用LoD1算法绘制第二级距离范围内的云层、采用LoD2算法绘制第三级距离范围内的云层、采用LoD3算法绘制第四级距离范围内的云层;第一级距离范围的距离<第二级距离范围的距离<第三级距离范围的距离<第四级距离范围的距离;其中:
1)LoD0算法为传统的粒子云绘制方法;
2)LoD1算法为:
2-1)给定期望生成的粒子半径R和数量m,计算LoD0粒子集合的坐标轴对齐包围盒;
其中LoD0粒子集合为LoD0算法所得的粒子集合;
2-2)在包围盒中随机生成多个新的半径为R的粒子,其数量是m的数倍;
2-3)如果生成的新粒子与LoD0粒子集合中粒子的重合体积小于设定值h,或该新粒子与其他新粒子重合体积大于设定值H,则丢弃该新粒子;
2-4)调整设定值h、H,重复步骤2-3),最终留下m个新粒子;
3)LoD2算法为对粒子云实时渲染算法进行改进的算法,其中改进之处包括:a)不计算云粒子上的光照,将云粒子的累积光学厚度写入贴图;b)投影方式选用平行投影而非透视投影;
4)LoD3算法为带有噪声的雾化绘制方法。
2.如权利要求1所述的方法,其特征在于,对于LoD0算法、LoD1算法和LoD2算法,在GPU端进行绘制粒子前先对粒子排序,然后按照从远到近的顺序绘制;其中GPU端对粒子排序的方法为:
21)设定GPU并行计算单元大小为W,W为2的幂次;将构成云的粒子的数据构造为W×H大小的矩阵,其中H≤W;
22)若两粒子的序号之差不超过W,则采用双调排序算法进行比对排序;当两粒子的序号差大于W时,则先将矩阵转置后再采用双调排序算法进行比对排序。
3.如权利要求2所述的方法,其特征在于,对于LoD0算法、LoD1算法和LoD2算法,优先在GPU端进行绘制粒子前先对粒子排序,同时支持CPU快速排序算法;然后按照从远到近的顺序绘制;其中CPU快速排序算法为:在云模块中保存多帧收集到的粒子数组信息,当前帧使用上一帧的排序结果,并将当前帧的排序结果在下一帧再发送到图形硬件绘制;如果预期排序的时间消耗不超过一帧,则在当前帧将需要排序的粒子转交给排序线程,下一帧取回排好序的粒子并使用图形接口发送;若预期排序消耗超过一帧,则开启多个排序线程,绘制时取回多帧前排好序的粒子数据。
4.如权利要求1所述的方法,其特征在于,LoD0算法对应的第一级距离范围为72km以内,LoD1算法对应的第二级距离范围为72km至288km,LoD2算法对应的第三级距离范围为288km至512km,LoD3算法对应的第四级距离范围为512km以外。
5.如权利要求1所述的方法,其特征在于,对云厚度的控制方法为:设云块中的云粒子自身的半径为R、云层下边界的海拔高度为HB、云层上边界的海拔高度为HT,云层目标下边界的海拔高度为HB′、云层目标上边界的海拔高度为HT′;如果HT-HB与HT′-HB′都大于2R,则使用r作为云粒子高度缩放比例,将各云粒子中心的海拔高度HC缩放为HC′=r·(HC-HB-R)+HB′+R;当HT-HB或HT′-HB′小于或等于2R时,则以先使用r0作为比例,将各云粒子中心的海拔高度HC缩放为HC′=r0·(HC-HB-R)+HB′+R;然后以s作为水平方向压缩比例,压缩云粒子;若HT-HB≤2R且HT′-HB′>2R,则先将云粒子竖直方向的边长恢复为2R,再将HC′变换为HC;当HT-HB≤2R,HT′-HB′≤2R时,r=1;其中,r0→0。
6.如权利要求1所述的方法,其特征在于,渲染满天空的云层时,设置云层的覆盖率为云层中的空缺部分与云层整体面积的比。
7.如权利要求6所述的方法,其特征在于,使用一张分形灰度噪声图作为云粒子绘制掩码,当调整覆盖率时,若云粒子中心P在该分形灰度噪声图上采样得到的值小于设定值c则绘制此云粒子,否则丢弃此云粒子;其中该分形灰度噪声图中像素灰度值小于任一覆盖率c的部分的面积等于其总面积的c倍。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110226262.XA CN113327314B (zh) | 2021-03-01 | 2021-03-01 | 一种基于层次的覆盖全空域的云表示与实时绘制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110226262.XA CN113327314B (zh) | 2021-03-01 | 2021-03-01 | 一种基于层次的覆盖全空域的云表示与实时绘制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113327314A true CN113327314A (zh) | 2021-08-31 |
CN113327314B CN113327314B (zh) | 2024-02-06 |
Family
ID=77414529
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110226262.XA Active CN113327314B (zh) | 2021-03-01 | 2021-03-01 | 一种基于层次的覆盖全空域的云表示与实时绘制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113327314B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117557740A (zh) * | 2024-01-10 | 2024-02-13 | 四川见山科技有限责任公司 | 三维模型分割层级切换方法、装置、电子设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106570926A (zh) * | 2016-11-04 | 2017-04-19 | 北京大学(天津滨海)新代信息技术研究院 | 一种飞行视景仿真中高效的粒子云层绘制方法 |
-
2021
- 2021-03-01 CN CN202110226262.XA patent/CN113327314B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106570926A (zh) * | 2016-11-04 | 2017-04-19 | 北京大学(天津滨海)新代信息技术研究院 | 一种飞行视景仿真中高效的粒子云层绘制方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117557740A (zh) * | 2024-01-10 | 2024-02-13 | 四川见山科技有限责任公司 | 三维模型分割层级切换方法、装置、电子设备及存储介质 |
CN117557740B (zh) * | 2024-01-10 | 2024-04-09 | 四川见山科技有限责任公司 | 三维模型分割层级切换方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113327314B (zh) | 2024-02-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113178014B (zh) | 场景模型渲染方法、装置、电子设备和存储介质 | |
Dick et al. | GPU Ray-Casting for Scalable Terrain Rendering. | |
US8089481B2 (en) | Updating frame divisions based on ray tracing image processing system performance | |
US8243081B2 (en) | Methods and systems for partitioning a spatial index | |
CN108537869B (zh) | 一种基于级联纹理的圆锥追踪动态全局光照方法 | |
US20080122838A1 (en) | Methods and Systems for Referencing a Primitive Located in a Spatial Index and in a Scene Index | |
US9208610B2 (en) | Alternate scene representations for optimizing rendering of computer graphics | |
US20080079714A1 (en) | Workload Distribution Through Frame Division in a Ray Tracing Image Processing System | |
Dietrich et al. | Massive-model rendering techniques: a tutorial | |
Harada et al. | Forward+: A step toward film-style shading in real time | |
Gilet et al. | Point-based rendering of trees | |
CN113327314B (zh) | 一种基于层次的覆盖全空域的云表示与实时绘制方法 | |
Weyrich et al. | A hardware architecture for surface splatting | |
Boudon et al. | Survey on computer representations of trees for realistic and efficient rendering | |
CN114170394B (zh) | 一种海量倾斜数据在Web端的展示优化方法及装置 | |
Wand | Point-based multi-resolution rendering. | |
Fan et al. | A review of real-time terrain rendering techniques | |
Boulanger | Real-time realistic rendering of nature scenes with dynamic lighting | |
Gunjee et al. | Point splatting based on translucent shadow mapping and hierarchical bucket sorting | |
Aherne et al. | Adoption of Sparse 3D Textures for Voxel Cone Tracing in Real Time Global Illumination. | |
Hu et al. | Signed Distance Fields Dynamic Diffuse Global Illumination | |
Papavasiliou | Real-time grass (and other procedural objects) on terrain | |
Roettger | Volumetric methods for the real-time display of natural gaseous phenomena. | |
Mortensen et al. | Light field propagation and rendering on the GPU | |
WO2022119469A1 (en) | Device and method for multi-frustum rasterization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |