CN117095110B - 面向互联网三维地图的顺序无关透明渲染方法和系统 - Google Patents

面向互联网三维地图的顺序无关透明渲染方法和系统 Download PDF

Info

Publication number
CN117095110B
CN117095110B CN202311364592.0A CN202311364592A CN117095110B CN 117095110 B CN117095110 B CN 117095110B CN 202311364592 A CN202311364592 A CN 202311364592A CN 117095110 B CN117095110 B CN 117095110B
Authority
CN
China
Prior art keywords
rendering
semitransparent
transparency
rendered
color value
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.)
Active
Application number
CN202311364592.0A
Other languages
English (en)
Other versions
CN117095110A (zh
Inventor
王聪
王一梅
蒋如乔
夏伟
陈静
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yuance Information Technology Co ltd
Original Assignee
Yuance Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yuance Information Technology Co ltd filed Critical Yuance Information Technology Co ltd
Priority to CN202311364592.0A priority Critical patent/CN117095110B/zh
Publication of CN117095110A publication Critical patent/CN117095110A/zh
Application granted granted Critical
Publication of CN117095110B publication Critical patent/CN117095110B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • G06T15/205Image-based rendering
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Geometry (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Image Generation (AREA)

Abstract

本发明涉及三维地图渲染技术领域,公开一种面向互联网三维地图的顺序无关透明渲染方法和系统,包括:获取互联网三维地图数据并分为不透明要素和半透明要素,渲染不透明要素并记录渲染后的颜色值和深度值,颜色值包含透明度;根据不透明要素渲染后的深度值多次渲染半透明要素,计算半透明要素渲染的初始颜色值和初始透明度;结合初始颜色值、初始透明度和半透明要素渲染过程中的背景颜色值、背景透明度,计算半透明要素渲染的最终颜色值和最终透明度;输出不透明要素渲染后的结果和半透明要素渲染后的结果,得到最终的渲染画面。本发明可以降低渲染过程中的性能消耗,保证半透明要素的正确渲染,兼顾性能和渲染效果。

Description

面向互联网三维地图的顺序无关透明渲染方法和系统
技术领域
本发明涉及三维地图渲染技术领域,尤其是指一种面向互联网三维地图的顺序无关透明渲染方法和系统。
背景技术
基于可视化技术的快速发展,互联网地图由二维升级为三维。三维地图在原有二维矢量、栅格地图图层的基础上融合了地上地下、室内室外模型的展示。比如在轨道交通三维系统中,存在站点模型贯穿地表、三维建筑室内外切换、楼层切换等场景。为了更好地展示地下、室内模型,会将二维图层(地表)、建筑轮廓模型、建筑分层模型等设置为半透明。当三维场景中同时存在不透明与半透明要素,渲染流程就会变得复杂。如果采用传统渲染方法,例如按离摄像机距离将半透明要素遍历排序并进行叠加渲染,半透明要素的前后关系无法体现,即无法满足三维地图中正确显示半透明要素互相穿插、半透明要素相互包含等空间关系的要求。此外,互联网三维地图中要素覆盖范围广、数据量大,通过排序渲染半透明要素性能的开销较大,会给客户端造成巨大压力。
为了解决上述问题,出现了顺序无关的半透明渲染算法(Order IndependentTransparency,OIT)。OIT的核心思想是不对半透明要素进行远近排序,比较常见的现有技术有WBOIT(Weighted Blended OIT)和深度剥离(Depth Peeling)。WBOIT按照与深度和透明度相关的权重函数加权平均计算颜色值,虽然性能较佳,但是最终的渲染效果极大依赖权重函数的设置,需要针对每个场景进行权重函数调节;此外,渲染结果中半透明要素交叠的地方无明显界限,不能体现正确的三维空间层次。深度剥离的基本思想是利用N次渲染通道分别渲染出距离摄像机第N近的片元,最后再从远到近依次将剥离出的N个图层根据透明度混合叠加,渲染结果最接近真实世界的效果,但是使用多次渲染通道渲染场景中所有的半透明物体性能消耗大,特别是如果要实现菲涅尔反射、折射等复杂的表面效果时,性能消耗会更大,常用的计算设备无法满足性能需求,渲染成本大且会出现渲染时间长的问题。
综上所述,现有技术中不管是对半透明要素进行排序、从远及近进行颜色混合渲染,还是主流的顺序无关半透明渲染技术,都无法兼顾效果和性能。并且,在实际的互联网三维可视化项目中,受限于浏览器性能,如何更好地渲染半透明要素仍面临较大的挑战。
发明内容
为此,本发明所要解决的技术问题在于克服现有技术中的不足,提供一种面向互联网三维地图的顺序无关透明渲染方法和系统,可以降低渲染过程中的性能消耗,保证半透明要素的正确渲染,兼顾性能和渲染效果。
为解决上述技术问题,本发明提供了一种面向互联网三维地图的顺序无关透明渲染方法,包括:
获取互联网三维地图数据,将所述互联网三维地图数据分为不透明要素和半透明要素;
渲染所述不透明要素,记录不透明要素渲染后的颜色值和深度值,所述颜色值包含透明度;
根据不透明要素渲染后的深度值多次渲染所述半透明要素,结合每次渲染所述半透明要素得到的颜色值、透明度和最后一次渲染所述半透明要素时的深度值计算半透明要素渲染的初始颜色值和初始透明度;
结合所述初始颜色值、初始透明度和半透明要素渲染过程中的背景颜色值、背景透明度,计算半透明要素渲染的最终颜色值和最终透明度;
输出不透明要素渲染后的结果和半透明要素渲染后的结果,得到最终的渲染画面。
在本发明的一个实施例中,渲染所述不透明要素,记录不透明要素渲染后的颜色值和深度值,包括:
创建用于不透明要素渲染的帧缓冲对象,创建不透明要素渲染的纹理一和不透明要素渲染的纹理二并与所述不透明要素渲染的帧缓冲对象关联;
打开深度测试和深度写入,渲染当前相机视锥体内所有的不透明要素,将渲染后的颜色值记录到所述不透明要素渲染的纹理一中,将渲染后的深度值记录到所述不透明要素渲染的纹理二中。
在本发明的一个实施例中,所述渲染当前相机视锥体内所有的不透明要素时,使用距离相机近的要素数据遮盖距离远的要素数据。
在本发明的一个实施例中,所述根据不透明要素渲染后的深度值多次渲染所述半透明要素,具体为:根据不透明要素渲染后的深度值对所述半透明要素进行三次渲染;
所述结合每次渲染所述半透明要素得到的颜色值、透明度和最后一次渲染所述半透明要素时的深度值计算半透明要素渲染的初始颜色值和初始透明度,具体为:结合第一次半透明要素渲染后的透明度、第二次半透明要素渲染后的颜色值和透明度、第三次半透明要素渲染后半透明要素的对应深度最小的片元的颜色值和透明度,计算半透明要素渲染的初始颜色值和初始透明度。
在本发明的一个实施例中,所述半透明要素渲染的初始颜色值和初始透明度的计算方法为:
其中,为所述初始颜色值,/>为所述初始透明度,T是根据第二次半透明要素渲染后的颜色值得到的颜色累加值,G是根据第二次半透明要素渲染后的透明度得到的透明度累加值,/>是第三次半透明要素渲染后半透明要素的对应深度值最小的片元的透明度,/>是第三次半透明要素渲染后半透明要素的对应深度值最小的片元的颜色值,P是根据第一次半透明要素渲染后的透明度得到的取反累乘值。
在本发明的一个实施例中,所述根据第一次半透明要素渲染后的透明度得到的取反累乘值P的计算方法为:
其中,n是半透明要素的总数,是第i个半透明要素渲染到屏幕上的对应片元的透明度。
在本发明的一个实施例中,所述根据不透明要素渲染后的深度值对所述半透明要素进行三次渲染,具体为:
创建用于第一次半透明要素渲染的帧缓冲对象,创建第一次半透明要素渲染的纹理一和第一次半透明要素渲染的纹理二并与所述第一次半透明要素渲染的帧缓冲对象关联;打开深度测试并关闭深度写入,使用颜色混合的方法第一次渲染当前相机视锥体内所有的半透明要素,将第一次渲染后的半透明要素的颜色值记录到所述第一次半透明要素渲染的纹理一中,将不透明要素渲染后的深度值记录到所述第一次半透明要素渲染的纹理二中;
创建用于第二次半透明要素渲染的帧缓冲对象,创建第二次半透明要素渲染的纹理一和第二次半透明要素渲染的纹理二并与所述第二次半透明要素渲染的帧缓冲对象关联;打开深度测试并关闭深度写入,使用颜色混合的方法第二次渲染当前相机视锥体内所有的半透明要素,将第二次渲染后的半透明要素的颜色值记录到所述第二次半透明要素渲染的纹理一中,将不透明要素渲染后的深度值记录到所述第二次半透明要素渲染的纹理二中;
创建用于第三次半透明要素渲染的帧缓冲对象,创建第三次半透明要素渲染的纹理一和第三次半透明要素渲染的纹理二并与所述第三次半透明要素渲染的帧缓冲对象关联;打开深度测试和深度写入,使用目标颜色第三次渲染当前相机视锥体内所有的半透明要素,将第三次渲染后的半透明要素的对应深度值最小的片元的颜色值记录到所述第三次半透明要素渲染的纹理一中,将第三次渲染后的半透明要素的对应深度值最小的片元的深度值记录到所述第三次半透明要素渲染的纹理二中。
在本发明的一个实施例中,所述使用颜色混合的方法第一次渲染当前相机视锥体内所有的半透明要素,具体为:
第一次渲染后的半透明要素的颜色值的计算方法为:
其中,为第i个半透明要素第一次渲染后渲染到屏幕上的对应片元的颜色值,是第一次渲染时第i个半透明要素对应的源颜色值,/>是第一次渲染时目标片元的新颜色值,/>是第一次渲染时第i个半透明要素对应的乘数因子,是第一次渲染时第i个半透明要素对应的目标片元的乘数因子,是结合操作;
第一次渲染后的半透明要素的透明度的计算方法为:
其中,是第i个半透明要素第一次渲染后渲染到屏幕上的对应片元的透明度,是第一次渲染时第i个半透明要素对应的源透明度,/>是第一次渲染时第i个半透明要素对应的目标片元的新透明度。
在本发明的一个实施例中,所述半透明要素渲染的最终颜色值和最终透明度的计算方法为:
其中,为半透明要素渲染后的所述最终颜色值,/>为半透明要素渲染后的所述最终透明度,/>为所述初始颜色值,/>为所述初始透明度,/>为半透明要素渲染过程中的所述背景颜色值,/>为半透明要素渲染过程中的所述背景透明度。
本发明还公开了一种面向互联网三维地图的顺序无关透明渲染系统,包括:
数据获取模块,用于获取互联网三维地图数据,将所述互联网三维地图数据分为不透明要素和半透明要素;
不透明要素渲染模块,用于渲染所述不透明要素,记录不透明要素渲染后的颜色值和深度值,所述颜色值包含透明度;
半透明要素渲染模块,用于根据不透明要素渲染后的深度值多次渲染所述半透明要素,结合每次渲染所述半透明要素得到的颜色值、透明度和最后一次渲染所述半透明要素时的深度值计算半透明要素渲染的初始颜色值和初始透明度;结合所述初始颜色值、初始透明度和半透明要素渲染过程中的背景颜色值、背景透明度,计算半透明要素渲染的最终颜色值和最终透明度;
输出模块,用于输出不透明要素渲染后的结果和半透明要素渲染后的结果,得到最终的渲染画面。
本发明的上述技术方案相比现有技术具有以下优点:
本发明通过划分不透明要素和半透明要素,先渲染不透明要素再根据不透明要素的渲染结果对半透明要素进行多次渲染,是一种顺序无关的渲染方法,有效降低了渲染过程中的性能消耗;同时,本发明在半透明要素渲染时考虑了最近一层的渲染结果,从而保证半透明要素的正确渲染,保证了三维场景中空间层次关系的正确,实现了性能和渲染效果的兼顾。
附图说明
为了使本发明的内容更容易被清楚的理解,下面根据本发明的具体实施例并结合附图,对本发明作进一步详细的说明,其中:
图1是本发明方法的流程图。
图2是本发明实施例中使用WBOIT进行渲染的效果结果图。
图3是本发明实施例中使用Depth Peeling进行渲染的效果结果图。
图4是本发明实施例中使用本发明方法进行渲染的效果结果图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
实施例一
参照图1所示,本发明公开了一种面向互联网三维地图的顺序无关透明渲染方法,包括以下步骤:
S1:获取互联网三维地图数据,将所述互联网三维地图数据分为不透明要素和半透明要素;不透明要素组成不透明要素队列,半透明要素组成半透明要素队列。
S1-1:将获取的互联网三维地图数据添加进互联网场景中,互联网三维地图数据分可以为二维矢量数据、二维栅格数据、三维模型等不同类型的数据。本实施例中将互联网三维地图数据分为二维数据和三维数据,二维数据包括城市底图、道路线、湖泊等要素数据,三维数据包括建筑白模、树木、地铁站等要素数据。将二维数据存储为GeoJson数据格式,将三维数据存储为GLB(GL Transmission Format Binary)数据格式。
S1-2:按照数据格式的类型中的透明度数值划分不透明要素和半透明要素。当透明度为1时,将对应的数据作为不透明要素,并将其归入不透明要素队列;当透明度小于1时,将对应的数据作为半透明要素,并将其归入半透明要素队列,通过遍历将所有数据分为不透明要素和半透明要素。不透明要素队列和半透明要素队列都不进行远近排序。
S2:渲染场景中所有的所述不透明要素,记录渲染后的不透明要素中每个像素对应的颜色值和深度值,所述颜色值包含透明度。
S2-1:本发明中的渲染需要分别在三次帧缓冲区上进行,并且要与不透明要素记录的深度值进行比较,因此渲染的帧缓冲对象中的深度缓冲区需提前记录不透明要素的深度值。故首先创建用于不透明要素渲染的帧缓冲对象(FrameBuffer Object)FBO_MAINDEPTH,帧缓冲对象用来存储像素的绘制结果,包括当前绘制的颜色值、深度值等信息。
S2-2:创建不透明要素渲染的两张颜色纹理,包括不透明要素渲染的纹理一和不透明要素渲染的纹理二,将不透明要素渲染的两张颜色纹理与S2-1中的所述用于不透明要素渲染的帧缓冲对象FBO_MAINDEPTH关联,所述不透明要素渲染的纹理一作为颜色缓冲区、用于记录每个像素的颜色值,所述不透明要素渲染的纹理二作为深度缓冲区、用于记录每个像素的深度值。
S2-3:打开深度测试和深度写入,渲染当前相机视锥体内所有的不透明要素,将不透明要素渲染后的颜色值记录到S2-2创建的所述不透明要素渲染的纹理一中,将不透明要素渲染后的深度值记录到所述不透明要素渲染的纹理二中;将不透明要素渲染的结果保存在不透明要素渲染的两张颜色纹理中并与帧缓冲对象关联,实现颜色和深度的关联。渲染当前相机视锥体内所有的不透明要素时,使用距离相机近的要素数据遮盖距离远的要素数据,从而无需进行颜色混合。
S3:根据不透明要素渲染后的深度值多次渲染所述半透明要素,结合每次渲染所述半透明要素得到的颜色值、透明度和最后一次渲染所述半透明要素时的深度值计算半透明要素渲染的初始颜色值和初始透明度。
本实施例中,根据不透明要素渲染后的深度值对所述半透明要素进行三次渲染,结合第一次半透明要素渲染后的透明度、第二次半透明要素渲染后的颜色值和透明度、第三次半透明要素渲染后半透明要素的对应深度最小的片元的颜色值和透明度,计算半透明要素渲染的初始颜色值和初始透明度,具体为:
S3-1:对半透明要素进行第一次渲染,并根据第一次半透明要素渲染后的透明度得到的取反累乘值P
S3-1-1:本发明中需要对半透明要素进行三次渲染,因此需要创建三个帧缓冲区用以分开渲染并保存渲染结果。故首先创建用于第一次半透明要素渲染的帧缓冲对象FBO_OIT1并绑定到当前帧缓冲区,使得下面的渲染绘制的结果都记录在此帧缓冲区关联的纹理上。
S3-1-2:创建第一次半透明要素渲染的两张颜色纹理,包括第一次半透明要素渲染的纹理一和第一次半透明要素渲染的纹理二,将第一次半透明要素渲染的两张颜色纹理与所述第一次半透明要素渲染的帧缓冲对象FBO_OIT1关联;
S3-1-3:打开深度测试并关闭深度写入,使用颜色混合的方法第一次渲染当前相机视锥体内所有的半透明要素,将第一次渲染后的半透明要素在屏幕像素上的颜色值记录到所述第一次半透明要素渲染的纹理一中。
使用颜色混合的方法第一次渲染当前相机视锥体内所有的半透明要素,具体为基于图形处理器(graphics processing unit,GPU)的颜色混合特性,将半透明要素与不透明要素的颜色值和透明度进行累乘和累加的混合计算,计算出最终渲染到每个像素的颜色值和透明度,完成三维场景的顺序无关半透明渲染。
颜色混合的方法是使用一个混合函数,将已存在的片元颜色和新片元颜色结合起来,生成一个全新的片元,将其记录在颜色缓冲区中。只需指定混合函数、混合方程,GPU会在渲染时自动计算。
本实施例中,第一次渲染当前相机视锥体内所有的半透明要素时,第一次渲染后的半透明要素的颜色值的计算方法为:
其中,为第i个半透明要素第一次渲染后渲染到屏幕上的对应片元的颜色值,是第一次渲染时第i个半透明要素对应的源颜色值(片元已有颜色),是第一次渲染时目标片元的新颜色值,/>是第一次渲染时第i个半透明要素对应的乘数因子,/>是第一次渲染时第i个半透明要素对应的目标片元的乘数因子,/>是结合操作。
第一次渲染后的半透明要素的透明度的计算方法为:
其中,是第i个半透明要素第一次渲染后渲染到屏幕上的对应片元的透明度,是第一次渲染时第i个半透明要素对应的源透明度(片元已有透明度),是第一次渲染时第i个半透明要素对应的目标片元的新透明度,是结合操作。
本实施例中结合操作默认为两个乘积相加,即:
本实施例中,设置,/>的取值为0-1之间。
由于需要叠加计算各个半透明要素,为了保证每个半透明要素都参与了计算,因此关闭深度写入,防止在远处半透明要素因为深度大而检测失败未渲染的现象。上述透明度计算后的结果保存在FBO_OIT1关联的颜色纹理上。由于透明度是0到1区间,采用计算方式是累乘,最后的结果必然也是0到1之间。
S3-1-4:将不透明要素渲染后的深度值、即不透明要素渲染的纹理二中的深度值记录到所述第一次半透明要素渲染的纹理二中。由于半透明要素渲染时仍然需要进行正常的深度检测,因此FBO_OIT1关联的深度值复用FBO_MAINDEPT上的深度值,保证半透明要素与不透明要素正常进行深度检测。
S3-1-5:根据第一次半透明要素渲染后的透明度得到的取反累乘值P,计算方法为:
其中,P是第一次半透明要素渲染后每个半透明要素渲染到屏幕上的各个像素的透明度的取反累乘值,n是半透明要素的总数,是第i个半透明要素渲染到屏幕上的对应片元的透明度。
S3-2:对半透明要素进行第二次渲染,并根据第二次半透明要素渲染后的颜色值和透明度得到的颜色累加值和透明度累加值。
S3-2-1:创建用于第二次半透明要素渲染的帧缓冲对象FBO_OIT2。
S3-2-2:创建第二次半透明要素渲染的两张颜色纹理,包括第二次半透明要素渲染的纹理一和第二次半透明要素渲染的纹理二,将第二次半透明要素渲染的两张颜色纹理与所述第二次半透明要素渲染的帧缓冲对象FBO_OIT2关联。
S3-2-3:打开深度测试并关闭深度写入,使用颜色混合的方法第二次渲染当前相机视锥体内所有的半透明要素,将第二次渲染后的半透明要素在屏幕像素上的颜色值记录到所述第二次半透明要素渲染的纹理一中。
第二次渲染当前相机视锥体内所有的半透明要素时,使用的方法与S3-1-3中相似,不同之处在于:将第i个半透明要素对应的乘数因子、第i个半透明要素对应的目标片元的乘数因子均设置为1。具体为:
第二次渲染后的半透明要素的颜色值的计算方法为:
其中,为第i个半透明要素第二次渲染后渲染到屏幕上的对应片元的颜色值,是第二次渲染时第i个半透明要素对应的源颜色值(片元已有颜色),是第二次渲染时目标片元的新颜色值,/>是第二次渲染时第i个半透明要素对应的乘数因子,/>是第二次渲染时第i个半透明要素对应的目标片元的乘数因子,/>是结合操作。
第二次渲染后的半透明要素的透明度的计算方法为:
其中,是第i个半透明要素第二次渲染后渲染到屏幕上的对应片元的透明度,是第二次渲染时第i个半透明要素对应的源透明度(片元已有透明度),是第二次渲染时第i个半透明要素对应的目标片元的新透明度,是结合操作,操作默认为两个乘积相加,设置/>
S3-2-4:将不透明要素渲染后的深度值、即不透明要素渲染的纹理二中的深度值记录到所述第二次半透明要素渲染的纹理二中;FBO_OIT2关联的深度纹理仍然复用FBO_MAINDEPT上的深度纹理,保证半透明要素与不透明要素正常进行深度检测。
S3-2-5:计算第二次渲染后的每个半透明要素的各个像素的颜色值和透明度的累加值,计算方法为:
其中,T是计算出的半透明要素第二次渲染到屏幕上的各个像素的颜色值的累加值,G是计算出的半透明要素第二次渲染到屏幕上的各个像素的透明度的累加值,n是半透明要素的总数,是第二次渲染时每个半透明要素在该片元的透明度,/>是第二次渲染时每个半透明要素在该片元的颜色值。
第二次渲染需要计算各个透明度和颜色累加的结果,因此会有数值超过1.0,默认的8位精度会将超过1.0的值进行截断,使其恒等于1.0。为了避免这种情况,第二次半透明要素渲染时颜色纹理的格式采用精度更高的32位浮点纹理格式,防止混合计算后数值超过1.0后约束到1.0的现象,即可以存储超过1.0范围的浮点值。
S3-3:对半透明要素进行第三次渲染,选出第三次半透明要素渲染后半透明要素的对应深度值最小的片元的透明度和颜色值。
S3-3-1:创建用于第三次半透明要素渲染的帧缓冲对象FBO_OIT3。
S3-3-2:创建第三次半透明要素渲染的两张颜色纹理,包括第三次半透明要素渲染的纹理一和第三次半透明要素渲染的纹理二,将第三次半透明要素渲染的两张颜色纹理与所述第三次半透明要素渲染的帧缓冲对象FBO_OIT3关联。
S3-3-3:关闭颜色混合,使用目标颜色第三次渲染当前相机视锥体内所有的半透明要素,用于保证每次颜色更新都是目标颜色。
S3-3-4:打开深度测试和深度写入,将第三次渲染后的半透明要素的对应深度值最小的片元的颜色值记录到所述第三次半透明要素渲染的纹理一中,将第三次渲染后的半透明要素的对应深度值最小的片元的深度值记录到所述第三次半透明要素渲染的纹理二中。
本发明的第三次渲染需要计算离相机最近一层的每个半透明要素各个像素的颜色值和透明度。离相机最近也就是各个像素的深度值最小,因此在渲染前打开深度测试和深度写入,只允许传入值小于深度缓冲区的值。渲染相机视锥体内所有的半透明要素,并将渲染结果保存在FBO_OIT3关联的颜色纹理中。如下公式,最后保存的结果分别是深度最小的片元的颜色值和透明度,即:
其中,为所述第三次半透明要素渲染的纹理一中记录的颜色值,/>为所述第三次半透明要素渲染的纹理一中记录的透明度,/>表示第三次渲染后的半透明要素进行深度检测后得到的片元深度值最小的片元对应的颜色值,/>表示第三次渲染后的半透明要素进行深度检测后得到的片元深度值最小的片元对应的透明度。
S3-4:所述半透明要素渲染的初始颜色值和初始透明度的计算方法为:
其中,为初始颜色值,/>为初始透明度,P是根据第一次半透明要素渲染后得到的半透明要素渲染到屏幕上的各个像素的透明度得到的取反累乘值,保存在第一次半透明要素渲染的纹理一中;TG分别是根据第二次半透明要素渲染后得到的半透明要素渲染到屏幕上的各个像素的颜色值和透明度得到的累加值,保存在第二次半透明要素渲染的纹理二中;/>是第三次半透明要素渲染后半透明要素的对应深度值最小的片元的颜色值、即对半透明要素进行第三次渲染后得到的离相机最近一层的半透明要素渲染到屏幕上的各个像素的颜色值,/>是第三次半透明要素渲染后半透明要素的对应深度值最小的片元的透明度、即对半透明要素进行第三次渲染后得到的离相机最近一层的半透明要素渲染到屏幕上的各个像素的透明度。
本实施例中,将当前帧缓冲区绑定回FBO_MAINDEPTH,此时FBO_MAINDEPTH关联的颜色纹理上记录着步骤2中不透明要素绘制的结果。将对半透明要素进行三次渲染后得到的颜色纹理传入到片元着色器中进行采样;同时,顶点着色器输入[0, 0, 0, 1, 1, 0, 1,1]这四个点的二维顶点数据,表示绘制到该帧缓冲对象关联纹理的西北、西南、东北、东南四个坐标点;接着,片元着色器按照计算公式计算出渲染后的初始颜色值和初始透明度/>
S4:结合所述初始颜色值、初始透明度和半透明要素渲染过程中的背景颜色值、背景透明度,计算半透明要素渲染的最终颜色值和最终透明度。
利用GPU颜色混合方法,所述半透明要素渲染的最终颜色值和最终透明度的计算方法为:
其中,为半透明要素渲染后的半透明要素对应的片元的最终颜色值,为半透明要素渲染后的半透明要素对应的片元的最终透明度,/>为初始颜色值,/>为初始透明度,/>为半透明要素渲染过程中半透明要素对应的背景片元的颜色值,/>为半透明要素渲染过程中半透明要素对应的背景片元的透明度。
和/>的具体展开计算代入并整理公式,得到场景渲染到屏幕上各个像素的最终颜色值和最终透明度为:
,/>
其中,n是半透明要素的总数,是每个半透明要素在该片元的颜色值,/>是每个半透明要素在该片元的透明度,/>是离摄像机最近一层像素的颜色值,/>是离摄像机最近一层像素的透明度。
S5:输出不透明要素渲染后的结果和半透明要素渲染后的结果,得到最终的渲染画面。本实施例中,顶点着色器中传入二维顶点数据:[0, 0, 0, 1, 1, 0, 1, 1],表示屏幕的西北、西南、东北、东南四个坐标点。片元着色器中传入帧缓冲区对象FBO_MAINDEPTH关联的颜色纹理,直接采样纹理输出片元颜色,完成将上不透明要素和半透明要素绘制的结果渲染到屏幕。
实施例二
本发明还公开了一种面向互联网三维地图的顺序无关透明渲染方法和系统,包括:
数据获取模块,用于获取互联网三维地图数据,将所述互联网三维地图数据分为不透明要素和半透明要素;
不透明要素渲染模块,用于渲染所述不透明要素,记录不透明要素渲染后的颜色值和深度值,所述颜色值包含透明度;
半透明要素渲染模块,用于根据不透明要素渲染后的深度值多次渲染所述半透明要素,结合每次渲染所述半透明要素得到的颜色值、透明度和最后一次渲染所述半透明要素时的深度值计算半透明要素渲染的初始颜色值和初始透明度;结合所述初始颜色值、初始透明度和半透明要素渲染过程中的背景颜色值、背景透明度,计算半透明要素渲染的最终颜色值和最终透明度;
输出模块,用于输出不透明要素渲染后的结果和半透明要素渲染后的结果,得到最终的渲染画面。
实施例三
本发明还公开了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现实施例一中所述的面向互联网三维地图的顺序无关透明渲染方法。
实施例四
本发明还公开了一种设备,包括存储器、处理器和存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现实施例一中所述的面向互联网三维地图的顺序无关透明渲染方法。
与现有技术相比,本发明的有益效果在于:
1、本发明通过先划分不透明要素和半透明要素,先渲染不透明要素再根据不透明要素的渲染结果对半透明要素进行多次渲染,不用对场景内半透明物体进行排序而是直接对视锥体内的半透明进行遍历采用顺序无关渲染,解决了一般渲染过程中因半透明物体排序而造成的性能开销问题,是一种顺序无关的渲染方法,有效降低了渲染过程中的性能消耗。
2、本发明在半透明要素渲染时考虑了最近一层的渲染结果,通过在颜色混合的基础上考虑最近一层片元颜色作为权重因子从而实现半透明要素的正确渲染,保证了三维场景中空间层次关系的正确,实现了性能和渲染效果的兼顾。
3、本发明通过计算半透明要素每个像素的颜色值和透明度相应的累乘和累加值,将结果保存至对应的帧缓冲区中;再渲染场景中离摄像机最近的一层半透明要素并获得其像素颜色值和透明度,同样保存在帧缓冲区中;接着再利用GPU颜色混合特性进行计算出最终像素的颜色值和透明度,最终完成了半透明要素的顺序无关渲染。同时,本发明在进行半透明要素渲染时,所有半透明要素仅需要渲染三次,平均帧率远高于深度剥离技术。因此,本发明即可以实现高效性,又可以清晰直观地表达多个半透明要素在前后、上下空间上的位置关系,渲染结果更加真实,空间表达更加正确,可以有效提升三维场景中半透明要素的渲染性能。
4、本发明适用于互联网三维地图中具有半透明要素的场景,特别是对于半透明要素互相穿插、半透明要素相互包含的情形,如轨道交通三维系统中站点模型贯穿地表或是三维建筑室内外切换时,效果展示及交互体验最佳。对于复杂场景中半透明要素无法正确渲染的情形提供了极高的参考价值,可以为互联网三维城市建设提供有利技术支撑。
为了进一步说明本发明的有益效果,本实施例中分别使用WBOIT、Depth Peeling和本发明方法进行仿真实验,并对实验结果进行对比。使用WBOIT、Depth Peeling和本发明方法进行渲染得到的效果图如图2-图4所示,性能参数对比如表1所示。
表1 WBOIT、Depth Peeling、本发明方法进行渲染的性能参数对比表
图2-图4的场景中灰色建筑、树木均为半透明材质。从图2-图4可以看出,WBOIT无法做到半透明要素互相穿插的效果,如无法体现建筑室内外关系、树木与建筑物的交叠,从而造成错误的三维空间位置关系。Depth Peeling与本发明方法则完美体现了半透明要素互相穿插的场景。
从表1可以看出,与Depth Peeling相比,本发明方法在性能上体现更优,帧率是反映性能的一个常用指标,表示场景的流畅度。数值越大,场景越流畅,性能表现越优秀。从表1中可以看到,本发明方法的帧率十分接近WBOIT,平均帧率远高于Depth Peeling方法。证明了本发明方法可以同时兼顾渲染效果和性能。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,上述实施例仅仅是为清楚地说明所作的举例,并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引申出的显而易见的变化或变动仍处于本发明创造的保护范围之中。

Claims (8)

1.一种面向互联网三维地图的顺序无关透明渲染方法,其特征在于,包括:
获取互联网三维地图数据,将所述互联网三维地图数据分为不透明要素和半透明要素;
渲染所述不透明要素,记录不透明要素渲染后的颜色值和深度值,所述颜色值包含透明度;
根据不透明要素渲染后的深度值多次渲染所述半透明要素,结合每次渲染所述半透明要素得到的颜色值、透明度和最后一次渲染所述半透明要素时的深度值计算半透明要素渲染的初始颜色值和初始透明度;
结合所述初始颜色值、初始透明度和半透明要素渲染过程中的背景颜色值、背景透明度,计算半透明要素渲染的最终颜色值和最终透明度;
输出不透明要素渲染后的结果和半透明要素渲染后的结果,得到最终的渲染画面;
所述根据不透明要素渲染后的深度值多次渲染所述半透明要素,具体为:根据不透明要素渲染后的深度值对所述半透明要素进行三次渲染;
所述结合每次渲染所述半透明要素得到的颜色值、透明度和最后一次渲染所述半透明要素时的深度值计算半透明要素渲染的初始颜色值和初始透明度,具体为:结合第一次半透明要素渲染后的透明度、第二次半透明要素渲染后的颜色值和透明度、第三次半透明要素渲染后半透明要素的对应深度最小的片元的颜色值和透明度,计算半透明要素渲染的初始颜色值和初始透明度;
所述半透明要素渲染的初始颜色值和初始透明度的计算方法为:
Afrag=1-P;
其中,Cfrag为所述初始颜色值,Afrag为所述初始透明度,T是根据第二次半透明要素渲染后的颜色值得到的颜色累加值,G是根据第二次半透明要素渲染后的透明度得到的透明度累加值,Fa是第三次半透明要素渲染后半透明要素的对应深度值最小的片元的透明度,Frgb是第三次半透明要素渲染后半透明要素的对应深度值最小的片元的颜色值,P是根据第一次半透明要素渲染后的透明度得到的取反累乘值。
2.根据权利要求1所述的面向互联网三维地图的顺序无关透明渲染方法,其特征在于:渲染所述不透明要素,记录不透明要素渲染后的颜色值和深度值,包括:
创建用于不透明要素渲染的帧缓冲对象,创建不透明要素渲染的纹理一和不透明要素渲染的纹理二并与所述不透明要素渲染的帧缓冲对象关联;
打开深度测试和深度写入,渲染当前相机视锥体内所有的不透明要素,将渲染后的颜色值记录到所述不透明要素渲染的纹理一中,将渲染后的深度值记录到所述不透明要素渲染的纹理二中。
3.根据权利要求2所述的面向互联网三维地图的顺序无关透明渲染方法,其特征在于:所述渲染当前相机视锥体内所有的不透明要素时,使用距离相机近的要素数据遮盖距离远的要素数据。
4.根据权利要求1所述的面向互联网三维地图的顺序无关透明渲染方法,其特征在于:所述根据第一次半透明要素渲染后的透明度得到的取反累乘值P的计算方法为:
其中,n是半透明要素的总数,ai是第i个半透明要素渲染到屏幕上的对应片元的透明度。
5.根据权利要求1所述的面向互联网三维地图的顺序无关透明渲染方法,其特征在于:所述根据不透明要素渲染后的深度值对所述半透明要素进行三次渲染,具体为:
创建用于第一次半透明要素渲染的帧缓冲对象,创建第一次半透明要素渲染的纹理一和第一次半透明要素渲染的纹理二并与所述第一次半透明要素渲染的帧缓冲对象关联;打开深度测试并关闭深度写入,使用颜色混合的方法第一次渲染当前相机视锥体内所有的半透明要素,将第一次渲染后的半透明要素的颜色值记录到所述第一次半透明要素渲染的纹理一中,将不透明要素渲染后的深度值记录到所述第一次半透明要素渲染的纹理二中;
创建用于第二次半透明要素渲染的帧缓冲对象,创建第二次半透明要素渲染的纹理一和第二次半透明要素渲染的纹理二并与所述第二次半透明要素渲染的帧缓冲对象关联;打开深度测试并关闭深度写入,使用颜色混合的方法第二次渲染当前相机视锥体内所有的半透明要素,将第二次渲染后的半透明要素的颜色值记录到所述第二次半透明要素渲染的纹理一中,将不透明要素渲染后的深度值记录到所述第二次半透明要素渲染的纹理二中;
创建用于第三次半透明要素渲染的帧缓冲对象,创建第三次半透明要素渲染的纹理一和第三次半透明要素渲染的纹理二并与所述第三次半透明要素渲染的帧缓冲对象关联;打开深度测试和深度写入,使用目标颜色第三次渲染当前相机视锥体内所有的半透明要素,将第三次渲染后的半透明要素的对应深度值最小的片元的颜色值记录到所述第三次半透明要素渲染的纹理一中,将第三次渲染后的半透明要素的对应深度值最小的片元的深度值记录到所述第三次半透明要素渲染的纹理二中。
6.根据权利要求5所述的面向互联网三维地图的顺序无关透明渲染方法,其特征在于:所述使用颜色混合的方法第一次渲染当前相机视锥体内所有的半透明要素,具体为:
第一次渲染后的半透明要素的颜色值的计算方法为:
Ci=combined(Csource_i*Fsource_i,Cdestination_i*Fdestination_i),
其中,Ci为第i个半透明要素第一次渲染后渲染到屏幕上的对应片元的颜色值,Csource_i是第一次渲染时第i个半透明要素对应的源颜色值,Cdestination_i是第一次渲染时目标片元的新颜色值,Fsource_i是第一次渲染时第i个半透明要素对应的乘数因子,Fdestination_i是第一次渲染时第i个半透明要素对应的目标片元的乘数因子,combined( )是结合操作;
第一次渲染后的半透明要素的透明度的计算方法为:
ai=combined(Asource_i*Fsource_i,Adestination_i*Fdestination_i),
其中,ai是第i个半透明要素第一次渲染后渲染到屏幕上的对应片元的透明度,Asource_i是第一次渲染时第i个半透明要素对应的源透明度,Adestination_i是第一次渲染时第i个半透明要素对应的目标片元的新透明度。
7.根据权利要求1-6任一项所述的面向互联网三维地图的顺序无关透明渲染方法,其特征在于:所述半透明要素渲染的最终颜色值和最终透明度的计算方法为:
Cfinal=Cfrag*Afrag+(1-Afrag)*Co
Afinal=Afrag+(1-Afrag)*a0
其中,Cfinal为半透明要素渲染后的所述最终颜色值,Afinal为半透明要素渲染后的所述最终透明度,Cfrag为所述初始颜色值,Afrag为所述初始透明度,CO为半透明要素渲染过程中的所述背景颜色值,a0为半透明要素渲染过程中的所述背景透明度。
8.一种面向互联网三维地图的顺序无关透明渲染系统,其特征在于,包括:
数据获取模块,用于获取互联网三维地图数据,将所述互联网三维地图数据分为不透明要素和半透明要素;
不透明要素渲染模块,用于渲染所述不透明要素,记录不透明要素渲染后的颜色值和深度值,所述颜色值包含透明度;
半透明要素渲染模块,用于根据不透明要素渲染后的深度值多次渲染所述半透明要素,结合每次渲染所述半透明要素得到的颜色值、透明度和最后一次渲染所述半透明要素时的深度值计算半透明要素渲染的初始颜色值和初始透明度;结合所述初始颜色值、初始透明度和半透明要素渲染过程中的背景颜色值、背景透明度,计算半透明要素渲染的最终颜色值和最终透明度;
输出模块,用于输出不透明要素渲染后的结果和半透明要素渲染后的结果,得到最终的渲染画面;
所述根据不透明要素渲染后的深度值多次渲染所述半透明要素,具体为:根据不透明要素渲染后的深度值对所述半透明要素进行三次渲染;
所述结合每次渲染所述半透明要素得到的颜色值、透明度和最后一次渲染所述半透明要素时的深度值计算半透明要素渲染的初始颜色值和初始透明度,具体为:结合第一次半透明要素渲染后的透明度、第二次半透明要素渲染后的颜色值和透明度、第三次半透明要素渲染后半透明要素的对应深度最小的片元的颜色值和透明度,计算半透明要素渲染的初始颜色值和初始透明度;
所述半透明要素渲染的初始颜色值和初始透明度的计算方法为:
Afrag=1-P;
其中,Cfrag为所述初始颜色值,Afrag为所述初始透明度,T是根据第二次半透明要素渲染后的颜色值得到的颜色累加值,G是根据第二次半透明要素渲染后的透明度得到的透明度累加值,Fa是第三次半透明要素渲染后半透明要素的对应深度值最小的片元的透明度,Frgb是第三次半透明要素渲染后半透明要素的对应深度值最小的片元的颜色值,P是根据第一次半透明要素渲染后的透明度得到的取反累乘值。
CN202311364592.0A 2023-10-20 2023-10-20 面向互联网三维地图的顺序无关透明渲染方法和系统 Active CN117095110B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311364592.0A CN117095110B (zh) 2023-10-20 2023-10-20 面向互联网三维地图的顺序无关透明渲染方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311364592.0A CN117095110B (zh) 2023-10-20 2023-10-20 面向互联网三维地图的顺序无关透明渲染方法和系统

Publications (2)

Publication Number Publication Date
CN117095110A CN117095110A (zh) 2023-11-21
CN117095110B true CN117095110B (zh) 2024-01-09

Family

ID=88773904

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311364592.0A Active CN117095110B (zh) 2023-10-20 2023-10-20 面向互联网三维地图的顺序无关透明渲染方法和系统

Country Status (1)

Country Link
CN (1) CN117095110B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117315123A (zh) * 2023-11-27 2023-12-29 上海天华建筑设计有限公司 基于OpenGL的次序无关透明度的图像渲染方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113052951A (zh) * 2021-06-01 2021-06-29 腾讯科技(深圳)有限公司 物体的渲染处理方法、装置、计算机设备和存储介质
CN114742694A (zh) * 2022-03-18 2022-07-12 北京字跳网络技术有限公司 一种图像渲染方法、装置及电子设备
CN115423923A (zh) * 2022-09-02 2022-12-02 珠海金山数字网络科技有限公司 模型渲染方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100790892B1 (ko) * 2006-10-18 2008-01-02 삼성전자주식회사 투명 객체의 화질 향상을 위한 3차원 그래픽스 데이터렌더링 방법 및 장치

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113052951A (zh) * 2021-06-01 2021-06-29 腾讯科技(深圳)有限公司 物体的渲染处理方法、装置、计算机设备和存储介质
CN114742694A (zh) * 2022-03-18 2022-07-12 北京字跳网络技术有限公司 一种图像渲染方法、装置及电子设备
CN115423923A (zh) * 2022-09-02 2022-12-02 珠海金山数字网络科技有限公司 模型渲染方法及装置

Also Published As

Publication number Publication date
CN117095110A (zh) 2023-11-21

Similar Documents

Publication Publication Date Title
CN111105491B (zh) 场景渲染方法、装置、计算机可读存储介质和计算机设备
CN111508052B (zh) 三维网格体的渲染方法和装置
JP5531093B2 (ja) コンピュータグラフィックスでオブジェクトにシャドウを付ける方法
KR101755134B1 (ko) 디지털 지도 섹션을 공간적으로 재현하기 위한 장치, 방법 및 컴퓨터 프로그램
CN107423445A (zh) 一种地图数据处理方法、装置及存储介质
US20130021445A1 (en) Camera Projection Meshes
US20070139408A1 (en) Reflective image objects
CN117095110B (zh) 面向互联网三维地图的顺序无关透明渲染方法和系统
CN111784833A (zh) 基于WebGL的洪水演进态势三维动态可视化展示方法
WO2023231537A1 (zh) 地形图像渲染方法、装置、设备及计算机可读存储介质及计算机程序产品
CN114219902A (zh) 气象数据的体绘制渲染方法、装置和计算机设备
CN105205861A (zh) 基于Sphere-Board的树木三维可视化模型实现方法
CN106570926B (zh) 一种飞行视景仿真中高效的粒子云层绘制方法
CN113750516A (zh) 一种在游戏引擎中实现三维gis数据加载方法、系统及设备
CN114756937A (zh) 一种基于UE4引擎和Cesium框架的可视化系统及方法
CN111273877B (zh) 一种实景三维数据与二维栅格图片的联动展示平台及其联动方法
US9401044B1 (en) Method for conformal visualization
CN116228960A (zh) 虚拟博物馆展示系统的构建方法、构建系统和展示系统
CN115690286B (zh) 三维地形生成方法、终端设备及计算机可读存储介质
CN114972612A (zh) 一种基于三维简化模型的图像纹理生成方法及相关设备
US20220206676A1 (en) Modifying drawing characteristics of digital raster images utilizing stroke properties
JP2022190657A (ja) 表示媒体、処理装置、プログラムおよびプログラムを記録したコンピュータ読み取り可能な記録媒体
CN114549762A (zh) 基于三维gis平台多渲染引擎自适应切换方法及系统、存储介质
CN113223146A (zh) 一种基于三维仿真场景的数据标注方法、装置及存储介质
CN114491780B (zh) 一种城市建筑群震后修复过程情景可视化方法及系统

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