基于WebGL的实景三维模型流式渲染方法和系统与流程

摘要: 本申请涉及三维模型渲染,尤其涉及一种基于webgl的实景三维模型流式渲染方法和系统。背景技术:1、实景三维模型能够以具有空间位置和表面纹理的三维数据表达城市建筑...
基于WebGL的实景三维模型流式渲染方法和系统与流程

本申请涉及三维模型渲染,尤其涉及一种基于webgl的实景三维模型流式渲染方法和系统。

背景技术:

1、实景三维模型能够以具有空间位置和表面纹理的三维数据表达城市建筑、地形地貌、工程设施及自然环境,已应用于自然资源管理、城市规划、工程巡检、灾害分析和数字孪生等场景。由于实景三维模型覆盖范围大、模型数据量多,浏览器通常利用webgl进行图形渲染,并将模型组织成具有不同层级的瓦片,在相机视野变化时通过网络逐步加载相应瓦片,从而在不一次性载入全部模型数据的情况下显示三维场景。

2、现有技术中,中国专利公开号cn118193878a公开了一种数字露头实景三维模型快速加载方法、装置、设备及产品。该方法获取分别采用3dtiles格式的顶层模型文件结构和原始模型文件结构,先加载顶层瓦片,再加载位于客户端视野范围内的原始瓦片,并在监听到各原始瓦片完成加载的事件后卸载顶层瓦片,以在原始模型加载期间利用顶层瓦片显示实景三维模型。

3、上述方法以视野范围内各原始瓦片完成加载的事件作为顶层瓦片整体卸载的依据。然而,大范围实景三维模型中的不同瓦片通常不能同时完成加载,在部分瓦片已经能够显示、其余瓦片仍处于加载过程时,继续整体保留上层模型可能覆盖已经加载的模型或场景中的其他可见表面,而提前整体卸载上层模型又可能使尚未加载区域缺少可显示内容,因而难以依据当前画面中各位置的实际遮挡关系控制上层模型的显示。因此,现有技术中存在实景三维模型分层流式加载期间容易出现错误遮挡的技术问题。

技术实现思路

1、本申请要解决的技术问题是:由于细分瓦片未完整加载时,上一级瓦片仍可能覆盖其后方已经加载的空间表面,导致实景三维模型分层流式加载期间出现错误遮挡的问题。

2、为解决上述技术问题,本申请提供一种基于webgl的实景三维模型流式渲染方法,包括以下步骤:

3、获取具有层级细分关系的第一瓦片和第二瓦片以及未加载的第二瓦片的包围体,第二瓦片由第一瓦片细分得到;分别取得第一瓦片与已加载的第二瓦片在当前帧写入深度的像素,将仅由第一瓦片写入深度的像素确定为差异区域;停止第一瓦片在差异区域写入深度,取得其余已加载瓦片写入的深度,未取得深度的像素恢复第一瓦片写入深度,取得深度的像素依据视图投影矩阵反投影为空间点;确定相机位置至空间点的视线段,并判断未加载的第二瓦片的包围体是否与视线段相交;若相交,恢复第一瓦片在差异区域内写入深度,并请求相交的第二瓦片;若不相交,则在空间点经连续帧确认对应于同一空间表面时维持第一瓦片停止写入深度并请求覆盖空间点的瓦片,在未通过确认时恢复第一瓦片写入深度;返回的第二瓦片在差异区域的对应像素写入深度时,停止第一瓦片在对应像素写入深度,并使所述第二瓦片与其余已加载瓦片执行深度测试;返回的第二瓦片未在差异区域的对应像素写入深度且覆盖空间点的返回瓦片在连续帧中写入与空间点对应的深度时,维持第一瓦片在对应像素停止写入深度;输出webgl渲染帧。

4、可选地,根据各连续帧的视图投影矩阵,将空间点分别投影至对应帧;取得各对应帧中写入投影所得像素的模型实例标识、瓦片标识和模型面片标识;当所述三项标识分别与产生该空间点的深度所对应的三项标识相同时,确定空间点在连续帧中对应于同一空间表面。

5、可选地,当请求返回的第二瓦片在差异区域内的对应像素写入深度时,停止第一瓦片在对应像素写入深度,并使第二瓦片与其余已加载瓦片执行深度测试;当请求返回的第二瓦片未在差异区域内的对应像素写入深度,且覆盖空间点的返回瓦片在连续帧中由同一模型面片向空间点投影所得像素写入深度时,维持第一瓦片停止在对应像素写入深度。

6、可选地,第一瓦片对应瓦片层级中的一个节点,至少两个第二瓦片对应由该节点细分形成的下一级节点,并共同覆盖第一瓦片表示的空间范围。

7、可选地,将第一瓦片和已加载的第二瓦片分别渲染至两个深度纹理,并将仅在第一瓦片对应的深度纹理中写入深度的像素确定为差异区域。

8、可选地,包围体包含与其对应的第二瓦片的全部模型顶点,当视线段上存在位于包围体内的点时,确定包围体与视线段相交;当至少两个包围体与视线段相交时,按照各包围体沿视线段自相机位置至空间点的出现顺序请求对应的第二瓦片。

9、可选地,在每一当前帧开始时将模板缓冲清除为0,将差异区域以及已加载的第二瓦片写入深度的像素写入模板缓冲,并在请求返回瓦片写入深度后更新对应像素的模板值,使第一瓦片在通过模板测试的像素处写入深度。将具有深度分量和模板分量的同一深度模板图像设置为webgl帧缓冲对象的深度模板附件,以模板分量形成模板缓冲,以深度分量形成记录当前帧深度的深度缓冲,并通过模板测试保留或者舍弃第一瓦片的片段。

10、本申请还提供一种基于webgl的实景三维模型流式渲染系统,包括获取模块、确定模块、投影模块、判断模块、控制模块和更新模块。获取模块用于取得瓦片层级关系、瓦片加载状态和包围体;确定模块用于确定差异区域;投影模块用于取得第一瓦片停止写入深度后的深度结果并反投影为空间点;判断模块用于判断包围体与视线段是否相交,并根据连续帧中写入投影像素的模型实例标识、瓦片标识和模型面片标识确定空间点是否对应同一空间表面;控制模块用于控制第一瓦片写入深度,在确认失败时恢复写入,并在满足请求条件时发出瓦片请求;更新模块用于把返回结果映射至当前帧对应像素,根据返回瓦片在该像素的深度写入结果和连续帧确认结果更新第一瓦片的深度写入状态并输出webgl渲染帧。

11、与现有技术相比,本申请先利用第一瓦片和已加载第二瓦片的深度写入差异确定需要判断的像素,再暂时停止第一瓦片写入深度,使其后方已经加载的空间表面能够提供深度和空间位置。由相机至该空间位置的视线段与未加载第二瓦片包围体的相交结果,可以判断该视线路径是否仍可能存在尚未加载的细分内容,从而在该内容可能存在时继续利用第一瓦片维持显示,在该内容不存在且后方表面经连续帧确认时停止第一瓦片造成的遮挡。

12、请求的瓦片返回后,本申请依据返回瓦片在对应像素的实际深度写入结果,以及覆盖空间点的返回瓦片在连续帧中的写入结果更新第一瓦片的对应像素,使先前的控制结果得到实际模型数据验证。因此,本申请能够减少细分瓦片未完整加载期间第一瓦片对已加载空间表面的错误遮挡,并避免在视线路径仍可能存在未加载细分内容时过早移除第一瓦片。

1.一种基于webgl的实景三维模型流式渲染方法,其特征在于,包括:

2.根据权利要求1所述的基于webgl的实景三维模型流式渲染方法,其特征在于,确定所述空间点在连续帧中对应于同一空间表面,包括:

3.根据权利要求2所述的基于webgl的实景三维模型流式渲染方法,其特征在于,更新所述第一瓦片在对应像素的深度写入状态,包括:

4.根据权利要求1所述的基于webgl的实景三维模型流式渲染方法,其特征在于,所述第一瓦片对应瓦片层级中的一个节点,至少两个所述第二瓦片对应由所述节点细分形成的下一级节点,并共同覆盖所述第一瓦片表示的空间范围。

5.根据权利要求1所述的基于webgl的实景三维模型流式渲染方法,其特征在于,将所述第一瓦片和已加载的第二瓦片分别渲染至两个深度纹理,并将仅在所述第一瓦片对应的深度纹理中写入深度的像素确定为所述差异区域。

6.根据权利要求1所述的基于webgl的实景三维模型流式渲染方法,其特征在于,所述包围体包含与其对应的第二瓦片的全部模型顶点,当所述视线段上存在位于所述包围体内的点时,确定所述包围体与所述视线段相交。

7.根据权利要求6所述的基于webgl的实景三维模型流式渲染方法,其特征在于,当至少两个所述包围体与所述视线段相交时,按照各包围体沿所述视线段自相机位置至所述空间点的出现顺序请求对应的第二瓦片。

8.根据权利要求3所述的基于webgl的实景三维模型流式渲染方法,其特征在于,将所述差异区域写入模板缓冲,并在请求返回瓦片写入深度后更新对应像素的模板值,使所述第一瓦片在通过模板测试的像素处写入深度。

9.根据权利要求8所述的基于webgl的实景三维模型流式渲染方法,其特征在于,将具有深度分量和模板分量的同一深度模板图像设置为webgl帧缓冲对象的深度模板附件,所述模板分量形成所述模板缓冲,所述深度分量形成记录当前帧深度的深度缓冲,并通过模板测试保留或者舍弃所述第一瓦片在所述差异区域内的片段。

10.一种基于webgl的实景三维模型流式渲染系统,其特征在于,包括获取模块、确定模块、投影模块、判断模块、控制模块和更新模块;