CN112245926B - 虚拟地形的渲染方法、装置、设备及介质 - Google Patents

虚拟地形的渲染方法、装置、设备及介质 Download PDF

Info

Publication number
CN112245926B
CN112245926B CN202011276401.1A CN202011276401A CN112245926B CN 112245926 B CN112245926 B CN 112245926B CN 202011276401 A CN202011276401 A CN 202011276401A CN 112245926 B CN112245926 B CN 112245926B
Authority
CN
China
Prior art keywords
terrain
block
distance
lod
virtual
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
CN202011276401.1A
Other languages
English (en)
Other versions
CN112245926A (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202011276401.1A priority Critical patent/CN112245926B/zh
Publication of CN112245926A publication Critical patent/CN112245926A/zh
Application granted granted Critical
Publication of CN112245926B publication Critical patent/CN112245926B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/60Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/80Special adaptations for executing a specific game genre or game mode
    • A63F13/822Strategy games; Role-playing games
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/80Special adaptations for executing a specific game genre or game mode
    • A63F13/837Shooting of targets
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/80Special adaptations for executing a specific game genre or game mode
    • A63F13/847Cooperative playing, e.g. requiring coordinated actions from several players to achieve a common goal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/05Geographic models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Remote Sensing (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本申请公开了一种虚拟地形的渲染方法、装置、设备及介质,涉及虚拟环境领域。虚拟地形包括至少一个尺寸相等的地形块,该方法包括:获取虚拟地形中地形块的第一地形块坐标和相机地形块的第二地形块坐标;根据第一地形块坐标与第二地形块坐标之间的坐标距离,确定地形块的距离LOD等级;在虚拟地形中地形块的距离LOD等级以相机地形块为中心呈同心方形环状分布,由中心向四周逐级递减;根据地形块的距离LOD等级确定地形块中的多个面片,得到虚拟地形的第一组面片;基于第一组面片绘制虚拟地形的地形网格,渲染地形网格得到虚拟地形。该方法可以使相机始终位于同LOD等级的地形块所呈区域的中心位置,便于实现LOD等级的平滑切换。

Description

虚拟地形的渲染方法、装置、设备及介质
技术领域
本申请实施例涉及虚拟环境领域,特别涉及一种虚拟地形的渲染方法、装置、设备及介质。
背景技术
在基于三维虚拟环境的游戏中,需要对虚拟地形的三维模型进行渲染,以便生成地形画面并显示。LOD(Levels of Detail,多细节层次)技术用于根据三维模型的节点所处的位置和重要度,决定三维模型渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
相关技术中,为了实现对靠近摄像头的地形块精细渲染,对远离摄像头的地形块进行粗略渲染,会使用四叉树结构对虚拟地形进行节点划分:将虚拟地形作为根节点,划分为四个子节点,再将子节点的区域再次细分为四个子节点,如此进行区域划分。当相机位于第i级的子节点的区块中时,将与相机所在区块的区块距离小于2的区块,再次四分为四个第i+1级节点,直至第i+1级节点的区块大小小于目标大小,则停止细分,最终得到的各个区块即为地形块。如此得到的地形块可以实现距离摄像头近的地形块较小且分布较密集,距离摄像头远的地形块较大且分布较稀疏,根据地形块的大小可以确定该地形块的LOD等级,根据LOD等级对地形块进行不同程度的细节渲染。
相关技术中的方法,由于四叉树是对与相机所在区块小于2区块距离的同等级区块进行细分,即,将以相机所在区块为中心5*5大小的正方形区域内的所有区块进行四分,得到10*10个子节点对应的区块,相机所在位置无法位于10*10个区块的中心位置。由于不同LOD等级的地形块其渲染精细程度不同,当相机位置发生改变时,部分地形块的LOD等级会发生改变,则需要对这些地形块的渲染精细程度进行平滑切换,而相机不位于同等级的LOD等级地形块的中心位置,当相机移动时不同LOD等级的地形块移动的距离会完全不同,无法实现LOD等级平滑切换。
发明内容
本申请实施例提供了一种虚拟地形的渲染方法、装置、设备及介质,可以使相机始终位于同LOD等级的地形块所呈区域的中心位置,当相机移动时,不同LOD等级的地形块移动距离相同,可以实现LOD等级的平滑切换。所述技术方案如下:
一方面,提供了一种虚拟地形的渲染方法,所述虚拟地形包括至少一个尺寸相等的地形块,所述方法包括:
获取所述虚拟地形中所述地形块的第一地形块坐标和相机地形块的第二地形块坐标,所述相机地形块为相机所在的地形块;
根据所述第一地形块坐标与所述第二地形块坐标之间的坐标距离,确定所述地形块的距离LOD等级;在所述虚拟地形中所述地形块的所述距离LOD等级以所述相机地形块为中心呈同心方形环状分布,由所述中心向四周逐级递增;
根据所述地形块的所述距离LOD等级确定所述地形块中的多个面片,得到所述虚拟地形的第一组面片;所述地形块中的所述面片数量与所述地形块的距离LOD等级成反比;
基于所述第一组面片绘制所述虚拟地形的地形网格,渲染所述地形网格得到所述虚拟地形。
另一方面,提供了一种虚拟地形的渲染装置,所述虚拟地形包括至少一个尺寸相等的地形块,所述装置包括:
获取模块,用于获取所述虚拟地形中所述地形块的第一地形块坐标和相机地形块的第二地形块坐标,所述相机地形块为相机所在的地形块;
距离LOD模块,用于根据所述第一地形块坐标与所述第二地形块坐标之间的坐标距离,确定所述地形块的距离LOD等级;在所述虚拟地形中所述地形块的所述距离LOD等级以所述相机地形块为中心呈同心方形环状分布,由所述中心向四周逐级递增;
第一面片模块,用于根据所述地形块的所述距离LOD等级确定所述地形块中的多个面片,得到所述虚拟地形的第一组面片;所述地形块中的所述面片数量与所述地形块的距离LOD等级成反比;
渲染模块,用于基于所述第一组面片绘制所述虚拟地形的地形网格,渲染所述地形网格得到所述虚拟地形。
另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上方面所述的虚拟地形的渲染方法。
另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上方面所述的虚拟地形的渲染方法。
另一方面,本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述可选实现方式中提供的虚拟地形的渲染方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
通过将虚拟地形划分为相同尺寸的多个地形块,以相机所在的地形块为中心,呈同心方形环状确定虚拟地形上每个地形块的距离LOD等级,使相同距离LOD等级的地形块所呈的区域与相机所在的地形块呈中心对称,当相机移动时,各个距离LOD等级所呈的区域会同步移动,即,当相机移动一个地形块时,各个距离LOD等级所呈的区域也会对应向相同方向移动一个地形块,地形块的距离LOD等级的随着相机移动的变化是非常规律的,因此,可以准确预测出每个地形块的距离LOD等级随着相机移动的变化结果,便于根据预测的结果控制地形块平滑地从原距离LOD等级对应的模型精细度变化到相机移动后的距离LOD等级对应的模型精细度,减少模型精细度骤然变化带来的视觉冲击,提高对虚拟地形模拟的真实度。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本申请一个示例性实施例提供的计算机系统的结构框图;
图2是本申请另一个示例性实施例提供的虚拟地形的渲染方法的面片示意图;
图3是本申请另一个示例性实施例提供的虚拟地形的渲染方法的LOD等级示意图;
图4是本申请另一个示例性实施例提供的虚拟地形的渲染方法的地形块的距离LOD等级分布图;
图5是本申请另一个示例性实施例提供的虚拟地形的渲染方法的方法流程图;
图6是本申请另一个示例性实施例提供的虚拟地形的渲染方法的方法流程图;
图7是本申请另一个示例性实施例提供的虚拟地形的渲染方法的虚拟地形示意图;
图8是本申请另一个示例性实施例提供的虚拟地形的渲染方法的方法流程图;
图9是本申请另一个示例性实施例提供的虚拟地形的渲染方法的虚拟地形示意图;
图10是本申请另一个示例性实施例提供的虚拟地形的渲染方法的平滑切换示意图;
图11是本申请另一个示例性实施例提供的虚拟地形的渲染方法的方法流程图;
图12是本申请另一个示例性实施例提供的虚拟地形的渲染方法的方法流程图;
图13是本申请另一个示例性实施例提供的虚拟地形的渲染方法的多级深度图的示意图;
图14是本申请另一个示例性实施例提供的虚拟地形的渲染方法的生成多级深度图的示意图;
图15是本申请另一个示例性实施例提供的虚拟地形的渲染方法的方法流程图;
图16是本申请另一个示例性实施例提供的虚拟地形的渲染方法的绑定圆锥的示意图;
图17是本申请另一个示例性实施例提供的虚拟地形的渲染方法的地形网格的示意图;
图18是本申请另一个示例性实施例提供的虚拟地形的渲染装置的装置框图;
图19是本申请另一个示例性实施例提供的终端的框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先,对本申请实施例中涉及的名词进行简单介绍:
大型多人在线角色扮演游戏(MMOPRG,Massively Multiplayer Online Role-Playing Game):是指一种支持多人在线的网络游戏,不同客户端可在同一场景中进行游戏,不同客户端可协同完成一项任务,客户端之间可在线交流,客户端还可与游戏中的非玩家角色(NPC,Non-Player Character)进行互动。通常情况下,用户通过在客户端登录用户帐号控制虚拟角色,虚拟角色与用户帐号(ID,Identity)一一对应。大型多人在线游戏包括战略类、动作类、冒险类、模拟类、运动类、赛车类、角色扮演类等类型。下述实施例以在客户端是游戏客户端为例说明。
图1示出了本申请一个示例性实施例提供的实施环境的框图,本申请实施例提供的虚拟环境中的虚拟地形的渲染方法应用于终端100中,该终端100安装有支持虚拟地形渲染的应用程序对应的客户端,该应用程序包括三维地图程序、军事仿真程序、第一人称射击游戏(First-Person Shooting Game,FPS)、多人在线战术竞技游戏(Multiplayer OnlineBattle Arena,MOBA)、大型多人在线角色扮演游戏(Massively Multiplayer OnlineRole-Playing Game,MMOPRG)、虚拟现实(Virtual Reality,VR)应用程序、增强现实(Augmented Reality,AR)应用程序。下述实施例以应用程序为游戏应用程序来举例说明。
在一些实施例中,终端包括智能手机、平板电脑、MP3播放器、MP4播放器、膝上便携式计算机、台式计算机、笔记本电脑中的至少一种,以下实施例以终端包括智能手机为例进行说明。
示例性的,终端包括处理器101和存储器102。
处理器101可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central Processing Unit,中央处理器)103;协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器包括GPU(Graphics Processing Unit,图像处理器)104,GPU104用于负责显示屏所需要显示的内容的渲染和绘制,示例性的,本申请提供的虚拟地形的渲染方法是由终端中的GPU执行的。一些实施例中,处理器101还可以包括AI(ArtificialIntelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器102可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器102还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器102中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器所执行以实现本申请中方法实施例提供的虚拟地形的渲染方法。
结合上述对虚拟环境的介绍以及实施环境说明,对本申请实施例提供的虚拟地形的渲染方法进行说明,以该方法的执行主体为图1所示出的终端上运行的客户端来举例说明。该终端运行的客户端为应用程序的客户端,该应用程序是支持虚拟地形渲染的程序。
一般地,虚拟地形的渲染步骤为:
第一步:将虚拟地形的水平面划分为多个地形块;
第二步:根据相机位置确定每个地形块的LOD等级;
第三步:根据LOD等级确定每个地形块中面片的数量、位置,得到多个面片;
第四步:根据虚拟地形的地形高度图,确定面片各个顶点的高度,将位于水平面的面片的各个顶点下降或抬升,形成三维的虚拟地形网格;
第五步:对三维的虚拟地形网格进行渲染得到虚拟地形。
示例性的,为了提高渲染效率、降低渲染的工作量,在第三步之后第四步之前还可以根据相机的视野范围对面片进行视锥裁剪,或根据遮挡关系对面片进行遮挡剔除,去除部分不可见的面片。
下面,结合本申请的方法对上述虚拟地形的渲染步骤进行说明。
第一步:示例性的,本申请提供的方法使用相同尺寸的地形块,将虚拟地形均等分割为多个地形矿。例如,虚拟地形的大小为2048米*2048米,每32米*32米划为一个地形块,则可以将虚拟地形划分为64*64个地形块。
第二步:为了实现对靠近相机的地形模型进行精细渲染,对远离相机的地形模型进行粗略渲染的效果,采用了LOD技术,其中,LOD等级用于表示一个区域的渲染精细程度,LOD0为最精细的渲染,等级越高,渲染越粗略。示例性的,本申请的LOD等级包括距离LOD等级、平坦度LOD等级和综合LOD等级。
在本申请提供的方法中,LOD等级决定了地形块中面片的组成情况。面片是指一组包含5*5个顶点、4*4个格子的方格,如图2所示,为一个面片301。
示例性的,以四个LOD等级为例进行说明,如图3所示,提供了四个LOD等级的地形块其中的面片组成情况:
如图3中的(1)所示,LOD0的地形块包含8*8个面片。由于地形块的大小为32米*32米,则每个面片覆盖4*4米;
如图3中的(2)所示,LOD1的地形块包含4*4个面片。由于地形块的大小为32米*32米,则每个面片覆盖8*8米;
如图3中的(3)所示,LOD2的地形块包含2*2个面片。由于地形块的大小为32米*32米,则每个面片覆盖16*16米;
如图3中的(4)所示,LOD3的地形块包含1个面片。由于地形块的大小为32米*32米,则每个面片覆盖32*32米;
可以看到,LOD等级越高的地形块,面片的密度越稀疏,对模型的构建越粗略。
本申请提供的方法,根据各个地形块与相机所在地形块的距离确定各个地形块的距离LOD等级,使虚拟地形中各个地形块的距离LOD等级分布情况呈现以相机所在的地形块为中心,向四周逐层递减的同心方形环状分布。
例如,如图4所示,在9*9个地形块的虚拟地形中,相机位于中心位置的地形块302上,则包围地形块302的3*3个地形块的距离LOD等级为LOD0,包围LOD0地形块的一圈方形环状区域内的地形块的距离LOD等级为LOD1,包围LOD1地形块的一圈方形环状区域内的地形块的距离LOD等级为LOD2,包围LOD2地形块的一圈方形环状区域内的地形块的距离LOD等级为LOD3。当相机向右移动一个地形块,则同LOD等级的地形块区域向右移动一个地形块。
第三步:得到每个地形块的LOD等级后,则可以根据地形块的LOD等级将各个地形块分割为面片。例如,根据如图3所示的距离LOD等级与地形块中面片组成情况的对应关系,将各个地形块按照各自的距离LOD等级划分为多个面片,得到组成虚拟地形的一组面片。
第四步:对于虚拟地形的地形块以及面片的划分都是在虚拟地形的水平面上进行的,是二维的,在将虚拟地形按照LOD等级划分得到多个面片后,就可以得到虚拟地形的地形网格上各个顶点的平面坐标,然后再根据虚拟地形的地形高度图,可以得到各个顶点的高度坐标,根据平面坐标以及高度坐标,就可以绘制出虚拟地形的三维地形网格。
第五步:对三维地形网格进行渲染,例如,对三维地形网格进行贴图、着色等,即可得到虚拟地形。
图5示出了本申请一个示例性实施例提供的虚拟地形的渲染方法的流程图。该方法可以由上述图1中的任一终端上运行的客户端来执行,该客户端是支持虚拟地形渲染的客户端。该方法包括:
步骤201,获取虚拟地形中地形块的第一地形块坐标和相机地形块的第二地形块坐标,相机地形块为相机所在的地形块。
示例性的,虚拟地形包括至少一个尺寸相同的地形块。
示例性的,将虚拟地形的二维平面(水平面)划分为数个大小相等的地形块。即,数个地形块拼接为完整的虚拟地形。示例性的,地形块是在二维平面上的方形。
示例性的,地形块对应有地形块数据:地形块坐标。示例性的,地形块的地形块坐标以第一个地形块为单位距离,响应于第i个地形块是位于虚拟地形中第y行、第x个的地形块,则第i个地形块的地形块坐标为(x,y)。
客户端获取虚拟地形中每一个地形块的地形块坐标,即,第一地形块坐标包括多个地形块坐标。客户端还会获取相机当前所在的地形块的地形块坐标(第二地形块坐标)。
示例性的,相机位于虚拟地形的三维空间坐标系中,用于确定观察虚拟地形的位置,根据相机位置来渲染虚拟地形,并根据虚拟地形投影生成需要显示的画面。示例性的,相机为一个理想的交点,并带有一个矩形虚拟感光表面——称为成像矩形——悬浮在焦点前面不远处。成像矩形由正方形或矩形虚拟感光元件的栅格组成,每个感光元件对应屏幕中的一个像素。所谓渲染,可以理解为每个虚拟感光元件记录光强度和颜色的过程。
相机所在的地形块,即为相机位置的水平面二维坐标所在的地形块。
步骤202,根据第一地形块坐标与第二地形块坐标之间的坐标距离,确定地形块的距离LOD等级;在虚拟地形中地形块的距离LOD等级以相机地形块为中心呈同心方形环状分布,由中心向四周逐级递增。
客户端根据虚拟地形中各个地形块与相机地形块的距离,确定各个地形块的距离LOD等级。示例性的,相机地形块以及相机地形块附近的地形块的距离LOD等级为最低级(LOD0),以相机地形块为中心,距离相机地形块距离越远的地形块其距离LOD等级越高。
示例性的,由于虚拟地形中的地形块是均匀分割均匀分布,且距离LOD等级的确定是以一个地形块(相机地形块)为中心呈辐射状确定的。则当相机移动时,同等级的地形块所组成的区域,是随着相机的移动均匀移动的。
步骤203,根据地形块的距离LOD等级确定地形块中的多个面片,得到虚拟地形的第一组面片;地形块中的面片数量与地形块的距离LOD等级成反比。
示例性的,根据各个地形块各自的距离LOD等级将各个地形块均匀划分为多个面片,其中,距离LOD等级低的地形块中面片的数量大于距离LOD等级高的地形块中面片的数量。
将各个地形块按照各自的距离LOD等级划分面片后,可以得到虚拟地形的第一组面片。
示例性的,面片是尺寸小于地形块的方形,即,面片包含了组成面片的数个顶点。地形块中面片的数量越多,则面片的尺寸越小,地形块中面片的数量越少,则面片的尺寸越大。示例性的,面片尺寸越小,则渲染时对该面片处的虚拟地形渲染越细致,面片尺寸越大,则渲染时对该面片处的虚拟地形渲染越粗略。
示例性的,地形块中面片的数量越多,则表示地形块中的顶点数量越多,顶点越多则对此处虚拟地形的刻画能力越强,渲染越细致。地形块中面片的数量越少则表示地形块中的顶点数量越少,顶点越少则对此处虚拟地形的客户端能力越弱,渲染越粗略。
示例性的,如图3所示,给出一种根据距离LOD等级确定地形块的面片划分方式的例子,可以参照上述对图3的解释来将地形块按照各自的LOD等级划分为多个面片。
步骤204,基于第一组面片绘制虚拟地形的地形网格,渲染地形网格得到虚拟地形。
示例性的,第一组面片中的各个面片包含了组成地形网格的顶点信息,根据第一组面片中的顶点信息,绘制各个顶点并连接,形成包含顶点和连接线的地形网格,示例性的,地形网格包括组成虚拟地形的三维模型的数个三角形。对地形网格进行渲染即可得到虚拟地形。
综上所述,本实施例提供的方法,通过将虚拟地形划分为相同尺寸的多个地形块,以相机所在的地形块为中心,呈同心方形环状确定虚拟地形上每个地形块的距离LOD等级,使相同距离LOD等级的地形块所呈的区域与相机所在的地形块呈中心对称,当相机移动时,各个距离LOD等级所呈的区域会同步移动,即,当相机移动一个地形块时,各个距离LOD等级所呈的区域也会对应向相同方向移动一个地形块,地形块的距离LOD等级的随着相机移动的变化是非常规律的,因此,可以准确预测出每个地形块的距离LOD等级随着相机移动的变化结果,便于根据预测的结果控制地形块平滑地从原距离LOD等级对应的模型精细度变化到相机移动后的距离LOD等级对应的模型精细度,减少模型精细度骤然变化带来的视觉冲击,提高对虚拟地形模拟的真实度。
示例性的,给出一种根据地形块与相机地形块的坐标距离确定地形块的距离LOD的示例性实施例。
图6示出了本申请一个示例性实施例提供的虚拟地形的渲染方法的流程图。该方法可以由上述图1中的任一终端上运行的客户端来执行,该客户端是支持虚拟地形渲染的客户端。基于图5所示的方法,步骤202还包括步骤2021至步骤2024。
步骤2021,判断地形块与相机地形块的距离,根据相机地形块的位置将虚拟地形划分为多个区域,根据地形块所属的区域确定该地形块的距离LOD等级。
步骤2022,将以相机地形块为中心的方形区域内的第0级地形块的距离LOD等级确定为0级。
步骤2023,将包围方形区域的第1个方形环状区域内的第1级地形块的距离LOD等级确定为1级。
步骤2024,将包围第i个方形环状区域的第i+1个方形环状区域内的第i+1级地形块的距离LOD等级确定为第i+1级,i是小于n的正整数。
示例性的,地形块呈方形,例如,正方形、矩形、菱形等。示例性的,地形块呈正方形。
示例性的,以相机地形块为中心确定一个方形范围,该方形范围内的地形块属于最低级别的距离LOD等级(0级,即LOD0)。然后以该方形范围为中心设置多层方形环状区域层层包围方形区域,每向外一个方形环状区域其距离LOD等级即增加1级。
示例性的,包围方形区域的方形环状区域是指,假设方形区域是边长为第一边长的第一正方形,则方形环状区域的外围为边长为第二边长的第二正方形,第一正方形与第二正方形呈中心对称,且第二边长大于第一边长,则包围方形区域的方形环状区域为第二正方形减去第一正方形剩下的环形区域。
示例性的,为了达到步骤2021至步骤2023所描述的距离LOD等级确定的效果,给出了一种根据地形块的第一地形块坐标和相机地形块的第二地形块坐标确定地形块的距离LOD等级的示例。
示例性的,第一地形块坐标包括xs坐标和ys坐标,第二地形块坐标包括相机xs坐标和相机ys坐标,n个距离LOD等级对应n-1个依次增大的距离阈值,n为正整数。
示例性的,地形块坐标的xs坐标为该地形块在组成虚拟地形的地形块中的第几列,地形块坐标的ys坐标为该地形块在组成虚拟地形的地形块中的第几行。
示例性的,若距离LOD等级为第i级的地形块组成的区域成为第i级区域,则第i个距离阈值为:第i-1级区域最外围的地形块与相机地形块的xs坐标之差或ys坐标之差,示例性的,第i个距离阈值为:上述的xs坐标之差和ys坐标之差中数值较大的一个。
计算xs坐标与相机xs坐标之差,得到横向距离;计算ys坐标与相机ys坐标之差,得到纵向距离;将横向距离和纵向距离中较大的一个确定为坐标距离;
响应于第0级地形块的坐标距离小于第1个距离阈值,将第0级地形块的距离LOD等级确定为0级;响应于第i级地形块的坐标距离大于第i个距离阈值小于第i+1个距离阈值,将第i级地形块的距离LOD等级确定为i级,i是小于n的正整数;响应于第n-1级地形块的坐标距离大于第n-1个距离阈值,将第n-1级地形块的距离LOD等级确定为n-1级。
例如,对于如图4所示的虚拟地形,假设左上角第一个地形块的坐标为(1,1),则相机地形块302的坐标为(5,5),第1个距离阈值为1,第2个距离阈值为2,第3个距离阈值为3,第四个距离阈值为4。则可以形成如图4所示的,边长为3的正方形第0级区域(距离LOD等级为0级的地形块组成的方形区域),包围在第0级区域外宽度为1的第1级区域(距离LOD等级为1级的地形块组成的方形环状区域),包围在第1级区域外宽度为1的第2级区域(距离LOD等级为2级的地形块组成的方形环状区域),包围在第2级区域外宽度为1的第3级区域(距离LOD等级为3级的地形块组成的方形环状区域)。
示例性的,客户端只有在相机跨越地形块移动时才需要再次计算各个地形块的距离LOD等级,若相机指示在一个地形块内移动,则各个地形块的距离LOD等级不变,也就不需要再计算一次各个地形块的距离LOD等级。
即,响应于相机移动,获取相机移动后所在的移动后相机地形块,响应于移动后相机地形块与相机地形块相等,直接执行步骤204,再次根据新的相机位置和第一组面片(或第二组面片)渲染虚拟地形的地形网络。响应于移动后相机地形块与相机地形块不相等,则重复执行步骤201至步骤203,根据移动后相机地形块位置重新确定各个地形块的距离LOD,重新确定虚拟地形中的面片分布。
综上所述,本实施例提供的方法,根据每个地形块的地形块坐标,以及相机地形块的地形块坐标,以及各个距离LOD等级对应的距离阈值,可以直接算出每个地形块的距离LOD等级,使各个距离LOD等级的地形块以相机地形块为中心向外逐渐增高。
示例性的,如图7给出了两种相同距离LOD等级的地形块组成的虚拟地形,图7中的(1)所有地形块所对应的虚拟地形都为平坦地形,根据坐标距离确定的距离LOD等级可以准确绘制出平坦地形的地形特征,但图7中的(2)中有一个地形块非常陡峭,而图7中的(2)中各个地形的距离LOD等级相同,但显然对于陡峭的地形块需要更细致的渲染才能渲染出陡峭地形的特征,因此,地形的平坦度也会影响地形渲染所需要的细致程度,基于此,本申请还提供了基于地形平坦度的平坦度LOD等级,使用平坦度LOD等级和距离LOD等级相结合的方式,能够更准确地确定虚拟地形中各个地形块渲染所需的细致程度。
图8示出了本申请一个示例性实施例提供的虚拟地形的渲染方法的流程图。该方法可以由上述图1中的任一终端上运行的客户端来执行,该客户端是支持虚拟地形渲染的客户端。基于图5所示的方法,步骤204还包括步骤2041至步骤2043。
步骤2041,根据地形块的平坦度LOD等级和距离LOD等级,确定地形块的综合LOD等级。
示例性的,平坦度LOD等级是构建虚拟地形是就预先根据各个地形块所对应的虚拟地形的陡峭程度预置的LOD等级。即,客户端中预存有虚拟地形中各个地形块的平坦度LOD等级。
示例性的,地形块对应的虚拟地形的地势越平坦,则该地形块的平坦度LOD等级越高;地形块对应的虚拟地形的地势越陡峭,则该地形块的平坦度LOD等级越低。
示例性的,客户端会根据地形块的平坦度LOD等级和距离LOD等级确定出综合LOD等级,使用综合LOD等级来确定各个地形块的面片组成。
示例性的,给出两种根据平坦度LOD等级和距离LOD等级确定综合LOD等级的方法。
示例性的,客户端将地形块的平坦度LOD等级和距离LOD等级中较大的一个确定为综合LOD等级;或,获取距离LOD等级的第一权重和平坦度LOD等级的第二权重,将距离LOD等级与第一权重之积确定为加权距离LOD等级,将平坦度LOD等级与第二权重之积确定为加权平坦度LOD等级,将加权平坦度LOD等级与加权距离LOD等级中较大的一个确定为综合LOD等级。
示例性的,当一个地形块的平坦度LOD等级高于距离LOD等级时,将平坦度LOD等级确定为综合LOD等级,否则将距离LOD等级确定为综合LOD等级。
示例性的,也可以对距离LOD等级和平坦度LOD等级进行加权,根据加权后的平坦度LOD等级和距离LOD等级确定综合LOD等级。示例性的,第一权重的确定可以根据地形块与相机地形块的坐标距离确定。示例性的,第一权重和第二权重也可以根据其他因素来确定,例如,根据虚拟环境中的光照强度、根据虚拟环境的天气因素、根据客户端所控制的主控虚拟角色的状态等信息来确定。
例如,当主控虚拟角色被眩晕,则客户端上显示的虚拟环境画面需要模糊显示,则可以通过设置第一权重和第二权重为2,同时增大地形块的距离LOD等级和平坦度LOD等级,降低对虚拟地形的渲染精细程度。
步骤2042,根据虚拟地形的第一组面片和地形的综合LOD等级,生成第二组面片。
示例性的,客户端可以根据综合LOD等级根据LOD等级对应的地形块中面片的组成情况重新确定出一组面片,得到第二组面片。
示例性的,由于地形块的综合LOD等级只有在平坦度LOD等级高于距离LOD等级时,才会变为平坦度LOD等级,其他地形块的综合LOD等级依旧为距离LOD等级,则可以根据第一组面片来生成第二组面片。
示例性的,将平坦度LOD等级高于距离LOD等级的地形块称为平坦地形块,将平坦度LOD等级等于或小于距离LOD等级的地形块称为崎岖地形块。
则:响应于崎岖地形块的综合LOD等级等于距离LOD等级,将崎岖地形块在第一组面片中对应的面片写入第二组面片;响应于平坦地形块的综合LOD等级大于距离LOD等级,将平坦地形块在第一组面片中对应的第一部分面片去除、第二部分面片进行放大,将放大后的第二部分面片写入第二组面片。
即,当地形块的综合LOD等级等于距离LOD等级时,保持地形块的片面组成不变,直接将第一组面片中该地形块对应的面片写入第二组面片中即可。
当地形块的综合LOD等级大于距离LOD等级时,则需要将该地形块中的片面放大到综合LOD等级所对应的面片。例如,如图3中的(3)所示的地形块,该地形块对应的LOD等级为2级(LOD2),假设该地形块的距离LOD等级为LOD2、平坦度LOD等级为LOD3,则该地形块在第一组面片中的面片组成为图3中的(3)所对应的四个面片,而根据该地形块的综合LOD等级(平坦度LOD等级)LOD3,应该将该地形块的面片组成变成图3中的(4)所示的1个面片,并写入第二组面片中。因此,客户端可以将第一组面面片中该地形块所对应的四个面片中左上角的面片放大两倍,将其他三个面片删除,将放大后的左上角的面片写入第二组面片中,即可以根据该地形块在第一组面片中对应的面片得到该地形块在第二组面片中对应的面片。上述举例为将地形块从LOD2变为LOD3的例子,而将地形块从LOD0变LOD1,从LOD1变LOD2,或,从LOD0变LOD2,都可以参照该方法,即,将每四个面片中,左上角的面片放大将其他三个面片删除。
如此,就可以得到根据地形块的综合LOD等级得到的虚拟地形的第二组面片。
步骤2043,基于第二组面片绘制虚拟地形的地形网格,渲染地形网格得到虚拟地形。
示例性的,可以基于第二组面片进行地形网格的绘制,并进行渲染得到虚拟地形。
示例性的,根据第二组面片和虚拟地形的地形高度图绘制虚拟地形的地形网格;渲染地形网格得到虚拟地形。
地形高度图是大小等于虚拟地形平面大小的图像,其上的每一个像素点的像素值代表了该点地形的高度。根据第二组面片上面片各个顶点的横纵坐标,可以到地形高度图上对应地找到该顶点的高度,根据横纵坐标和高度,即可确定该顶点在三维虚拟环境中的位置,根据各个顶点的位置来绘制虚拟地形的地形网格。
示例性的,如图9所示,给出了一种使用本实施例提供的方法根据综合LOD等级划分地形块中的面片,得到第二组面片,由第二组面片组成的虚拟地形,其中,相机303位于虚拟地形的右上角,根据各个地形块与相机所在地形块的坐标距离,以及各个地形块的虚拟地形的平坦程度,得到地形块的综合LOD等级,依据综合LOD等级对地形块进行片面划分,即可得到如图9所示的效果,在靠近相机的部分地形块LOD等级低,面片划分较为密集,在远离相机的区域LOD等级逐渐减小,且当地形为平坦地形304,还会提高平坦地形的LOD等级,使这部分地形块的面片划分较为疏散。
示例性的,第二组面片的划分,也同样只有在相机从一个地形块移动至另一个地形块时,才需要进行重新计算和划分,若相机只是在一个地形块内移动,则虚拟地形上各个地形块的距离LOD等级不会发生改变,则不需要每一帧画面都计算一次第二组面片。
综上所述,本实施例提供的方法,通过结合地形块的平坦度LOD等级和距离LOD等级,来确定地形块的综合LOD等级,使地形块的综合LOD等级能够更准确地描述地形块渲染所需的精细程度,对于距离相机较近,但地形较为平坦的地形块所对应的虚拟地形,可以降低LOD等级粗略渲染,从而提升虚拟地形的渲染效率。
示例性的,在根据地形块的LOD等级得到虚拟地形的面片后,可以得到每个地形块上各个面片对应的顶点,根据这些顶点就可以直接绘制得到地形网格。但由于相机的移动,一些地形块的LOD等级在上一帧画面中可能是LOD0,下一帧画面中就变成了了LOD1,地形块LOD等级的骤然变化会带来虚拟地形渲染效果上的突变,影响画面的连贯性,因此,为了平滑相机移动过程中一些LOD等级可能产生变化的地形块能够平滑地从一级LOD等级变为另一极LOD等级,翠玉这部分LOD等级可能在下一帧画面中发生变化的地形块,会平滑移动地形块中的部分顶点使这些顶点能够逐渐靠近下一级LOD等级对应的顶点位置移动,使地形块LOD等级的变换连贯,从而维持画面的连贯性。
示例性的,如图10所示,示出了在多帧画面中,一个地形块从一个LOD等级平滑切换到另一个LOD等级时,地形块中的一个面片上的顶点进行平滑移动逐渐从一个LOD等级切换到另一个LOD等级的过程示意图。如图10中的(1)所示,为地形块在一个LOD等级时,一个面片的顶点分布情况,随着相机逐渐移动,盖棉片上的顶点逐渐向下一级LOD等级对应的位置偏移,直至如图10中的(7)所示,变为下一级LOD等级所对应的顶点分布情况。
示例性的,为了实现图10中的平滑切换效果,在根据LOD等级(距离LOD等级或综合LOD等级)将虚拟地形划分为一组面片(第一组面片或第二组面片)后,需要根据相机的位置来更改部分地形块的面片中部分顶点的位置。
图11示出了本申请一个示例性实施例提供的虚拟地形的渲染方法的流程图。该方法可以由上述图1中的任一终端上运行的客户端来执行,该客户端是支持虚拟地形渲染的客户端。基于图8所示的方法,步骤2043之前步骤2042之后还包括步骤401至步骤402。
步骤401,计算地形块的平滑系数,平滑系数用于在相机移动过程中控制虚拟地形中部分面片上的顶点向下一级LOD等级对应的位置平滑移动,LOD等级为距离LOD等级或综合LOD等级。
示例性的,给出一种计算平滑系数的方法:
uint2 SectorId//SectorId为面片所在地形块的地形块坐标;
uint2 CameraSectorId//CameraSectorId为相机地形块的地形块坐标;
float2 CameraInSectorOffset//CameraInSectorOffset为相机距离相机所在地形块的中心点的偏移位置,取值范围为[-1,1];
float2 ToCameraId=CameraSectorId-SectorId-0.5;
float lodMorph=0;//lodMorph为地形块的平滑系数
if(abs(ToCameraId.x)>abs(ToCameraId.y))//如果ToCameraId的x坐标大于y坐标则执行下面中括号中的步骤,否则执行else后面中括号中的步骤;
Figure GDA0003517188300000171
示例性的,对于第i个地形块,将上述的SectorId称为第一地形块坐标(第i个地形块的地形块坐标),上述的CameraSectorId称为第二地形块坐标(相机地形块的地形块坐标),CameraInSectorOffset称为相机偏移距离,ToCameraId称为地形块偏移距离。
其中,相机偏移距离(CameraInSectorOffset)等于相机在世界坐标系(三维虚拟环境中的坐标系)上的二维平面坐标(x1,y1),除以地形块在世界坐标系中的边长L得到坐标(x1/L,y1/L),对x1/L取小数部分乘以2再减1,得到相机偏移距离(CameraInSectorOffset)的x坐标,对y1/L取小数部分乘以2再减1,得到相机偏移距离(CameraInSectorOffset)的y坐标。
则,地形块偏移距离(ToCameraId)等于第二地形块坐标(CameraSectorId)减第一地形块坐标再减0.5。
当地形块偏移距离(ToCameraId)的x坐标大于y坐标时,第i个地形块的第一平滑系数等于相机偏移距离(CameraInSectorOffset)的x坐标乘以sign(地形块偏移距离(ToCameraId)的x坐标),其中,sign(地形块偏移距离(ToCameraId)的x坐标)为取地形块偏移距离(ToCameraId)的x坐标的正负号,当地形块偏移距离(ToCameraId)的x坐标为正数时,sign(地形块偏移距离(ToCameraId)的x坐标)为1,当地形块偏移距离(ToCameraId)的x坐标为负数时,sign(地形块偏移距离(ToCameraId)的x坐标)为-1。
当地形块偏移距离(ToCameraId)的x坐标小于或等于y坐标时,第i个地形块的第一平滑系数等于相机偏移距离(CameraInSectorOffset)的y坐标乘以sign(地形块偏移距离(ToCameraId)的y坐标),其中,sign(地形块偏移距离(ToCameraId)的y坐标)为取地形块偏移距离(ToCameraId)的y坐标的正负号,当地形块偏移距离(ToCameraId)的y坐标为正数时,sign(地形块偏移距离(ToCameraId)的y坐标)为1,当地形块偏移距离(ToCameraId)的y坐标为负数时,sign(地形块偏移距离(ToCameraId)的y坐标)为-1。
然后,求第i个地形块的第二平滑系数,第二平滑系数等于saturate(第一平滑系数*min(lodNext-lodCurrent,1))。其中,saturate为归一化函数,用于将括号内的数值归一化至0到1的范围内。min(lodNext-lodCurrent,1)为取lodNext–lodCurrent和1中较小的一个值,其中,lodNext为第i个地形块在相机地形块远离一个距离时的综合LOD等级,lodCurrent为第i个地形块根据当前帧相机位置确定的综合LOD等级。示例性的,相机地形块原来一个距离时的LOD等级是指,将当前帧第i个地形块与相机地形块的坐标距离加1后,得到的综合LOD等级。例如,当前帧第i个地形块与相机地形块的坐标距离为2,则lodNext为第i个地形块与相机地形块的坐标距离为3时的综合LOD等级。
示例性的,只有位于各级区域边缘的一圈地形块,其lodNext与lodCurrent的值可能不同,因为,位于各个级区域边缘的一圈地形块如果坐标距离加1则该地形块的距离LOD等级将会加1。而位于各个级区域内部的地形块,即使坐标距离加1其距离LOD等级也不会改变,并且各个地形块的平坦度LOD等级是一定的,因此,综合LOD等级也不会改变。
则,上述第二平滑系数即为第i个地形块的平滑系数。
步骤402,根据平滑系数计算第二组面片中,各个面片的顶点的平滑位移后的位置。
示例性的,给出一种计算平滑位移的方法:
Figure GDA0003517188300000191
Figure GDA0003517188300000201
示例性的,对虚拟地形中每一个面片上的每一个顶点重复执行上述步骤,计算每一个顶点平滑位移后的位置,得到经过平滑位移后的第二组面片。
综上所述,本实施例提供的方法,通过对面片上的各个顶点进行平滑位移,使地形块LOD等级可以平滑变换,降低地形块LOD等级切换时产生的突兀感,提高画面的流畅度。
示例性的,在根据地形块的LOD等级得到虚拟地形的面片后,还可以对面片进行可见性剔除,来剔除一些不可见的面片,从而提高虚拟地形的渲染效率。
图12示出了本申请一个示例性实施例提供的虚拟地形的渲染方法的流程图。该方法可以由上述图1中的任一终端上运行的客户端来执行,该客户端是支持虚拟地形渲染的客户端。基于图8所示的方法,步骤2043之前步骤2042之后还包括步骤501。示例性的,步骤501可以在步骤401和步骤402之前执行,也可以在步骤401和步骤402之后执行。示例性的,步骤501在步骤401和步骤402之前执行。
步骤501,对所述第二组面片进行可见性裁剪,所述可见性裁剪包括视锥裁剪和遮挡剔除中的至少一种。
示例性的,可见性裁减包括视锥裁剪和遮挡剔除中的至少一种。
视锥裁剪用于根据相机的视野范围,将位于相机的视野范围外的片面剔除,不进行渲染,以减少渲染工作量。示例性的,视锥裁剪可以采用现有的方法进行,例如,使用平截头体剔除方法进行视锥裁剪。
示例性的,遮挡剔除用于根据虚拟地形中各个点到相机成像面的深度值,来将会被其他面片的模型遮挡的面片剔除。示例性的,遮挡剔除可以采用分层Z缓冲遮挡剔除算法(Hierarchical Z-Buffer Occlusion Culling)。
分层Z缓冲遮挡剔除算法采用了上一帧画面的深度图作为参考。首先根据每个面片中虚拟地形高度的最大值和最小值,构建该面片的包围体,包围体是一个长方体,该长方体的上下底面为虚拟地形的最大值和最小值,长方体的四个侧面为面片的四个边线所在的平面,示例性的,包围体可以包围该面片在虚拟地形上的所有点。然后将包围体投影到相机的成像面上,得到包围体八个顶点的深度值,使用该深度值与上一帧画面的深度图中对应像素点的深度值作比较,若八个点都被遮挡,则将该面片剔除,否则将该面片保留。
示例性的,由于不同面片距离相机成像面的远近不同,包围体的八个点在成像面上投影出的范围大小也不同,分层Z缓冲遮挡剔除算法会根据包围体投影出的大小确定对应级别的上一帧画面的深度图,来进行深度值的比较。因此,需要将上一帧画面的深度图生成不同级别的深度图像。
如图13所示,相关技术中采用Pixel Shader(像素着色器)来生成不同级别的深度图像,Pixel Shader(像素着色器)会生成一个RT(Render to Texture,渲染纹理),在该RT内将上一帧画面的原深度图601中每四个像素点取其中的最远值,将原深度图601缩小为第一级别深度图602,然后再创建一个RT,将第一级别深度图602在RT内缩小为第二级别深度图603,然后再创建一个RT,继续逐渐缩小深度图,得到多级深度图。
而在移动终端的GPU中使用Pixel Shader(像素着色器)由于需要来回创建多个RT,其运行速度过于缓慢。因为移动GPU特有的渲染架构TBR(Tile-Based(Deferred)Rendering,基于分片延迟渲染),使得切换RT会引起片上缓存的写入写出,原算法的频繁切换RT会导致渲染耗时增加、耗电、发热一系列问题。
因此,本实施例提供了一种方法:调用GPU中的Compute Shader(计算着色器)生成地形画面深度图的多级深度图;根据多级深度图对第二组面片进行遮挡剔除。使用ComputeShader缩小上一帧画面的地形画面深度图,将结果同时存入组内共享缓冲器(GroupSharedBiffrt)和Hiz深度缓冲器(HizDepthBuffer),不需要频换切换RT,只需要从小组分享缓冲器中读取上一级别的深度图就可以继续缩小得到多级深度图,只需要调用两个Dispatch(执行)就可以完成这一过程。
如图14所示,Dispatch1用16*16个线程组,每组128个线程,先读入原始深度图(256像素*128像素),保存到Hiz深度缓冲器805,同时这些数据写入组内共享缓冲器806,然后做一次组内同步。再从组内共享缓冲器806读出上一级深度图数据,每4个像素点取最远值后写入Hiz深度缓冲器805,同样数据再写入组内共享缓冲器806,以此类推,一直得到32像素*16像素大小的深度图结束。Dispatch2只用一个线程组,一组128个线程,和上一个Dispatch1类似,唯一不同是一开始是从Hiz深度缓冲器805里读取32像素*16像素大小的深度图数据,一直处理到最后一级深度图结束。经实验该方法在移动终端上Dispatch1消耗0.18毫秒,Dispatch1消耗0.03毫秒。
综上所述,本实施例提供的方法,通过采用GPU中的ComputeShader生成地形画面深度图的多级深度图,减少了移动终端GPU得到多级深度图的时间,提高GPU得到多级深度图的效率。
示例性的,给出一种在GPU上运行本申请提供的虚拟地形的渲染方法的示例性实施例。
如图15所示,在需要进行虚拟地形渲染时,CPU801将虚拟地形数据输入GPU中,GPU调用ComputeShader执行Dispatch1和Dispatch2,将Dispatch2的输出数据输入顶点着色器(Vertex Shader,VS)802来渲染虚拟地形。
其中,Dispatch1的任务是,读取解析输入数据,结合地形块的距离LOD等级和平坦度LOD等级,得出地形块的综合LOD等级。
Dispatch1输入数据包括:
PatchCamList(面片摄像机列表):是在初始化虚拟地形时一次生成的ConstBuffer(常数缓冲器)。
Patch(面片)指的一个有5*5个顶点,4*4个格子的mesh(网格)。
示例性的,一个地形块是32*32米;
LOD0的地形块包含8*8个Patch,每个Patch覆盖4*4米;
LOD1的地形块包含4*4个Patch,每个Patch覆盖8*8米;
LOD2的地形块包含2*2个Patch,每个Patch覆盖16*16米;
LOD3的地形块包含1个Patch,覆盖32*32米;
LOD等级越高的地形块,网格密度越稀疏。
相机周围的地形块的LOD等级是恒定的,因此相机周围的Patch的位置和相邻Patch的LOD等级的信息是恒定的,这些信息一次性计算出来Encode(编码)成一个32位DWORD(双字节值),存入PatchCamList(面片摄像机列表)中。
Patch信息组成:
SectorIdToCamXY(地形块与相机位置XY):该Patch所在的地形块距离相机所在地形块的位置(距离),x、y方向各占7位,即,7位二进制数来存储x坐标(最多127个数),7位二进制数来存储y坐标。
PatchIdInSectorXY(Patch在地形块的位置XY):该Patch在其所在的地形块的位置,x、y方向坐标的存储各占3位二进制数。
DistanceLOD(距离LOD等级):
该Patch所在的地形块按距离相机远近的距离LOD等级,其存储占2位。
如果相机远离一个Sector(地形块),该Patch的远离距离LOD等级(lodNext),其存储占2位。远离距离LOD等级在做地形块的LOD等级平滑切换时会用到,只有每级区域(距离LOD等级)的最外围一圈的地形块,距离LOD等级和远离距离LOD等级会不同。
NeighborDistanceLOD(相邻Patch的距离LOD等级):与该Patch相邻的上下左右4个Patch的距离LOD等级,其存储每个Patch占2位。
SectorRoughnessList(地形块平坦度列表):在制作地形资源时生成的地形数据,保存在磁盘中,运行时加载到ConstBuffer(常数缓冲器),保存了每个地形块的平坦度LOD等级,和上下左右4个相邻地形块的平坦度LOD等级。
SectorVTIndirectTexRangeMap(地形块贴图寻址信息):由CPU写入数据的Buffer,保存了该地形块的贴图寻址信息,相机跨越Sector时,由CPU更新一次数据。
PatchBoundList(Patch包围盒列表):在制作地形资源时生成的地形数据,保存在磁盘中,运行时加载的constbuffer(常数缓冲器),保存了每个地形块上的每级Patch的最大最小高度,朝向信息。每个地形块根据当前帧的LOD等级,都可能呈现或8*8,或4*4或2*2,或仅1个patch的状态,这些可能的patch信息都要存储。举例:一个1024米*1024米的地形,分为32*32个Sector,PatchBoundList会被存储为256*256带4级mipmap(纹理映射)的贴图。
Dispatch1输出数据:
输出数据写入一个ComputeBuffer,PatchToCullList(用于剔除的Patch列表)。
Dispatch1的任务是,读取解析输入数据,结合地形块的距离LOD等级和平坦度LOD等级,得出地形块的综合LOD等级,根据综合LOD等级,决定一个Patch是否写入PatchToCullList(用于剔除的Patch列表,即,第二组面片),写入的信息如下:
struct PatchToCull
{
uint data0;//PatchIdX 9bit|PatchIdY 9bit|Cone 8bit
uint data1;//SectorVTIndirectTexRange 19bit|LOD 22|NeighborLODlod2222
uint data2;//MinHeight 8bit|MaxHeight 8bit|NormalX 8bit|NormalZ 8bit
};
PatchIdXY:Patch在整个虚拟地形上的位置
SectorVTIndirectTexRange:Patch所在地形块的贴图寻址信息
LOD://综合LOD等级
﹒该Patch所在的地形块的综合LOD等级,占2位。
﹒该Patch所在地形块如果离相机更远了一个sector(地形块)时的远离综合LOD等级,占2位。
NeighborLOD:与该Patch相邻的上下左右4个Patch的综合LOD等级,各占2位。
MinHeight MaxHeight:Patch对应的虚拟地形的最小最大高度
NormalX,NormalZ,Cone:定义了一个绑定圆锥,包含Patch上所有的面法线,NormalX为圆锥法线向量的x方向分量,NormalZ为圆锥法线向量的z方向分量,由于法线向量为单位向量(长度为1),根据NormalX和NormalZ可以求出法线向量在y方向的分量,Cone为绑定圆锥的底面半径。示例性的,如图16所示,给出了一种绑定圆锥803的示意图,绑定圆锥803内包含面片所有面的面法线。
Dispatch2的任务是,对Dispatch1的输出做视锥裁剪、遮挡剔除。
示例性的,对Dispatch1的输出做视锥裁剪、遮挡剔除后可以得到如图17所示的虚拟地形的地形网格804。
Dispatch2输入数据:
Dispatch1的输出数据PatchToCullList(要剔除的Patch列表)。
HizDepthBuffer(HIZ深度缓冲器):分层的深度信息,用于进行遮挡剔除。
Dispatch2输出数据:输出数据写入一个Computebuffer,PatchToRenderList(要渲染的Patch列表)。
Dispatch2的任务是,对Dispatch1的输出做视锥遮挡剔除,将可见的Patch的IndirectDraw(间接绘制)阶段需要的信息写入PatchToRenderList(要渲染的Patch列表).
struct PatchRender
{
uint data0;//PosX11 PosY11,Morph 10,
uint data1;//sectorVTIndirectTexRange 19,lOD.xy 22,NeighborLOD2222
};
PosXY:Patch的位置信息,XY方向各占11bit;
Morph(变形):LOD等级的平滑切换信息,包括面片上各个顶点进行平滑位移后的坐标;
SectorVTIndirectTexRange:Patch所在地形块的贴图寻址信息
LOD:
﹒该Patch所在的地形块的综合LOD等级,占2位。
﹒该Patch所在地形块如果离相机更远了一个sector时的远离综合LOD等级,占2位。
NeighborLOD:与该Patch相邻的上下左右4个Patch的综合LOD等级,各占2位。
Computeshader(计算着色器)执行Dispatch1和Dispatch2后,使用Computeshader的输出结果,调用一次DrawMeshInstancedIndirect(间接绘制网格实例),一个Instance(实例)就是一个Patch,即5*5个顶点的方形mesh。
vertexshader(顶点着色引擎)中解析PatchToRenderList(要渲染的Patch列表),得到Patch的XZ位置和XZ方向缩放,XZ位置直接从PatchRender(Patch渲染)中读出,缩放可由PatchRender中的综合LOD等级计算得出。读取地形高度图,得到Patch的Y方形位置,即组成整个地形。示例性的,处理接缝的策略为,相邻两个Patch,去掉LOD级别低的(网格更密的)patch边缘的一些顶点。PatchRender信息中包含该Patch前后左右四个邻居的LOD值,和本Patch的LOD值,就可以确定要删除前后左右哪边边缘的顶点。
以下为本申请的装置实施例,对于装置实施例中未详细描述的细节,可参考上述方法实施例。
图18是本申请一个示例性实施例提供的虚拟地形的渲染装置的框图。所述虚拟地形包括至少一个地形块,所述装置包括:
获取模块701,用于获取所述虚拟地形中所述地形块的第一地形块坐标和相机地形块的第二地形块坐标,所述相机地形块为相机所在的地形块;
距离LOD模块702于根据所述第一地形块坐标与所述第二地形块坐标之间的坐标距离,确定所述地形块的距离LOD等级;在所述虚拟地形中所述地形块的所述距离LOD等级以所述相机地形块为中心呈同心方形环状分布,由所述中心向四周逐级递增;
第一面片模块703根据所述地形块的所述距离LOD等级确定所述地形块中的多个面片,得到所述虚拟地形的第一组面片;所述地形块中的所述面片数量与所述地形块的距离LOD等级成反比;
渲染模块704基于所述第一组面片绘制所述虚拟地形的地形网格,渲染所述地形网格得到所述虚拟地形。
在一个可选的实施例中,所述地形块为方形地形块,所述距离LOD等级包括n个等级;
所述距离LOD模块702将以所述相机地形块为中心的方形区域内的第0级地形块的距离LOD等级确定为0级;
所述距离LOD模块702将包围所述方形区域的第1个方形环状区域内的第1级地形块的距离LOD等级确定为1级;
所述距离LOD模块702将包围第i个方形环状区域的第i+1个方形环状区域内的第i+1级地形块的距离LOD等级确定为第i+1级,所述i是小于n的正整数。
在一个可选的实施例中,所述第一地形块坐标包括xs坐标和ys坐标,所述第二地形块坐标包括相机xs坐标和相机ys坐标,所述n个距离LOD等级对应n-1个依次增大的距离阈值,n为正整数;
所述距离LOD模块702计算所述xs坐标与所述相机xs坐标之差,得到横向距离;计算所述ys坐标与所述相机ys坐标之差,得到纵向距离;
所述距离LOD模块702将所述横向距离和所述纵向距离中较大的一个确定为所述坐标距离;
所述距离LOD模块702响应于所述第0级地形块的所述坐标距离小于第1个距离阈值,将所述第0级地形块的所述距离LOD等级确定为所述0级;
所述距离LOD模块702响应于第i级地形块的所述坐标距离大于第i个距离阈值小于第i+1个距离阈值,将所述第i级地形块的所述距离LOD等级确定为i级,所述i是小于n的正整数;
所述距离LOD模块702响应于第n-1级地形块的所述坐标距离大于第n-1个距离阈值,将所述第n-1级地形块的所述距离LOD等级确定为n-1级。
在一个可选的实施例中,所述装置还包括:
综合LOD模块705根据所述地形块的所述平坦度LOD等级和所述距离LOD等级,确定所述地形块的综合LOD等级;
第二面片模块706根据所述虚拟地形的所述第一组面片和所述地形的所述综合LOD等级,生成第二组面片;
所述渲染模块704基于所述第二组面片绘制所述虚拟地形的所述地形网格,渲染所述地形网格得到所述虚拟地形。
在一个可选的实施例中,所述综合LOD模块705将所述地形块的所述平坦度LOD等级和所述距离LOD等级中较大的一个确定为所述综合LOD等级;
或,
所述综合LOD模块705获取所述距离LOD等级的第一权重和所述平坦度LOD等级的第二权重,将所述距离LOD等级与所述第一权重之积确定为加权距离LOD等级,将所述平坦度LOD等级与所述第二权重之积确定为加权平坦度LOD等级,将所述加权平坦度LOD等级与所述加权距离LOD等级中较大的一个确定为所述综合LOD等级。
在一个可选的实施例中,第二面片模块706响应于崎岖地形块的所述综合LOD等级等于所述距离LOD等级,将所述崎岖地形块在所述第一组面片中对应的所述面片写入所述第二组面片;
第二面片模块706响应于平坦地形块的所述综合LOD等级大于所述距离LOD等级,将所述平坦地形块在所述第一组面片中对应的第一部分面片去除、第二部分面片进行放大,将放大后的所述第二部分面片写入所述第二组面片。
在一个可选的实施例中,所述装置还包括:
可见性剪裁模块707对所述第二组面片进行可见性裁剪,所述可见性裁剪包括视锥裁剪和遮挡剔除中的至少一种。
在一个可选的实施例中,所述装置还包括:
深度图生成模块708用图形处理器GPU中的计算着色器Compute Shader生成地形画面深度图的多级深度图;
所述可见性剪裁模块707根据所述多级深度图对所述第二组面片进行所述遮挡剔除。
在一个可选的实施例中,所述装置还包括:
平滑系数计算模块709计算所述地形块的平滑系数,所述平滑系数用于在所述相机移动过程中控制所述虚拟地形中部分面片上的顶点向下一级LOD等级对应的位置平滑移动,所述LOD等级为所述距离LOD等级或综合LOD等级;
平滑位移计算模块710根据所述平滑系数计算所述第二组面片中,各个面片的顶点的平滑位移后的位置。
在一个可选的实施例中,所述装置还包括:
顶点着色模块711根据所述第二组面片和所述虚拟地形的地形高度图绘制所述虚拟地形的所述地形网格;
渲染模块704渲染所述地形网格得到所述虚拟地形。
需要说明的是:上述实施例提供的虚拟地形的渲染装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的虚拟地形的渲染装置与虚拟地形的渲染方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本申请还提供了一种终端,该终端包括处理器和存储器,存储器中存储有至少一条指令,至少一条指令由处理器加载并执行以实现上述各个方法实施例提供的虚拟地形的渲染方法。需要说明的是,该终端可以是如下图19所提供的终端。
图19出了本申请一个示例性实施例提供的终端1700的结构框图。该终端1700可以是:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio LayerIV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端1700还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端1700包括有:处理器1701和存储器1702。
处理器1701可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1701可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1701也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU;协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1701可以在集成GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1701还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1702可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1702还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1702中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1701所执行以实现本申请中方法实施例提供的虚拟地形的渲染方法。
在一些实施例中,终端1700还可选包括有:外围设备接口1703和至少一个外围设备。处理器1701、存储器1702和外围设备接口1703之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口1703相连。具体地,外围设备包括:射频电路1704、显示屏1705、摄像头组件1706、音频电路1707和电源1708中的至少一种。
外围设备接口1703可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器1701和存储器1702。在一些实施例中,处理器1701、存储器1702和外围设备接口1703被集成在同一芯片或电路板上;在一些其他实施例中,处理器1701、存储器1702和外围设备接口1703中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路1704用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路1704通过电磁信号与通信网络以及其他通信设备进行通信。射频电路1704将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路1704包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路1704可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路1704还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏1705用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏1705是触摸显示屏时,显示屏1705还具有采集在显示屏1705的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器1701进行处理。此时,显示屏1705还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏1705可以为一个,设置终端1700的前面板;在另一些实施例中,显示屏1705可以为至少两个,分别设置在终端1700的不同表面或呈折叠设计;在再一些实施例中,显示屏1705可以是柔性显示屏,设置在终端1700的弯曲表面上或折叠面上。甚至,显示屏1705还可以设置成非矩形的不规则图形,也即异形屏。显示屏1705可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件1706用于采集图像或视频。可选地,摄像头组件1706包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件1706还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路1707可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器1701进行处理,或者输入至射频电路1704以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端1700的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器1701或射频电路1704的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路1707还可以包括耳机插孔。
电源1708用于为终端1700中的各个组件进行供电。电源1708可以是交流电、直流电、一次性电池或可充电电池。当电源1708包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端1700还包括有一个或多个传感器1710。该一个或多个传感器1710包括但不限于:加速度传感器1711、陀螺仪传感器1712、压力传感器1713、光学传感器1714以及接近传感器1715。
加速度传感器1711可以检测以终端1700建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器1711可以用于检测重力加速度在三个坐标轴上的分量。处理器1701可以根据加速度传感器1711采集的重力加速度信号,控制显示屏1705以横向视图或纵向视图进行用户界面的显示。加速度传感器1711还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器1712可以检测终端1700的机体方向及转动角度,陀螺仪传感器1712可以与加速度传感器1711协同采集用户对终端1700的3D动作。处理器1701根据陀螺仪传感器1712采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器1713可以设置在终端1700的侧边框和/或显示屏1705的下层。当压力传感器1713设置在终端1700的侧边框时,可以检测用户对终端1700的握持信号,由处理器1701根据压力传感器1713采集的握持信号进行左右手识别或快捷操作。当压力传感器1713设置在显示屏1705的下层时,由处理器1701根据用户对显示屏1705的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
光学传感器1714用于采集环境光强度。在一个实施例中,处理器1701可以根据光学传感器1714采集的环境光强度,控制、显示屏1705的显示亮度。具体地,当环境光强度较高时,调高、显示屏1705的显示亮度;当环境光强度较低时,调低、显示屏1705的显示亮度。在另一个实施例中,处理器1701还可以根据光学传感器1714采集的环境光强度,动态调整摄像头组件1706的拍摄参数。
接近传感器1715,也称距离传感器,通常设置在终端1700的前面板。接近传感器1715用于采集用户与终端1700的正面之间的距离。在一个实施例中,当接近传感器1715检测到用户与终端1700的正面之间的距离逐渐变小时,由处理器1701控制、显示屏1705从亮屏状态切换为息屏状态;当接近传感器1715检测到用户与终端1700的正面之间的距离逐渐变大时,由处理器1701控制、显示屏1705从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图19中示出的结构并不构成对终端1700的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序包含用于进行本申请实施例提供的虚拟地形的渲染方法。
本申请提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现上述各个方法实施例提供的虚拟地形的渲染方法。
本申请还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述可选实现方式中提供的虚拟地形的渲染方法。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (13)

1.一种虚拟地形的渲染方法,其特征在于,所述虚拟地形包括至少一个尺寸相等的地形块,所述方法包括:
获取所述虚拟地形中所述地形块的第一地形块坐标和相机地形块的第二地形块坐标,所述相机地形块为相机所在的地形块;
根据所述第一地形块坐标与所述第二地形块坐标之间的坐标距离,确定所述地形块的距离LOD等级;在所述虚拟地形中所述地形块的所述距离LOD等级以所述相机地形块为中心呈同心方形环状分布,由所述中心向四周逐级递增;
根据所述地形块的所述距离LOD等级确定所述地形块中的多个面片,得到所述虚拟地形的第一组面片;所述地形块中的所述面片数量与所述地形块的距离LOD等级成反比;
基于所述第一组面片绘制所述虚拟地形的地形网格,渲染所述地形网格得到所述虚拟地形。
2.根据权利要求1所述的方法,其特征在于,所述地形块为方形地形块,所述距离LOD等级包括n个等级;
所述根据所述第一地形块坐标与所述第二地形块坐标之间的坐标距离,确定所述地形块的距离LOD等级,包括:
将以所述相机地形块为中心的方形区域内的第0级地形块的距离LOD等级确定为0级;
将包围所述方形区域的第1个方形环状区域内的第1级地形块的距离LOD等级确定为1级;
将包围第i个方形环状区域的第i+1个方形环状区域内的第i+1级地形块的距离LOD等级确定为第i+1级,所述i是小于n的正整数。
3.根据权利要求2所述的方法,其特征在于,所述第一地形块坐标包括xs坐标和ys坐标,所述第二地形块坐标包括相机xs坐标和相机ys坐标,n个所述距离LOD等级对应n-1个依次增大的距离阈值,n为正整数;所述方法还包括:
计算所述xs坐标与所述相机xs坐标之差,得到横向距离;计算所述ys坐标与所述相机ys坐标之差,得到纵向距离;
将所述横向距离和所述纵向距离中较大的一个确定为所述坐标距离;
所述将以所述相机地形块为中心的方形区域内的第0级地形块的所述距离LOD等级确定为0级,包括:
响应于所述第0级地形块的所述坐标距离小于第1个距离阈值,将所述第0级地形块的所述距离LOD等级确定为所述0级;
所述将包围所述方形区域的第1个方形环状区域内的第1级地形块的所述距离LOD等级确定为1级;将包围第i个方形环状区域的第i+1个方形环状区域内的第i+1级地形块的所述距离LOD等级确定为第i+1级,包括:
响应于第i级地形块的所述坐标距离大于第i个距离阈值小于第i+1个距离阈值,将所述第i级地形块的所述距离LOD等级确定为i级,所述i是小于n的正整数;
响应于第n-1级地形块的所述坐标距离大于第n-1个距离阈值,将所述第n-1级地形块的所述距离LOD等级确定为n-1级。
4.根据权利要求1至3任一所述的方法,其特征在于,所述地形块还对应有平坦度LOD等级;所述基于所述第一组面片绘制所述虚拟地形的地形网格,渲染所述地形网格得到所述虚拟地形,包括:
根据所述地形块的所述平坦度LOD等级和所述距离LOD等级,确定所述地形块的综合LOD等级;
根据所述虚拟地形的所述第一组面片和所述地形的所述综合LOD等级,生成第二组面片;
基于所述第二组面片绘制所述虚拟地形的所述地形网格,渲染所述地形网格得到所述虚拟地形。
5.根据权利要求4所述的方法,其特征在于,所述根据所述地形块的所述平坦度LOD等级和所述距离LOD等级,确定所述地形块的综合LOD等级,包括:
将所述地形块的所述平坦度LOD等级和所述距离LOD等级中较大的一个确定为所述综合LOD等级;
或,
获取所述距离LOD等级的第一权重和所述平坦度LOD等级的第二权重,将所述距离LOD等级与所述第一权重之积确定为加权距离LOD等级,将所述平坦度LOD等级与所述第二权重之积确定为加权平坦度LOD等级,将所述加权平坦度LOD等级与所述加权距离LOD等级中较大的一个确定为所述综合LOD等级。
6.根据权利要求4所述的方法,其特征在于,所述根据所述虚拟地形的所述第一组面片和所述地形的所述综合LOD等级,生成第二组面片,包括:
响应于崎岖地形块的所述综合LOD等级等于所述距离LOD等级,将所述崎岖地形块在所述第一组面片中对应的所述面片写入所述第二组面片;
响应于平坦地形块的所述综合LOD等级大于所述距离LOD等级,将所述平坦地形块在所述第一组面片中对应的第一部分面片去除、第二部分面片进行放大,将放大后的所述第二部分面片写入所述第二组面片。
7.根据权利要求4所述的方法,其特征在于,所述基于所述第二组面片绘制所述虚拟地形的所述地形网格之前,还包括:
对所述第二组面片进行可见性裁剪,所述可见性裁剪包括视锥裁剪和遮挡剔除中的至少一种。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
调用图形处理器GPU中的计算着色器Compute Shader生成地形画面深度图的多级深度图;
所述对所述第二组面片进行可见性裁剪,包括:
根据所述多级深度图对所述第二组面片进行所述遮挡剔除。
9.根据权利要求4所述的方法,其特征在于,所述基于所述第二组面片绘制所述虚拟地形的所述地形网格之前,还包括:
计算所述地形块的平滑系数,所述平滑系数用于在所述相机移动过程中控制所述虚拟地形中部分面片上的顶点向下一级LOD等级对应的位置平滑移动,所述LOD等级为所述距离LOD等级或综合LOD等级;
根据所述平滑系数计算所述第二组面片中,各个面片的顶点的平滑位移后的位置。
10.根据权利要求4所述的方法,其特征在于,所述基于所述第二组面片绘制所述虚拟地形的所述地形网格,渲染所述地形网格得到所述虚拟地形,包括:
根据所述第二组面片和所述虚拟地形的地形高度图绘制所述虚拟地形的所述地形网格;
渲染所述地形网格得到所述虚拟地形。
11.一种虚拟地形的渲染装置,其特征在于,所述虚拟地形包括至少一个尺寸相等的地形块,所述装置包括:
获取模块,用于获取所述虚拟地形中所述地形块的第一地形块坐标和相机地形块的第二地形块坐标,所述相机地形块为相机所在的地形块;
距离LOD模块,用于根据所述第一地形块坐标与所述第二地形块坐标之间的坐标距离,确定所述地形块的距离LOD等级;在所述虚拟地形中所述地形块的所述距离LOD等级以所述相机地形块为中心呈同心方形环状分布,由所述中心向四周逐级递增;
第一面片模块,用于根据所述地形块的所述距离LOD等级确定所述地形块中的多个面片,得到所述虚拟地形的第一组面片;所述地形块中的所述面片数量与所述地形块的距离LOD等级成反比;
渲染模块,用于基于所述第一组面片绘制所述虚拟地形的地形网格,渲染所述地形网格得到所述虚拟地形。
12.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至10任一所述的虚拟地形的渲染方法。
13.一种计算机可读存储介质,其特征在于,所述可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至10任一所述的虚拟地形的渲染方法。
CN202011276401.1A 2020-11-16 2020-11-16 虚拟地形的渲染方法、装置、设备及介质 Active CN112245926B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011276401.1A CN112245926B (zh) 2020-11-16 2020-11-16 虚拟地形的渲染方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011276401.1A CN112245926B (zh) 2020-11-16 2020-11-16 虚拟地形的渲染方法、装置、设备及介质

Publications (2)

Publication Number Publication Date
CN112245926A CN112245926A (zh) 2021-01-22
CN112245926B true CN112245926B (zh) 2022-05-17

Family

ID=74266026

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011276401.1A Active CN112245926B (zh) 2020-11-16 2020-11-16 虚拟地形的渲染方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN112245926B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113096227B (zh) * 2021-04-01 2023-06-13 网易(杭州)网络有限公司 亮片的显示方法和装置
CN113398595B (zh) * 2021-06-30 2023-10-13 上海完美时空软件有限公司 场景资源的更新方法及装置、存储介质、电子装置
CN113426131B (zh) * 2021-07-02 2023-06-30 腾讯科技(成都)有限公司 虚拟场景的画面生成方法、装置、计算机设备及存储介质
CN114344894B (zh) * 2022-03-18 2022-06-03 腾讯科技(深圳)有限公司 场景元素处理方法、装置、设备和介质
CN115294251A (zh) * 2022-06-13 2022-11-04 无人智境(北京)技术有限公司 一种海量集装箱批量渲染方法和设备

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8665266B2 (en) * 2010-06-23 2014-03-04 The United States Of America, As Represented By The Secretary Of The Navy Global visualization process terrain database builder
CN104050708A (zh) * 2014-06-09 2014-09-17 无锡梵天信息技术股份有限公司 一种3d游戏引擎lod系统的实现方法
US9928643B2 (en) * 2015-09-28 2018-03-27 Douglas Rogers Hierarchical continuous level of detail for three-dimensional meshes
US9672656B1 (en) * 2015-12-16 2017-06-06 Google Inc. Variable level-of-detail map rendering
GB2546286B (en) * 2016-01-13 2020-02-12 Sony Interactive Entertainment Inc Apparatus and method of image rendering
CN107945273B (zh) * 2017-12-19 2022-03-22 网易(杭州)网络有限公司 地形网格的处理方法和装置、存储介质及终端
CN108986212B (zh) * 2018-06-21 2022-05-13 东南大学 一种基于裂缝消除的三维虚拟地形lod模型的生成方法
CN109993823B (zh) * 2019-04-11 2022-11-25 腾讯科技(深圳)有限公司 阴影渲染方法、装置、终端及存储介质
CN109949693B (zh) * 2019-04-17 2021-12-10 珠海金山网络游戏科技有限公司 一种地图绘制方法、装置、计算设备及存储介质

Also Published As

Publication number Publication date
CN112245926A (zh) 2021-01-22

Similar Documents

Publication Publication Date Title
CN112245926B (zh) 虚拟地形的渲染方法、装置、设备及介质
US20210225067A1 (en) Game screen rendering method and apparatus, terminal, and storage medium
CN109754454B (zh) 物体模型的渲染方法、装置、存储介质及设备
CN112933599B (zh) 三维模型渲染方法、装置、设备及存储介质
CN110033503B (zh) 动画显示方法、装置、计算机设备及存储介质
CN109615686B (zh) 潜在可视集合的确定方法、装置、设备及存储介质
CN111738914B (zh) 图像处理方法、装置、计算机设备及存储介质
CN110853128B (zh) 虚拟物体显示方法、装置、计算机设备及存储介质
CN112215932B (zh) 粒子动画处理方法、装置、存储介质及计算机设备
CN110827391A (zh) 图像渲染方法、装置、设备及存储介质
CN112907716B (zh) 虚拟环境中的云朵渲染方法、装置、设备及存储介质
CN112884874A (zh) 在虚拟模型上贴花的方法、装置、设备及介质
CN111445563B (zh) 一种图像生成的方法以及相关装置
CN111325822B (zh) 热点图的显示方法、装置、设备及可读存储介质
CN110517346B (zh) 虚拟环境界面的展示方法、装置、计算机设备及存储介质
CN112884873B (zh) 虚拟环境中虚拟物体的渲染方法、装置、设备及介质
CN106683155A (zh) 一种三维模型综合动态调度方法
CN116672706B (zh) 光照渲染方法、装置、终端和存储介质
CN112950753B (zh) 虚拟植物显示方法、装置、设备及存储介质
CN111068323B (zh) 智能速度检测方法、装置、计算机设备及存储介质
CN112306332A (zh) 确定选中目标的方法、装置、设备及存储介质
CN113018865B (zh) 攀爬线生成方法、装置、计算机设备及存储介质
CN115501590A (zh) 显示方法、装置、电子设备和存储介质
CN112383719B (zh) 图像亮度的调整方法、装置、设备及可读存储介质
CN114299201A (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40038148

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant