一种生成式超大规模森林景观的轻量级实时渲染方法

文档序号:37117511发布日期:2024-02-22 21:17阅读:21来源:国知局
一种生成式超大规模森林景观的轻量级实时渲染方法

本发明是一种生成式超大规模森林景观的轻量级实时渲染方法,属于大规模景观实时渲染等。


背景技术:

1、web3d实时渲染技术是一项面向web端、应用在浏览器中的实时渲染技术,随着web浏览器的性能和网络带宽的提升,web3d实时渲染技术受到越来越多的关注,基于webgl的开发工具和框架也得到进一步的完善和发展。github中的开源引擎three.js基于javascript,可直接在浏览器运行gpu驱动,并具有丰富的文档和成熟的社区。babylon.js基于typescript,能够在浏览器绘制3d场景的同时,拥有一套先进的调试工具来提升开发效率。然而,目前的主流引擎提供的渲染方法并不能很好地支持大规模场景的在线实时渲染,多数情况仅能保证在渲染单个或几个模型时拥有较高的帧率和分辨率。

2、在数字孪生时代,如何提升面向web端的大规模景观实时渲染效果成为发展web3d在线可视化应用的关键问题,现阶段web3d大规模景观实时渲染主要存在以下问题:

3、(1)模型制作成本高,团队需要在前期花费大量时间进行采样与建模;

4、(2)单个模型包含的数据量多、体量大,造成网络传输时延长、场景规模小的问题;

5、(3)场景中包含的顶点数与三角面数过多,实时渲染帧率低,缺乏光影效果,造成卡顿、沉浸感不足等较差的用户体验,现在急需一种生成式超大规模森林景观的轻量级实时渲染方法来解决上述问题。


技术实现思路

1、针对现有技术存在的不足,本发明目的是提供一种生成式超大规模森林景观的轻量级实时渲染方法,首先通过参数化树木骨架构建算法与基于树木骨架的模型构建算法在线自动生成轻量级参数化细粒度树木模型,接着通过粗粒度一致性树木十字面片在线生成得到粗粒度树木十字面片,然后,经过生成随机化地形与树木坐标点、基于八叉树的树木坐标点视锥剔除、根据视点距离分层实例化树木模型、添加光照与级联阴影四个步骤,实现轻量级实时渲染超大规模森林景观的效果,以解决上述背景技术中提出的问题。

2、为了实现上述目的,本发明是通过如下的技术方案来实现:本发明提供一种生成式超大规模森林景观的轻量级实时渲染方法,包括以下步骤:

3、s1,轻量级参数化细粒度树木模型在线生成;

4、s2,粗粒度一致性树木十字面片在线生成;

5、s3,面向多层次细节树木模型的分层实例化渲染;

6、s4,通过计算树木保留度进行三状态转换的缓存管理;

7、s5,添加利用webgpu的光照与级联阴影效果。

8、进一步地,所述步骤s1中,具体包括:

9、s1.1,轻量级传输树木特征对象:通过观察与学习真实世界中的树木,将树木的枝干与树叶特征抽象为一组参数化数据,这样的一组参数构成该种树木对应的树木特征对象(tree feature),树木特征对象包含的参数从含义上可分为骨架参数与网格参数,骨架参数用于规定树木骨架的姿态,网格参数用于规定枝干网格与树叶网格的形状;

10、整合多种树木对应的树木特征对象,形成树木特征对象库(tree featuredatabase),并部署在云端,当客户端想要获取一个树木特征时,只需向树木特征对象库请求一个包含树种的字符串,当树木特征对象库返回相应的树木特征对象时,只需传输一个轻量级的tree feature字符串,因为一个tree feature字符串体量很小,所以上述请求所需的响应时间很短,达到了轻量化与低时延网络数据传输;

11、s1.2,基于树木特征对象在线构建树木骨架:读取tree feature包含的骨架参数,通过参数化树木骨架构建算法(parametric tree skeleton construction algorithm,ptsca)在线构建树木骨架(tree skeleton);

12、ptsca本质上是一个递归函数,此函数接受四个输入数据:当前枝干起始位置(cur_start)、终止位置(cur_end)、上级树木骨架(superior_tree_skeleton)与当前深度(cur_depth),得到的输出数据是一个tree skeleton,tree skeleton是一个具有分形特征的数据结构,既包含骨架关键点,又包含它下一级的tree skeleton,ptsca函数在每次递归时都执行以下步骤:

13、(1)判断当前深度是否超过最大递归深度,若是则结束,若否则继续执行步骤(2);

14、(2)根据tree feature中的start、end、disturb、gravity生成当前层级的骨架关键点,接着利用这些骨架关键点创建当前树木骨架(cur_tree_skeleton),并把它作为superior_tree_skeleton的下级骨架;

15、(3)根据tree feature获得下级枝干总个数,并将其赋值给整数n,循环执行n次如下操作:根据当前层级骨架关键点生成的catmullrom曲线,获得下级枝干的起始位置(next_start)和终止位置(next_end),令cur_depth自增1,将next_start、next_end、cur_tree_skeleton与cur_depth作为ptsca函数的新一轮输入,递归执行ptsca函数;

16、(4)循环结束,同时本次递归结束;

17、s1.3,基于树木骨架在线构建细粒度树木模型:逐层读取tree skeleton的每级枝干骨架关键点,通过基于树木骨架的模型构建算法(model construction algorithmbased on tree skeleton,mcabts)在线构建细粒度树木模型;

18、mcabts接受两个输入数据:当前树木骨架(cur_tree_skeleton)与当前深度(cur_depth),得到的输出数据是完整的树木模型,mcabts同样是一个递归函数,在每次递归时都执行以下步骤:

19、(1)判断当前深度是否超过最大递归深度,若是则结束,若否则继续执行步骤(2);

20、(2)根据cur_tree_skeleton中包含的骨架关键点生成catmullrom曲线,沿此曲线生成当前层级的枝干柱体。如果当前枝干为末梢枝干,则附加树叶网格与材质;

21、(3)遍历cur_tree_skeleton的每个下级骨架(next_tree_skeleton),将next_tree_skeleton与cur_depth自增1之后的值作为mcabts的新一轮输入,递归执行mcabts函数;

22、(4)本次递归结束。

23、进一步地,所述步骤s2中,具体包括:

24、s2.1,将细粒度树木模型渲染为渲染目标(render target):将细粒度树木模型放置在世界坐标系的原点处,根据树木模型的大小自适应地计算相机的位置和朝向,分别从正面和侧面渲染细粒度树木模型到render target中;

25、s2.2,将render target存储为材质贴图并附加到十字面片:分别读取正面和侧面的render target,将其存储为较低分辨率(如256*256像素)的正方形材质贴图。接着,生成一个大小为单位1的十字面片几何体,根据树木模型obb包围盒的大小将十字面片几何体放缩成与其大小相同的一致性树木十字面片。最后,在一致性树木十字面片上附加上述材质贴图,得到粗粒度一致性树木十字面片。

26、进一步地,所述步骤s3中,具体包括:

27、s3.1,基于柏林噪声的起伏地形生成与非重随机化树木坐标点生成:首先初始化一个包含网格点众多的地形平面,接着由柏林噪声生成一系列连续变化的随机数,将这些随机数作为地形平面网格点的高度,得到随机高度起伏的地形网格。树木坐标点在地形网格点中随机均匀选取,为了避免重复选取同一个地形网格点,在地形网格的顶点数组中添加一个是否被选取过的标识(布尔型变量),对于每次随机生成的顶点数组索引,检查索引对应的标识是否已被置为true,若是,则重新随机生成一个顶点数组索引,再次进行检查,直到索引对应的标识为false为止,若否,则成功生成了一个非重树木坐标点,并将该索引对应的标识修改为true;

28、s3.2,基于八叉树索引结构的实例化树木视锥剔除:首先对所有树木坐标点建立八叉树索引结构,八叉树的划分方法采用经典的八等分空间划分方式,八叉树的每个结点可容纳10个树木坐标点,如仍有新树木坐标点加入进来,则八等分该结点。接着,将相机视锥体的六个平面向外扩展得到扩展视锥体(expanded frustum),之所以不直接使用相机视锥体,是因为基于相机视锥体的视锥剔除会面临两个问题;

29、第一,视线范围内局部树木未渲染,即对于一些本应在视线范围内的树木,由于其坐标点在视锥体之外,因此并未被渲染到屏幕上;

30、第二,转动视角导致“边缘空白”,即转动视角时,屏幕边缘的树木没有及时地渲染好,用户将短暂地看到边缘缺失了树木;

31、为了解决上述两个问题,将相机视锥体的六个平面向外扩展得到扩展视锥体。由相机的透视投影矩阵生成的视锥体由六个平面组成,每个平面使用hessian normal form(也称hesse normal form)定义。hessian normal form通过平面法线n和平面到原点的距离p定义一个三维空间中的平面。p的符号决定原点在平面的哪一侧,如果p为正数,则原点在平面法线方向的半空间中,否则原点在另一个半空间中。hessian normal form的向量定义式为:

32、r·n-p=0

33、其中r为原点到平面上的任意点的向量,n为平面法线(单位向量),p为原点到平面的距离。由相机生成的视锥体所包含的六个平面的法线均朝视锥体内部。根据此特性,要使视锥体的范围在六个方向上同时扩大,只需使每个平面的p值加上一个正的扩大量;

34、扩展视锥体预计算了“前后左右上下”六个方向将看到的树木,既有效包含了局部位于相机视锥体内的树木,解决了视锥体内树木未渲染问题,又预渲染了转动视角后将要看到的树木,解决了转动视角导致的“边缘空白”问题;

35、s3.3,根据视点距离分层实例化:首先对于此帧位于视锥体内的树木坐标点,计算各自的视点距离并分类到不同距离区间。接着,整合每个区间树木坐标点对应树木的变换矩阵(包括位移、旋转、大小变换矩阵),得到用于实例化的变换矩阵数组,然后,将用于实例化的变换矩阵数组匹配到各个粒度的模型,最后,对各个粒度的模型分别进行实例化渲染,这种渲染方式从视点看来,不同粒度的模型一层一层地由近及远分布,故而得名分层实例化渲染。将此帧的画面渲染到屏幕之后,通过计算树木保留度进行三状态转换的缓存管理(具体见s4),对下一帧循环执行上述步骤。

36、进一步地,所述步骤s4中,具体包括:

37、s4.1,计算视点周围的树木保留度:圈定以视点为圆心,最远可视距离为半径的圆形区域,对所有在此区域内的树木进行保留度计算。设某棵树木的视点距离为dtree,相机的最近与最远可视距离分别为dmin和dmax,定义树木的归一化视点距离d:

38、

39、定义树木的被遮挡系数o:

40、

41、则定义树木保留度r:

42、r=1-d×o

43、由上述定义可知,且r的值越大,树木保留度越高。r与d,o的关系如下表所示:

44、

45、s4.2,根据树木保留度与可见性进行三状态转换:为了有秩序地管理缓存,对每个实例化对象定义三种状态:“当前可见”、“潜在可见”、“被清理”,“当前可见”状态表示实例化对象位于视锥体以内,需要渲染到屏幕上;“潜在可见”状态表示实例化对象虽然位于视锥体之外,但其当前保留度较高,在未来有可能被看到;“被清理”状态表示实例化对象对应的缓存空间被释放掉,缓存中已经没有它的空间;

46、图6上方部分展示了这三种状态的转化图,其中“潜在可见”状态与“被清理”状态的相互转换涉及保留度高低的判断,衡量保留度高低的方法是:定义一个保留度阈值t,当前保留度高于t,则认为较高,否则认为较低,t的值视具体情况而定。同理,衡量是否长期保留度较低的方法也是定义一个时间阈值,将低保留度的持续时间与该阈值比较即可;

47、在缓存中,所有同一状态的实例化对象对应的缓存块用链式结构组织在一起,若位于状态a链表中的缓存块a3需要转换到状态b,则前一个缓存块a2的后续指针将跳过a3,直接指向a4,同时状态b链表的最后一个缓存块b6的后续指针指向a3,上述过程实现了把缓存块a3从状态a链表挪动到状态b链表的目的。特殊地,当状态b为“被清理”状态时,状态b链表实际上是一大块空闲的缓存空间,此时把其他状态的缓存块挪动到状态b(“被清理”状态),实质上是直接释放掉这段缓存块空间。

48、进一步地,所述步骤s5中,具体包括:

49、s5.1,添加环境光与方向光:环境光用于在各个角度照亮场景中的树木,方向光用于模拟真实世界中的太阳光;

50、s5.2,添加利用webgpu的级联阴影:级联阴影通过计算阴影贴图到相机视点的距离来动态调整阴影贴图的分辨率,物体距视点越近,投射的阴影分辨率越高。依赖webgpu提供的更高效的并行计算,对超大规模森林场景添加级联阴影,树木、枝叶、地面均可投射与接受阴影效果,达到更逼真的实时渲染画面。

51、本发明的有益效果:本发明的一种生成式超大规模森林景观的轻量级实时渲染方法,本发明主要包含三大特点:一、森林景观中的树木模型与分布位置均是通过随机化参数自动生成的,无需用户建模与编辑;二、实现了对于超大规模树木模型的轻量级网络传输、在线解析、实时渲染、缓存管理的一体化流程;三、森林规模庞大,可在web端实时渲染出百万级别树木所构成的森林景观。本发明着眼于面向web3d的超大规模景观的实时渲染技术瓶颈,能够对影视、游戏以及web3d可视化智慧应用的发展提供推动力。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1