CN114529658A - 一种图形渲染方法及其相关设备 - Google Patents

一种图形渲染方法及其相关设备 Download PDF

Info

Publication number
CN114529658A
CN114529658A CN202011192352.3A CN202011192352A CN114529658A CN 114529658 A CN114529658 A CN 114529658A CN 202011192352 A CN202011192352 A CN 202011192352A CN 114529658 A CN114529658 A CN 114529658A
Authority
CN
China
Prior art keywords
rendered
vertexes
gpu
vertices
vertex data
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.)
Pending
Application number
CN202011192352.3A
Other languages
English (en)
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202011192352.3A priority Critical patent/CN114529658A/zh
Priority to PCT/CN2021/127476 priority patent/WO2022089592A1/zh
Priority to EP21885318.2A priority patent/EP4231242A4/en
Publication of CN114529658A publication Critical patent/CN114529658A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/30Clipping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/08Bandwidth reduction

Landscapes

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

Abstract

本申请实施例提供了一种图形渲染方法,所述方法包括:获取N个待渲染顶点的顶点数据;若所述GPU的负载量大于预设值,则根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;以及,将所述M个待渲染顶点的顶点数据传递至到所述GPU,以便所述GPU进行图形渲染。本申请在GPU的负载量较大的情况下,通过将在用户视角范围内不可见的顶点进行剔除,降低了GPU侧需要进行渲染处理的顶点数量,从而降低了GPU的负载。

Description

一种图形渲染方法及其相关设备
技术领域
本申请涉及图像处理技术领域,并且更具体地,涉及一种图形渲染方法、装置和计算机可读存储介质。
背景技术
图形处理器(graphics processing unit,GPU)是一种专门用于图像运算的微处理器,常被用于进行图形渲染。
传统方案在进行图形渲染时,一般是由GPU来执行图像渲染的整个过程。但是,在GPU的负载量过大的情况下,例如,图形渲染的运算量较大(如重度图形显示的情况)或者GPU需要处理的其它运算较多(如GPU在进行图形渲染的同时还参与了大型科学计算)时,采用传统方案进行图形渲染方法会导致GPU的负载过高,进而影响GPU进行图像渲染时的性能。
发明内容
本申请提供一种图形渲染方法、装置和计算机可读存储介质,以减轻GPU进行图形渲染时的负载。
第一方面,本申请提供了一种图形渲染方法,所述方法应用于终端设备,所述终端设备包括图形处理器GPU,所述方法包括:获取N个待渲染顶点的顶点数据;本申请实施例中,终端设备中的CPU可以获取多个第一绘制命令draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据,待渲染顶点的顶点数据可以包括但不限于顶点位置、法线、UV坐标、索引等;其中,draw call指令是指图形程序接口指令,draw call指令的数目与跨平台的图形程序接口的图形描绘次数相同,draw call指令具体可以包括但不限于glDrawArrays、glDrawElements等指令。
若所述GPU的负载量大于预设值,则根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;CPU可以首先判断当前GPU的负载量,其中,所述GPU的负载量可以与如下的至少一种有关:所述GPU渲染一帧图像时所需要处理的绘制命令drawcall的数量、所述GPU渲染一帧图像时所需要处理的待渲染顶点的数量、所述GPU渲染一帧图像时所需要处理的待渲染纹理的数量以及所述GPU的频点占用。本申请实施例中,待渲染顶点的顶点数据可以是绘制一次图形所需要的全部顶点数据或者部分顶点数据。该待渲染顶点的顶点数据除了包含用户视角范围内的顶点数据,还可以包含用户视角范围之外的顶点数据。CPU对待渲染顶点的顶点数据进行处理,得到用户视角范围内的顶点数据,相当于是将待处理顶点数据中用户视角范围之外的顶点数据去除掉,从而得到位于用户视角范围内的顶点数据。
应理解,用户视角范围内的顶点数据可以是用户视角范围内可见的物体图像的顶点位置信息,通过对用户视角范围内的顶点数据的处理,能够最终得到用户视角范围内可见的物体图像。
将所述M个待渲染顶点的顶点数据传递至到所述GPU,以便所述GPU进行图形渲染。
本申请实施例中,CPU可以根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据,并将所述多个第二draw call传递至到所述GPU。
在完成了顶点的裁剪之后,可以对裁剪后顶点的顶点数据进行更新。具体地,在裁剪完成之后,可以更新对应的顶点(vertex)数据和索引(indix)数据,并把这些数据作为draw call指令的数据输入,送入GPU的渲染管线(pipeline)。
通过上述方法,在GPU的负载量较大的情况下,通过将在用户视角范围内不可见的顶点进行剔除,降低了GPU侧需要进行渲染处理的顶点数量,从而降低了GPU的负载。
在一种可能的实现中,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,所述根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,包括:
根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。
本申请实施例中,裁剪剔除(culling)可以指将场景中不可见的模型网格剔除,最终只有可见的模型网格参与渲染计算。裁剪剔除可以包括背面剔除、视锥体剔除、遮挡剔除中的至少一种,CPU可以从顶点buffer中获取多个待渲染的模型网格mesh,模型网格可以用三角形网格(或者称之为三角形网络)表示,每个三角形网络由三个顶点构成,顶点的顶点数据可以包括但不限于位置、法线、UV坐标等。一个顶点可被多个相邻三角形共享。模型网格越复杂,三角形顶点数量越大。
在一种可能的实现中,所述方法还包括:
获取当前中央处理器CPU可用的计算资源;
基于所述计算资源确定所述多个待渲染的模型网格中每个待渲染的模型网格包括的三角形网络数量;其中,若所述计算资源越多,则每个待渲染的模型网格包括的三角形网络数量越多,若所述计算资源越少,则每个待渲染的模型网格包括的三角形网络数量越少。
本申请实施例中,CPU可以调节每个模型网格包括的三角形网络的个数,若模型网格包括的三角形网络的个数多,则CPU侧执行剔除Culling的负载小(执行剔除操作的次数降低),但模型网格被剔除的概率减低,导致GPU侧的负载变大(模型网格被剔除的概率减低,使得剩余的待渲染的顶点数量变多,进而使得GPU侧的负载变大);若模型网格包括的三角形网络的个数少,则CPU侧执行剔除Culling的负载大(执行剔除操作的次数变多),且模型网格被剔除的概率变高,导致GPU侧的负载变小(模型网格被剔除的概率变大,使得剩余的待渲染的顶点数量变少,进而使得GPU侧的负载变小)。
具体的,CPU可以先确定每个模型网格包括的三角形网络的数量为1,并评估CPU和GPU负载,如果CPU侧负载过重,则向上调每个模型网格包括的三角形网络的数量,从而动态的调整CPU和GPU之间的负载。
本实施例中,CPU可以基于实际CPU的负载情况动态设置模型网格包括的三角形网络数量,进而可以适配具有不同CPU算力的移动设备。
在一种可能的实现中,所述根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,包括:
根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
本申请实施例中,CPU可以根据每个模型网格的Bounding Box做视锥体剔除,根据Safe space cone区域信息及当前相机Camera位置做背面剔除。其中视锥体剔除是指将落于视锥体外的模型网络进行剔除,避免对这些物体进行不必要的渲染。具体的,如果相机在World空间中位于模型网格的Bounding Box之内则将模型网格保留;对模型网格的八个点使用模型视图投影变换(model-view-projection matrix,MVP)矩阵进行空间转换转化至Clip空间(其中,Clip空间是指模型顶点经MVP变换后的坐标空间),如若任一Clip空间上的映射的一点位于视椎空间之内,则保留该模型网格;如若每个点都没有位于视椎空间之内,则重新对映射的八个点进行Bounding Box的计算,形成一个基于Clip空间的BoundingBox,接着对该Bounding Box的最小值的点与最大值的点进行bit位的标记,如若模型网格都在视椎平面的一侧则被剔除,否则模型网格将被保留。
本申请实施例中,所谓背面剔除是指一个闭合的模型网格针对相机视点方向总是可以分成前后两部分,背面部分被前面部分遮挡,背面部分可被剔除,不必参与渲染。具体的,CPU可以将获取到的World空间的相机位置Camera Position转换到Local空间,与模型网格中的Safe Space Cone进行比较,如若相机Camera位于Safe Space Cone之内则模型网格被保留,否则模型网格将被剔除。
在一种可能的实现中,所述GPU的负载量与如下的至少一种有关:
所述GPU渲染一帧图像时所需要处理的绘制命令draw call的数量;
所述GPU渲染一帧图像时所需要处理的待渲染顶点的数量;
所述GPU渲染一帧图像时所需要处理的待渲染纹理的数量;以及
所述GPU的频点占用。
在一种可能的实现中,所述获取N个待渲染顶点的顶点数据,包括:获取多个第一绘制命令draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据;相应的,所述将所述M个待渲染顶点的顶点数据传递至到所述GPU,包括:
根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据;
将所述多个第二draw call传递至到所述GPU。
第二方面,本申请提供了一种图形渲染方法,所述方法应用于终端设备,所述终端设备包括CPU和GPU,所述方法包括:
所述CPU获取多个第一draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据;若所述CPU的负载量大于预设值,则所述CPU将所述多个第一draw call传递至所述GPU;所述GPU根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;所述GPU根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据;以及,所述GPU根据所述多个第二draw call进行图形渲染。
本申请在CPU的负载量较大的情况下,通过触发GPU将在用户视角范围内不可见的顶点进行剔除,降低了CPU侧需要进行顶点剔除操作的开销,同时由于GPU进行顶点剔除culling后参与渲染的顶点数大大减少,也降低了GPU的开销,使得游戏帧率得到提升。
在一种可能的实现中,每个第一draw call包括函数名,所述方法还包括:
所述CPU根据所述N个draw call的函数名以及调用的待渲染顶点的顶点数据,生成P个目标draw call,其中所述P个目标draw call用于表示所述N个draw call,且每个目标draw call用于表示所述N个draw call中的一部分draw call,所述一部分draw call的函数名以及调用的待渲染顶点的顶点数据相同;
所述CPU将每个目标draw call传递至一个第一缓存器buffer,并基于计算着色器调用(compute shader调用)来触发所述GPU从P个第一buffer中获取所述P个目标drawcall,其中,每次compute shader调用可触发所述GPU从一个第一buffer中获取一个目标draw call。
本申请实施例中,CPU可以对每个第一draw call记录其关联数据,并根据每个draw call使用的函数名(或者称之为Shader程序名)、调用的待渲染顶点的顶点数据以及uniform数据(uniform数据是指Shader程序除了顶点数据外其他的输入数据,如相机参数、模型变换矩阵等),对第一draw call进行分组。其中,顶点数据和Shader程序相同的第一draw call被划分到同一组,且同一组内不同第一draw call使用的uniform数据可以记录在一个第一缓存器buffer(例如instance buffer)内。
本申请实施例中,多个第一draw call调用被合并成一个Compute shader和Indirect draw调用,使得待处理的draw call的数量减少,进而CPU侧图形驱动所需的开销得到降低,同时由于GPU进行顶点剔除culling后参与渲染的顶点数大大减少,降低了GPU的开销,使得游戏帧率得到提升。
在一种可能的实现中,所述方法还包括:
所述GPU将所述M个待渲染顶点的顶点数据写入至非直接渲染缓存器(indirectdraw buffer);相应的,所述GPU根据所述多个第二draw call进行图形渲染,包括:所述CPU基于非直接渲染调用(indirect draw调用)触发所述GPU从所述indirect draw buffer中获取所述M个待渲染顶点的顶点数据,以便所述CPU根据所述多个第二draw call进行图形渲染。其中,非直接渲染调用(indirect draw调用)是指当执行一个绘制命令时,命令需要的参数不是通过在调用API时直接传入,而是通过指定显存区域的一个地址,该地址内含有Draw call需要的参数数据。本申请实施例中,利用compute shader在GPU侧执行顶点剔除culling操作,以此来降低CPU侧负载,同时为了避免执行后把culling结果从GPU读回CPU带来的延迟,使用非直接渲染调用(indirect draw调用)让GPU侧来实现图形渲染的操作。
在一种可能的实现中,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,所述根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,包括:根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。
在一种可能的实现中,所述根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,包括:根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
在一种可能的实现中,所述CPU的负载量与如下的至少一种有关:
所述CPU进行一帧图像的渲染处理所需的时间;
所述CPU进行一帧图像的渲染处理时所需要处理的API调用的数量;
所述CPU的频点占用。
第三方面,本申请提供了一种图形渲染装置,所述装置应用于终端设备,所述终端设备包括图形处理器GPU,所述装置包括:
获取模块,用于获取N个待渲染顶点的顶点数据;
顶点剔除模块,用于若所述GPU的负载量大于预设值,则根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;以及,
图形渲染模块,用于将所述M个待渲染顶点的顶点数据传递至到所述GPU,以便所述GPU进行图形渲染。
在一种可能的实现中,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,所述顶点剔除模块,用于:
根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。
在一种可能的实现中,所述获取模块,用于获取当前中央处理器CPU可用的计算资源;
三角形网络数量确定模块,用于基于所述计算资源确定所述多个待渲染的模型网格中每个待渲染的模型网格包括的三角形网络数量;其中,若所述计算资源越多,则每个待渲染的模型网格包括的三角形网络数量越多,若所述计算资源越少,则每个待渲染的模型网格包括的三角形网络数量越少。
在一种可能的实现中,所述顶点剔除模块,用于根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
在一种可能的实现中,所述GPU的负载量与如下的至少一种有关:
所述GPU渲染一帧图像时所需要处理的绘制命令draw call的数量;
所述GPU渲染一帧图像时所需要处理的待渲染顶点的数量;
所述GPU渲染一帧图像时所需要处理的待渲染纹理的数量;以及
所述GPU的频点占用。
在一种可能的实现中,所述获取模块,用于获取多个第一绘制命令draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据;相应的,所述图形渲染模块,用于根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据;将所述多个第二draw call传递至到所述GPU。
第三方面,本申请提供了一种图形渲染装置,所述装置应用于终端设备,所述终端设备包括CPU和GPU,所述CPU包括:
获取模块,用于所述CPU获取多个第一draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据;
命令传递模块,用于若所述CPU的负载量大于预设值,则所述CPU将所述多个第一draw call传递至所述GPU;
所述GPU包括:
顶点剔除模块,用于根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;
根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据;以及,
图形渲染模块,用于根据所述多个第二draw call进行图形渲染。
在一种可能的实现中,每个第一draw call包括函数名,所述CPU还包括:
命令合并模块,用于根据所述N个draw call的函数名以及调用的待渲染顶点的顶点数据,生成P个目标draw call,其中所述P个目标draw call用于表示所述N个draw call,且每个目标draw call用于表示所述N个draw call中的一部分draw call,所述一部分drawcall的函数名以及调用的待渲染顶点的顶点数据相同;
将每个目标draw call传递至一个第一缓存器buffer,并基于计算着色器调用(compute shader调用)来触发所述GPU从P个第一buffer中获取所述P个目标draw call,其中,每次compute shader调用可触发所述GPU从一个第一buffer中获取一个目标drawcall。
在一种可能的实现中,所述GPU还包括:
数据写入模块,用于将所述M个待渲染顶点的顶点数据写入至非直接渲染缓存器(indirect draw buffer);相应的,所述图形渲染模块,用于所述CPU基于非直接渲染调用(indirect draw调用)触发所述GPU从所述indirect draw buffer中获取所述M个待渲染顶点的顶点数据,以便所述CPU根据所述多个第二draw call进行图形渲染。
在一种可能的实现中,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,所述顶点剔除模块,用于根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。
在一种可能的实现中,所述顶点剔除模块,用于根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
在一种可能的实现中,所述CPU的负载量与如下的至少一种有关:
所述CPU进行一帧图像的渲染处理所需的时间;
所述CPU进行一帧图像的渲染处理时所需要处理的API调用的数量;
所述CPU的频点占用。
第五方面,提供了一种计算机可读存储介质,计算机可读存储介质存储了程序代码,其中,程序代码包括用于执行上述第一方面所描述的方法中的部分或全部操作的指令。
可选地,上述计算机可读存储介质位于电子设备内,该电子设备可以是能够进行图形渲染的装置。
第六方面,本申请实施例提供一种计算机程序产品,当计算机程序产品在通信装置上运行时,使得通信装置执行上述第一方面所描述的方法中的部分或全部操作。
第七方面,提供了一种芯片,所述芯片包括处理器,所述处理器用于执行上述第一方面所描述的方法中的部分或全部操作。
附图说明
图1为本申请实施例的电子设备的结构示意图;
图2为本申请实施例的电子设备的结构示意图;
图3为本申请实施例的电子设备的结构示意图;
图4为本申请实施例提供的图形渲染方法的流程示意图;
图5为本申请实施例提供的图形渲染方法的流程示意图;
图6为本申请实施例提供的图形渲染方法的流程示意图;
图7为本申请实施例提供的图形渲染方法的流程示意图;
图8为本申请实施例提供的图形渲染方法的流程示意图;
图9为本申请实施例提供的图形渲染方法的流程示意图;
图10为本申请实施例提供的图形渲染装置的示意图;
图11为本申请实施例提供的图形渲染装置的示意图;
图12为本申请实施例提供的图形渲染装置的示意图;
图13为本申请实施例的电子设备的结构示意图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
本申请实施例中的图形渲染方法可以由电子设备来执行。该电子设备可以是移动终端(例如,智能手机),电脑,个人数字助理,可穿戴设备,车载设备,物联网设备或者其他能够进行图像渲染处理的设备。该电子设备可以是运行安卓系统、IOS系统、windows系统以及其他系统的设备。
本申请实施例的图形渲染方法可以由电子设备执行,该电子设备的具体结构可以如图1所示,下面结合图1对电子设备的具体结构进行详细的介绍。
在一个实施例中,如图1所示,电子设备1000可以包括:中央处理器(CPU)1001、图形处理器(GPU)1002、显示设备1003和存储器1004。可选地,该电子设备10还可以包括至少一个通信总线110(图1中未示出),用于实现各个组件之间的连接通信。
应当理解,电子设备1000中的各个组件还可以通过其他连接器相耦合,其他连接器可包括各类接口、传输线或总线等。电子设备1000中的各个组件还可以是以处理器1001为中心的放射性连接方式。在本申请的各个实施例中,耦合是指通过相互电连接或连通,包括直接相连或通过其他设备间接相连。
中央处理器1001和图形处理器1002的连接方式也有多种,不局限于图1所示的方式。电子设备1000中的中央处理器1001和图形处理器1002可以位于同一个芯片上,也可以分别为独立的芯片。
下面对中央处理器1001、图形处理器1002、显示设备1003和存储器1004的作用进行简单的介绍。
中央处理器1001:用于运行操作系统1005和应用程序1007。应用程序1007可以为图形类应用程序,比如游戏、视频播放器等等。操作系统1005提供了系统图形库接口,应用程序1007通过该系统图形库接口,以及操作系统1005提供的驱动程序,比如图形库用户态驱动和/或图形库内核态驱动,生成用于渲染图形或图像帧的指令流,以及所需的相关渲染数据。其中,系统图形库包括但不限于:嵌入式开放图形库(open graphics library forembedded system,OpenGL ES)、柯罗诺斯平台图形界面(the khronos platform graphicsinterface)或Vulkan(一个跨平台的绘图应用程序接口)等系统图形库。指令流包含一些列的指令,这些指令通常为对系统图形库接口的调用指令。
可选地,中央处理器1001可以包括以下至少一种类型的处理器:应用处理器、一个或多个微处理器、数字信号处理器(digital signal processor,DSP)、微控制器(microcontrollerunit,MCU)或人工智能处理器等。
中央处理器1001还可进一步包括必要的硬件加速器,如专用集成电路(application spe cific integrated circuit,ASIC)、现场可编程门阵列(fieldprogrammable gate array,FPGA)、或者用于实现逻辑运算的集成电路。处理器1001可以被耦合到一个或多个数据总线,用于在电子设备10的各个组件之间传输数据和指令。
图形处理器1002:用于接收处理器1001发送的图形指令流,通过渲染管线(pipeline)生成渲染目标,并通过操作系统的图层合成显示模块将渲染目标显示到显示设备1003。
可选地,图形处理器1002可以包括执行软件的通用图形处理器,如GPU或其他类型的专用图形处理单元等。
显示设备1003:用于显示由电子设备10生成的各种图像,该图像可以为操作系统的图形用户界面(graphical user interface,GUI)或由图形处理器1002处理的图像数据(包括静止图像和视频数据)。
可选地,显示设备1003可以包括任何合适类型的显示屏。例如液晶显示器(liquidcry stal display,LCD)或等离子显示器或有机发光二极管(organic light-emittingdiode,OLED)显示器等。
存储器1004,是中央处理器1001和图形处理器1002之间的传输通道,可以为双倍速率同步动态随机存储器(double data rate synchronous dynamic random accessmemory,D DR SDRAM)或者其它类型的缓存。
渲染管线是图形处理器1002在渲染图形或图像帧的过程中顺序执行的一些列操作,典型的操作包括:顶点处理(Vertex Processing)、图元处理(Primitive Processing)、光栅化(R asterization)、片段处理(Fragment Processing)等等。
随着通信和芯片技术的快速增长,移动设备成了游戏最重要的终端平台。目前高画质、高帧率的大型游戏对手机的整体性能尤其是图形处理性能提出了更高的要求。
近年来移动游戏的场景越来越大、细节越来越丰富,这导致整个渲染流程上的计算负载越来越重。当游戏性能体验不好时,往往都是计算能力或者数据带宽资源供给满足不了游戏业务负载的需求,性能瓶颈可能存在于CPU或者GPU上。
首先介绍本申请的应用场景。
如图2所示,本申请应用的架构可以包括应用层、图形API层、OS内核以及本发明所在的实施层,本发明实施层处于图形API层(例如OpenGL及Vulkan)之下,OS内核及驱动之上,本发明实施层可以截获图形API调用、缓存渲染指令流及关联数据,并对截获的数据进行处理。
本发明的产品实现形态可以是包含在GT框架(全称为GPU Turbo,是手机系统内的图形加速框架)中,并运行在终端硬件上的程序代码。以图3所示的应用场景为例,本发明的程序代码存在于终端系统的GT框架中,在图形API之下,OS内核之上。运行时,本发明的程序代码运行于应用进程之内。
具体的,可以参照图4,图4为本申请实施例提供的一种图形渲染方法的流程示意,图形渲染方法可以应用于终端设备,终端设备包括图形处理器GPU,如图4所示,本申请实施例提供的图形渲染方法可以包括:
401、获取N个待渲染顶点的顶点数据。
本申请实施例中,终端设备中的CPU可以获取多个第一绘制命令draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据,待渲染顶点的顶点数据可以包括但不限于顶点位置、法线、UV坐标、索引等。
上述CPU可以是位于终端设备内部。上述待渲染顶点的顶点数据可以是CPU从终端设备的缓存模块中获取到的顶点数据,该待渲染顶点的顶点数据是供GPU进行图形渲染处理的顶点数据。CPU获取的待渲染顶点的顶点数据可以是某次draw call获取到的顶点数据,其中,draw call获取到的顶点数据可以是指绘制一次图形所需要的顶点数据。
其中,draw call指令是指图形程序接口指令,draw call指令的数目与跨平台的图形程序接口的图形描绘次数相同,draw call指令具体可以包括但不限于glDrawArrays、glDraw Elements等指令。
可选地,CPU可以从存储模块获取N个待渲染顶点的顶点数据。其中,终端设备的存储模块缓存了供GPU进行图形渲染处理的N个待渲染顶点的顶点数据。当上述图形渲染方法由终端设备执行时,存储模块可以是位于终端设备内部的DDR SDRAM,当上述图形渲染方法由计算机设备执行时,存储模块可以是位于计算机设备内部的显存。
示例性的,可以参照图5,在感知缓存阶段,指令流街区模块可以从缓存数据中获取N个待渲染顶点的顶点数据。
402、若所述GPU的负载量大于预设值,则根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数。
本申请实施例中,CPU可以首先判断当前GPU的负载量,其中,所述GPU的负载量可以与如下的至少一种有关:所述GPU渲染一帧图像时所需要处理的绘制命令draw call的数量、所述GPU渲染一帧图像时所需要处理的待渲染顶点的数量、所述GPU渲染一帧图像时所需要处理的待渲染纹理的数量以及所述GPU的频点占用。
在一种实现中,CPU可以基于截获的绘制命令draw call进行GPU的负载量评估,CPU可以将GPU渲染一帧图像时所需要处理的绘制命令draw call的数量、GPU渲染一帧图像时所需要处理的待渲染顶点的数量、以及所述GPU渲染一帧图像时所需要处理的待渲染纹理的数量作为确定GPU的负载量的依据,且同时对GPU当前的频点进行查询,并将GPU的频点占用作为确定GPU的负载量的依据。
示例性的,当GPU渲染一帧图像时所需要处理的绘制命令draw call的数量超过一定阈值(例如500)、GPU渲染一帧图像时所需要处理的待渲染顶点的数量超过一定阈值(例如500k),所述GPU渲染一帧图像时所需要处理的待渲染纹理的数量超过一定阈值(例如200),且GPU当前的频点占用超过一定阈值(例如超过最高频点的80%以上),则CPU可以确定GPU的负载量大于预设值。
应理解,上述预设值可以基于实际情况进行配置,本申请实施例并不限定。
本申请实施例中,若确定GPU的负载量大于预设值,则可以在CPU侧执行裁剪剔除(Culling)的算法操作,以减少GPU的计算量,进而降低GPU的负载量。
本申请实施例中,待渲染顶点的顶点数据可以是绘制一次图形所需要的全部顶点数据或者部分顶点数据。该待渲染顶点的顶点数据除了包含用户视角范围内的顶点数据,还可以包含用户视角范围之外的顶点数据。CPU对待渲染顶点的顶点数据进行处理,得到用户视角范围内的顶点数据,相当于是将待处理顶点数据中用户视角范围之外的顶点数据去除掉,从而得到位于用户视角范围内的顶点数据。
应理解,用户视角范围内的顶点数据可以是用户视角范围内可见的物体图像的顶点位置信息,通过对用户视角范围内的顶点数据的处理,能够最终得到用户视角范围内可见的物体图像。
本申请实施例中,CPU可以根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点。
具体的,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,相应的,CPU可以根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。
本申请实施例中,裁剪剔除(culling)可以指将场景中不可见的模型网格剔除,最终只有可见的模型网格参与渲染计算。裁剪剔除可以包括背面剔除、视锥体剔除、遮挡剔除中的至少一种,CPU可以从顶点buffer中获取多个待渲染的模型网格mesh,模型网格可以用三角形网格(或者称之为三角形网络)表示,每个三角形网络由三个顶点构成,顶点的顶点数据可以包括但不限于位置、法线、UV坐标等。一个顶点可被多个相邻三角形共享。模型网格越复杂,三角形顶点数量越大。
本申请实施例中,可以对三角形网络进行分组,分成多个小的待渲染的模型网格,每个模型网格可以由一定数量个三角形网络组成)。在一些情况下,游戏的三角形网络的索引顺序是连续的,可以在这个连续的索引上进行三角形网络的分组,建立一个模型网格,分组数量可以选择8、16、32等等。
本申请实施例中,CPU可以根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
接下来描述。CPU如何通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
本申请实施例中,CPU可以根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。CPU可以计算每个模型网格的模型包围盒Bounding Box,其中模型包围盒是指包括模型网格内所有顶点的最小三维方盒。具体的,CPU可以对模型网格中每一个三角形网格进行遍历,在X轴,Y轴,Z轴上分别寻找其最小与最大的值,用Box Min和Box Max记录,进而得到每个模型网格的模型包围盒Bounding Box。CPU还可以计算每个模型网格的Safe space cone区域,Safe space cone区域可以用于快速计算一个模型网格是否进行背面剔除的数据结构,当相机位置位于safe space cone定义的空间区域时,该模型网格将被背面剔除,具体的,对于任意一个三角形网络,可以用其两条边,计算出该三角形网络的垂直向量(即该三角形网络的法向量),将一个模型网格内所有三角形网络法向量进行累加取反,作为中心轴,并遍历模型网络内所有的三角形网络与中心轴进行求交,将最远交点当作中心点。
本申请实施例中,CPU可以根据每个模型网格的Bounding Box做视锥体剔除,根据Safe space cone区域信息及当前相机Camera位置做背面剔除。其中视锥体剔除是指将落于视锥体外的模型网络进行剔除,避免对这些物体进行不必要的渲染。具体的,如果相机在World空间中位于模型网格的Bounding Box之内则将模型网格保留;对模型网格的八个点使用模型视图投影变换(model-view-projection matrix,MVP)矩阵进行空间转换转化至Clip空间(其中,Clip空间是指模型顶点经MVP变换后的坐标空间),如若任一Clip空间上的映射的一点位于视椎空间之内,则保留该模型网格;如若每个点都没有位于视椎空间之内,则重新对映射的八个点进行Bounding Box的计算,形成一个基于Clip空间的BoundingBox,接着对该Bounding Box的最小值的点与最大值的点进行bit位的标记,如若模型网格都在视椎平面的一侧则被剔除,否则模型网格将被保留。
本申请实施例中,所谓背面剔除是指一个闭合的模型网格针对相机视点方向总是可以分成前后两部分,背面部分被前面部分遮挡,背面部分可被剔除,不必参与渲染。具体的,CPU可以将获取到的World空间的相机位置Camera Position转换到Local空间,与模型网格中的Safe Space Cone进行比较,如若相机Camera位于Safe Space Cone之内则模型网格被保留,否则模型网格将被剔除。
本申请实施例中,CPU还可以根据实际CPU的负载情况动态设置模型网格包括的三角形网络数量,具体的,CPU可以获取当前中央处理器CPU可用的计算资源,并基于所述计算资源确定所述多个待渲染的模型网格中每个待渲染的模型网格包括的三角形网络数量;其中,若所述计算资源越多,则每个待渲染的模型网格包括的三角形网络数量越多,若所述计算资源越少,则每个待渲染的模型网格包括的三角形网络数量越少。
本申请实施例中,CPU可以调节每个模型网格包括的三角形网络的个数,若模型网格包括的三角形网络的个数多,则CPU侧执行剔除Culling的负载小(执行剔除操作的次数降低),但模型网格被剔除的概率减低,导致GPU侧的负载变大(模型网格被剔除的概率减低,使得剩余的待渲染的顶点数量变多,进而使得GPU侧的负载变大);若模型网格包括的三角形网络的个数少,则CPU侧执行剔除Culling的负载大(执行剔除操作的次数变多),且模型网格被剔除的概率变高,导致GPU侧的负载变小(模型网格被剔除的概率变大,使得剩余的待渲染的顶点数量变少,进而使得GPU侧的负载变小)。
具体的,CPU可以先确定每个模型网格包括的三角形网络的数量为1,并评估CPU和GPU负载,如果CPU侧负载过重,则向上调每个模型网格包括的三角形网络的数量,从而动态的调整CPU和GPU之间的负载。
本实施例中,CPU可以基于实际CPU的负载情况动态设置模型网格包括的三角形网络数量,进而可以适配具有不同CPU算力的移动设备。
示例性的,可以参照图5,在执行裁剪(或者称之为顶点剔除)的过程中,可以将绘制指令draw call进行透视除法、坐标转换以及剔除算法处理,进而将用户不可见的顶点的顶点数据剔除。在游戏数据更新阶段,可以基于剔除后的顶点数据更新预置关键数据以及每帧更新数据。
403、将所述M个待渲染顶点的顶点数据传递至到所述GPU,以便所述GPU进行图形渲染。
本申请实施例中,CPU可以根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据,并将所述多个第二draw call传递至到所述GPU。
在完成了顶点的裁剪之后,可以对裁剪后顶点的顶点数据进行更新。具体地,在裁剪完成之后,可以更新对应的顶点(vertex)数据和索引(indices)数据,并把这些数据作为draw call指令的数据输入,送入GPU的渲染管线(pipeline)。
本申请实施例中,CPU可以将用户视角范围内的M个待渲染顶点的顶点数据送入到GPU中,以进行渲染处理。
可选地,上述CPU和GPU既可以位于同一终端设备中,也可以分别位于不同的终端设备中。例如,CPU和GPU均位于同一个终端设备中,通过CPU和GPU的配合能够实现对图形的渲染。再如,CPU位于客户端设备(例如,终端设备)中,GPU位于云端设备(如云端的服务器)中,通过客户端设备的CPU与云端设备的配合,能够实现对图形的渲染。其中,客户端设备中的CPU可以先获取顶点数据,并对顶点数据进行处理,然后再将最终得到的用户视角范围内的顶点数据送入到GPU中进行渲染处理,接下来,客户端设备可以从你云端设备获取渲染处理后的图形进行显示。
可选地,CPU可以将用户视角范围内的M个待渲染顶点的顶点数据存储到存储模块,以使得GPU从存储模块获取用户视角范围内的顶点数据,并进行图像渲染处理。
本申请实施例提供了一种图形渲染方法,所述方法应用于终端设备,所述终端设备包括图形处理器GPU,所述方法包括:获取N个待渲染顶点的顶点数据;若所述GPU的负载量大于预设值,则根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;以及,将所述M个待渲染顶点的顶点数据传递至到所述GPU,以便所述GPU进行图形渲染。通过上述方法,在GPU的负载量较大的情况下,通过将在用户视角范围内不可见的顶点进行剔除,降低了GPU侧需要进行渲染处理的顶点数量,从而降低了GPU的负载。
参照图6,本申请实施例还提供了一种图形渲染方法的流程示意,如图6所示,所述图形渲染方法可以应用于终端设备,所述终端设备包括CPU和GPU,本申请实施例提供的图形渲染方法包括:
601、所述CPU获取多个第一draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据。
本申请实施例中,终端设备中的CPU可以获取多个第一绘制命令draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据,待渲染顶点的顶点数据可以包括但不限于顶点位置、法线、UV坐标、索引等。
上述CPU可以是位于终端设备内部。上述待渲染顶点的顶点数据可以是CPU从终端设备的缓存模块中获取到的顶点数据,该待渲染顶点的顶点数据是供GPU进行图形渲染处理的顶点数据。CPU获取的待渲染顶点的顶点数据可以是某次draw call获取到的顶点数据,其中,draw call获取到的顶点数据可以是指绘制一次图形所需要的顶点数据。
其中,draw call指令是指图形程序接口指令,draw call指令的数目与跨平台的图形程序接口的图形描绘次数相同,draw call指令具体可以包括但不限于glDrawArrays、glDraw Elements等指令。
可选地,CPU可以从存储模块获取N个待渲染顶点的顶点数据。其中,终端设备的存储模块缓存了供GPU进行图形渲染处理的N个待渲染顶点的顶点数据。当上述图形渲染方法由终端设备执行时,存储模块可以是位于终端设备内部的DDR SDRAM,当上述图形渲染方法由计算机设备执行时,存储模块可以是位于计算机设备内部的显存。
602、若所述CPU的负载量大于预设值,则所述CPU将所述多个第一draw call传递至所述GPU。
本申请实施例中,CPU可以首先判断当前CPU的负载量,其中,所述CPU的负载量可以与如下的至少一种有关:所述CPU进行一帧图像的渲染处理所需的时间、所述CPU进行一帧图像的渲染处理时所需要处理的API调用的数量、以及所述CPU的频点占用。
在一种实现中,CPU可以基于截获的绘制命令draw call进行CPU的负载量评估,CPU可以将CPU进行一帧图像的渲染处理所需的时间、所述CPU进行一帧图像的渲染处理时所需要处理的API调用的数量、以及所述CPU的频点占用作为确定CPU的负载量的依据。
示例性的,当CPU进行一帧图像的渲染处理所需的时间超过一定阈值(例如500)、所述CPU进行一帧图像的渲染处理时所需要处理的API调用的数量超过一定阈值(例如500k)且所述CPU的频点占用超过一定阈值(例如超过最高频点的80%以上),则CPU可以确定CPU的负载量大于预设值。
本申请实施例中,为了降低CPU的开销,还可以将一部分第一draw call合并成一个调用。具体的,每个第一draw call包括函数名,所述CPU可以根据所述N个draw call的函数名以及调用的待渲染顶点的顶点数据,生成P个目标draw call,其中所述P个目标drawcall用于表示所述N个draw call,且每个目标draw call用于表示所述N个draw call中的一部分draw call,所述一部分draw call的函数名以及调用的待渲染顶点的顶点数据相同。
本申请实施例中,CPU可以对每个第一draw call记录其关联数据,并根据每个draw call使用的函数名(或者称之为Shader程序名)、调用的待渲染顶点的顶点数据以及uniform数据(uniform数据是指Shader程序除了顶点数据外其他的输入数据,如相机参数、模型变换矩阵等),对第一draw call进行分组。其中,顶点数据和Shader程序相同的第一draw call被划分到同一组,且同一组内不同第一draw call使用的uniform数据可以记录在一个第一缓存器buffer(例如instance buffer)内。
所述CPU可以将每个目标draw call传递至一个第一缓存器buffer,CPU可以将每个目标draw call对应的instance buffer作为GPU侧的compute shader的输入数据,Compute shader是在GPU上执行的程序片段,可用于图形渲染之外的计算,现代GPU硬件一般均提供支持;游戏可通过OpenGL ES或者Vulkan API将Compute shader送入GPU执行。具体的,CPU可以基于计算着色器调用(compute shader调用)来触发所述GPU从P个第一buffer中获取所述P个目标draw call,其中,每次compute shader调用可触发所述GPU从一个第一buffer中获取一个目标draw call。
本申请实施例中,所述GPU可以将所述M个待渲染顶点的顶点数据写入至非直接渲染缓存器(indirect draw buffer);相应的,所述CPU可以基于非直接渲染调用(indirectdraw调用)触发所述GPU从所述indirect draw buffer中获取所述M个待渲染顶点的顶点数据,以便所述CPU根据所述多个第二draw call进行图形渲染,其中,非直接渲染调用(indirect draw调用)是指当执行一个绘制命令时,命令需要的参数不是通过在调用API时直接传入,而是通过指定显存区域的一个地址,该地址内含有Draw call需要的参数数据。本申请实施例中,利用compute shader在GPU侧执行顶点剔除culling操作,以此来降低CPU侧负载,同时为了避免执行后把culling结果从GPU读回CPU带来的延迟,使用非直接渲染调用(indirect draw调用)让GPU侧来实现图形渲染的操作。
603、所述GPU根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数。
本申请实施例中,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,GPU可以根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。
在一种实现中,GPU可以根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
604、所述GPU根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据。
本申请实施例中,所述GPU可以将所述M个待渲染顶点的顶点数据写入至非直接渲染缓存器(indirect draw buffer);所述CPU可以基于非直接渲染调用(indirect draw调用)触发所述GPU从所述indirect draw buffer中获取所述M个待渲染顶点的顶点数据,以便所述CPU根据所述多个第二draw call进行图形渲染。其中,Indirect Draw Buffer是用于保存Indirect Draw所需参数的一块显存区域。
605、所述GPU根据所述多个第二draw call进行图形渲染。
本申请实施例中,GPU中的compute shader可以使用instance buffer里的数据对模型进行视锥和遮挡裁剪。GPU在执行完步骤603中的顶点剔除操作后会将剩余需要渲染的顶点数据写入非直接渲染缓存器(indirect draw buffer),并调用Indirect draw命令,该命令将驱动GPU在完成顶点剔除culling后从Indirect draw buffer获取绘制所需数据进行图形渲染。
参照图7,本申请实施例中,多个第一draw call调用被合并成一个Computeshader和Indirect draw调用,使得待处理的draw call的数量减少,进而CPU侧图形驱动所需的开销得到降低,同时由于GPU进行顶点剔除culling后参与渲染的顶点数大大减少,降低了GPU的开销,使得游戏帧率得到提升。
本申请实施例提供了一种图形渲染方法,所述方法应用于终端设备,所述终端设备包括CPU和GPU,所述方法包括:所述CPU获取多个第一draw call,所述多个第一drawcall用于调用N个待渲染顶点的顶点数据;若所述CPU的负载量大于预设值,则所述CPU将所述多个第一draw call传递至所述GPU;所述GPU根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;所述GPU根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据;以及,所述GPU根据所述多个第二draw call进行图形渲染。本申请在CPU的负载量较大的情况下,通过触发GPU将在用户视角范围内不可见的顶点进行剔除,降低了CPU侧需要进行顶点剔除操作的开销,同时由于GPU进行顶点剔除culling后参与渲染的顶点数大大减少,也降低了GPU的开销,使得游戏帧率得到提升。
应理解,上述图4对应的实施例以及图6对应的实施例可以并行执行,相互配合以降低终端设备中CPU和GPU的开销。示例性的,可以参照图8,在终端设备运行游戏后,CPU可以截获缓存图形指令流,并对游戏负载数据进行收集和评估,之后可以首先进行CPU负载量的确定,并在确定CPU负载量超过预设值时执行图6对应的实施例中的图形渲染方法,之后可以进行GPU负载量的确定,并在确定GPU负载量超过预设值时执行图4对应的实施例中的图形渲染方法;或者,可以首先进行GPU负载量的确定,并在确定GPU负载量超过预设值时执行图4对应的实施例中的图形渲染方法,之后可以进行CPU负载量的确定,并在确定CPU负载量超过预设值时执行图6对应的实施例中的图形渲染方法。
更具体的,可以参照图9,可以通过GT框架截获图形API层(例如OpenGL、Vulkan)的draw call、获取必要的关联数据给后续模块进行分析和策略使能。负载判断决策模块根据截获的的draw call和数据进行GPU负载评估,对于渲染指令超过一定阈值,渲染顶点超过一定阈值的场景可以判定为GPU过载的必要条件之一;同时对系统的CPU、GPU频点进行查询,作为GPU和CPU负载状态的重要依据。如果GPU驱动开销大,CPU侧负载重,则调用computeshader,在GPU侧进行顶点剔除Culling的算法操作,降低CPU侧的负载。如果GPU负载重,则在CPU侧执行顶点剔除Culling的算法操作,减少GPU shading的计算量。
参照图10,本申请还提供了一种图形渲染装置,所述装置1000应用于终端设备,所述终端设备包括图形处理器GPU,所述装置1000包括:
获取模块1001,用于获取N个待渲染顶点的顶点数据;
顶点剔除模块1002,用于若所述GPU的负载量大于预设值,则根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;以及,
图形渲染模块1003,用于将所述M个待渲染顶点的顶点数据传递至到所述GPU,以便所述GPU进行图形渲染。
在一种可能的实现中,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,所述顶点剔除模块1002,用于:
根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。
在一种可能的实现中,所述获取模块1001,用于获取当前中央处理器CPU可用的计算资源;
三角形网络数量确定模块,用于基于所述计算资源确定所述多个待渲染的模型网格中每个待渲染的模型网格包括的三角形网络数量;其中,若所述计算资源越多,则每个待渲染的模型网格包括的三角形网络数量越多,若所述计算资源越少,则每个待渲染的模型网格包括的三角形网络数量越少。
在一种可能的实现中,所述顶点剔除模块1002,用于根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
在一种可能的实现中,所述GPU的负载量与如下的至少一种有关:
所述GPU渲染一帧图像时所需要处理的绘制命令draw call的数量;
所述GPU渲染一帧图像时所需要处理的待渲染顶点的数量;
所述GPU渲染一帧图像时所需要处理的待渲染纹理的数量;以及
所述GPU的频点占用。
在一种可能的实现中,所述获取模块1001,用于获取多个第一绘制命令drawcall,所述多个第一draw call用于调用N个待渲染顶点的顶点数据;相应的,所述图形渲染模块,用于根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据;将所述多个第二draw call传递至到所述GPU。
参照图11,本申请还提供了一种图形渲染装置1100,所述装置应用于终端设备,所述终端设备包括CPU和GPU,所述CPU包括:
获取模块1101,用于所述CPU获取多个第一draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据;
命令传递模块1102,用于若所述CPU的负载量大于预设值,则所述CPU将所述多个第一draw call传递至所述GPU;
所述GPU包括:
顶点剔除模块1103,用于根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;
根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据;以及,
图形渲染模块1104,用于根据所述多个第二draw call进行图形渲染。
在一种可能的实现中,每个第一draw call包括函数名,所述CPU还包括:
命令合并模块,用于根据所述N个draw call的函数名以及调用的待渲染顶点的顶点数据,生成P个目标draw call,其中所述P个目标draw call用于表示所述N个draw call,且每个目标draw call用于表示所述N个draw call中的一部分draw call,所述一部分drawcall的函数名以及调用的待渲染顶点的顶点数据相同;
将每个目标draw call传递至一个第一缓存器buffer,并基于计算着色器调用(compute shader调用)来触发所述GPU从P个第一buffer中获取所述P个目标draw call,其中,每次compute shader调用可触发所述GPU从一个第一buffer中获取一个目标drawcall。
在一种可能的实现中,所述GPU还包括:
数据写入模块,用于将所述M个待渲染顶点的顶点数据写入至非直接渲染缓存器(indirect draw buffer);相应的,所述图形渲染模块,用于所述CPU基于非直接渲染调用(indirect draw调用)触发所述GPU从所述indirect draw buffer中获取所述M个待渲染顶点的顶点数据,以便所述CPU根据所述多个第二draw call进行图形渲染。
在一种可能的实现中,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,所述顶点剔除模块,用于根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。
在一种可能的实现中,所述顶点剔除模块,用于根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
在一种可能的实现中,所述CPU的负载量与如下的至少一种有关:
所述CPU进行一帧图像的渲染处理所需的时间;
所述CPU进行一帧图像的渲染处理时所需要处理的API调用的数量;
所述CPU的频点占用。
此外,本申请还提供了一种图形渲染装置,图12是本申请实施例的图形渲染装置的示意性框图。图12所示的装置1200包括输出/输出接口、存储器和CPU。
其中,存储器用于存储程序,当存储器存储的程序被CPU执行时,该CPU具体用于:
通过输入/输出接口获取N个待渲染顶点的顶点数据;若所述GPU的负载量大于预设值,则通过CPU根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数,将所述M个待渲染顶点的顶点数据传递至到所述GPU,以便所述GPU进行图形渲染。上述装置1200中还可以包含GPU。
图13是本申请实施例的终端设备的结构示意图。
应理解,上文中图12所示的装置1000的具体结构可以如图13所示。
图13中的终端设备包括通信模块3010、传感器3020、用户输入模块3030、输出模块3040、处理器3050、存储器3070以及电源3080。其中,处理器3050可以包括一个或者多个CPU。
图13所示的终端设备可以执行本申请实施例的图形渲染方法的各个步骤,具体地,处理器3050中的一个或者多个CPU可以执行本申请实施例的图形渲染方法的各个步骤。
下面对图13中的终端设备的各个模块进行详细的介绍。
通信模块3010可以包括至少一个能使该终端设备与其他终端设备之间进行通信的模块。例如,通信模块3010可以包括有线网络接口、广播接收模块、移动通信模块、无线因特网模块、局域通信模块和位置(或定位)信息模块等其中的一个或多个。
例如,通信模块3010能够从游戏服务器端实时获取游戏画面。
传感器3020可以感知用户的一些操作,传感器3020可以包括距离传感器,触摸传感器等等。传感器3020可以感知用户触摸屏幕或者靠近屏幕等操作。例如,传感器3020能够感知用户在游戏界面的一些操作。
用户输入模块3030,用于接收输入的数字信息、字符信息或接触式触摸操作/非接触式手势,以及接收与系统的用户设置以及功能控制有关的信号输入等。用户输入模块3030包括触控面板和/或其他输入设备。例如,用户可以通过用户输入模块3030对游戏进行控制。
输出模块3040包括显示面板,用于显示由用户输入的信息、提供给用户的信息或系统的各种菜单界面等。
可选的,可以采用液晶显示器(liquid crystal display,LCD)或有机发光二极管(organic light-emitting diode,OLED)等形式来配置显示面板。在其他一些实施例中,触控面板可覆盖显示面板上,形成触摸显示屏。
另外,输出模块3040还可以包括视频输出模块、告警器以及触觉模块等。该视频输出模块可以显示图形渲染后的游戏画面。
电源3080可以在处理器3050的控制下接收外部电力和内部电力,并且提供整个终端设备各个模块运行时需要的电力。
处理器3050包括一个或者多个CPU,处理器3050还包括一个或者多个GPU。
当处理器3050包括多个CPU时,该多个CPU可以集成在同一块芯片上,也可以分别集成在不同的芯片上。
当处理器3050包括多个GPU时,该多个GPU既可以集成在同一块芯片上,也可以分别集成在不同的芯片上。
当处理器3050既包括CPU又包括GPU时,CPU和GPU可以集成在同一块芯片上。
例如,当图13所示的终端设备为智能手机时,智能手机的处理器内部一般与图像处理相关的是一个CPU和一个GPU。这里的CPU和GPU均可以包含多个核。
存储器3070可以存储计算机程序,该计算机程序包括操作系统程序3072和应用程序3071等。其中,典型的操作系统如微软公司的Windows,苹果公司的MacOS等用于台式机或笔记本的系统。
存储器3070可以是以下类型中的一种或多种:闪速(flash)存储器、硬盘类型存储器、微型多媒体卡型存储器、卡式存储器(例如SD或XD存储器)、随机存取存储器(randomaccess memory,RAM)、静态随机存取存储器(static RAM,SRAM)、只读存储器(read onlymemory,ROM)、电可擦除可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、可编程只读存储器(programmable ROM,PROM)、磁存储器、磁盘或光盘。在其他一些实施例中,存储器3070也可以是因特网上的网络存储设备,系统可以对在因特网上的存储器3070执行更新或读取等操作。
例如,上述存储器3070可以存储一种计算机程序(该计算机程序是本申请实施例的图形渲染方法对应的程序),当处理器3050执行该计算机程序时,处理器3050能够执行本申请实施例的图形渲染方法。
存储器3070还存储有除计算机程序之外的其他数据3073,例如,存储器3070可以存储本申请的图形渲染方法处理过程中的数据。
图13中各个模块的连接关系仅为一种示例,本申请任意实施例提供的终端设备也可以应用在其它连接方式的终端设备中,例如所有模块通过总线连接。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (27)

1.一种图形渲染方法,其特征在于,所述方法应用于终端设备,所述终端设备包括图形处理器GPU,所述方法包括:
获取N个待渲染顶点的顶点数据,所述N为正整数;
若所述GPU的负载量大于预设值,则根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;以及,
将所述M个待渲染顶点的顶点数据传递到所述GPU,以便所述GPU进行图形渲染。
2.根据权利要求1所述的方法,其特征在于,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,所述根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,包括:
根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括所述M个待渲染顶点。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
获取当前中央处理器CPU可用的计算资源;
基于所述计算资源确定所述多个待渲染的模型网格中每个待渲染的模型网格包括的三角形网络数量;其中,若所述计算资源越多,则每个待渲染的模型网格包括的三角形网络数量越多,若所述计算资源越少,则每个待渲染的模型网格包括的三角形网络数量越少。
4.根据权利要求2或3所述的方法,其特征在于,所述根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,包括:
根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
5.根据权利要求1至4任一所述的方法,其特征在于,所述GPU的负载量与如下的至少一种有关:
所述GPU渲染一帧图像时所需要处理的绘制命令draw call的数量;
所述GPU渲染一帧图像时所需要处理的待渲染顶点的数量;
所述GPU渲染一帧图像时所需要处理的待渲染纹理的数量;或者
所述GPU的频点占用。
6.根据权利要求1至5任一所述的方法,其特征在于,所述获取N个待渲染顶点的顶点数据,包括:获取多个第一绘制命令draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据;相应的,所述将所述M个待渲染顶点的顶点数据传递至到所述GPU,包括:
根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据;
将所述多个第二draw call传递至到所述GPU。
7.一种图形渲染方法,其特征在于,所述方法应用于终端设备,所述终端设备包括CPU和GPU,所述方法包括:
所述CPU获取多个第一draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据;
若所述CPU的负载量大于预设值,则所述CPU将所述多个第一draw call传递至所述GPU;
所述GPU根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;
所述GPU根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据;以及,
所述GPU根据所述多个第二draw call进行图形渲染。
8.根据权利要求7所述的方法,其特征在于,每个第一draw call包括函数名,所述方法还包括:
所述CPU根据所述N个draw call的函数名以及调用的待渲染顶点的顶点数据,生成P个目标draw call,其中所述P个目标draw call用于表示所述N个draw call,且每个目标drawcall用于表示所述N个draw call中的一部分draw call,所述一部分draw call的函数名以及调用的待渲染顶点的顶点数据相同;
所述CPU将每个目标draw call传递至一个第一缓存器buffer,并基于计算着色器调用(compute shader调用)来触发所述GPU从P个第一buffer中获取所述P个目标draw call,其中,每次compute shader调用可触发所述GPU从一个第一buffer中获取一个目标drawcall。
9.根据权利要求7或8所述的方法,其特征在于,所述方法还包括:
所述GPU将所述M个待渲染顶点的顶点数据写入至非直接渲染缓存器(indirect drawbuffer);相应的,所述GPU根据所述多个第二draw call进行图形渲染,包括:
所述CPU基于非直接渲染调用(indirect draw调用)触发所述GPU从所述indirectdraw buffer中获取所述M个待渲染顶点的顶点数据,以便所述CPU根据所述多个第二drawcall进行图形渲染。
10.根据权利要求7至9任一所述的方法,其特征在于,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,所述根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,包括:
根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。
11.根据权利要求10所述的方法,其特征在于,所述根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,包括:
根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
12.根据权利要求7至11任一所述的方法,其特征在于,所述CPU的负载量与如下的至少一种有关:
所述CPU进行一帧图像的渲染处理所需的时间;
所述CPU进行一帧图像的渲染处理时所需要处理的API调用的数量;
所述CPU的频点占用。
13.一种图形渲染装置,其特征在于,所述装置应用于终端设备,所述终端设备包括图形处理器GPU,所述装置包括:
获取模块,用于获取N个待渲染顶点的顶点数据;
顶点剔除模块,用于若所述GPU的负载量大于预设值,则根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;以及,
图形渲染模块,用于将所述M个待渲染顶点的顶点数据传递至到所述GPU,以便所述GPU进行图形渲染。
14.根据权利要求13所述的装置,其特征在于,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,所述顶点剔除模块,用于:
根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。
15.根据权利要求14所述的装置,其特征在于,所述获取模块,用于获取当前中央处理器CPU可用的计算资源;
三角形网络数量确定模块,用于基于所述计算资源确定所述多个待渲染的模型网格中每个待渲染的模型网格包括的三角形网络数量;其中,若所述计算资源越多,则每个待渲染的模型网格包括的三角形网络数量越多,若所述计算资源越少,则每个待渲染的模型网格包括的三角形网络数量越少。
16.根据权利要求14或15所述的装置,其特征在于,所述顶点剔除模块,用于根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
17.根据权利要求13至16任一所述的装置,其特征在于,所述GPU的负载量与如下的至少一种有关:
所述GPU渲染一帧图像时所需要处理的绘制命令draw call的数量;
所述GPU渲染一帧图像时所需要处理的待渲染顶点的数量;
所述GPU渲染一帧图像时所需要处理的待渲染纹理的数量;以及
所述GPU的频点占用。
18.根据权利要求13至17任一所述的装置,其特征在于,所述获取模块,用于获取多个第一绘制命令draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据;相应的,所述图形渲染模块,用于根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据;将所述多个第二draw call传递至到所述GPU。
19.一种图形渲染装置,其特征在于,所述装置应用于终端设备,所述终端设备包括CPU和GPU,所述CPU包括:
获取模块,用于所述CPU获取多个第一draw call,所述多个第一draw call用于调用N个待渲染顶点的顶点数据;
命令传递模块,用于若所述CPU的负载量大于预设值,则所述CPU将所述多个第一drawcall传递至所述GPU;
所述GPU包括:
顶点剔除模块,用于根据所述N个待渲染顶点的顶点数据,从所述N个待渲染顶点中获取M个待渲染顶点,其中,所述M个待渲染顶点为在用户视角范围内可见的顶点;所述M为小于所述N的正整数;
根据所述M个待渲染顶点的顶点数据,更新所述多个第一draw call,以得到多个第二draw call,所述多个第二draw call用于调用所述M个待渲染顶点的顶点数据;以及,
图形渲染模块,用于根据所述多个第二draw call进行图形渲染。
20.根据权利要求19所述的装置,其特征在于,每个第一draw call包括函数名,所述CPU还包括:
命令合并模块,用于根据所述N个draw call的函数名以及调用的待渲染顶点的顶点数据,生成P个目标draw call,其中所述P个目标draw call用于表示所述N个draw call,且每个目标draw call用于表示所述N个draw call中的一部分draw call,所述一部分drawcall的函数名以及调用的待渲染顶点的顶点数据相同;
将每个目标draw call传递至一个第一缓存器buffer,并基于计算着色器调用(compute shader调用)来触发所述GPU从P个第一buffer中获取所述P个目标draw call,其中,每次compute shader调用可触发所述GPU从一个第一buffer中获取一个目标drawcall。
21.根据权利要求19或20所述的装置,其特征在于,所述GPU还包括:
数据写入模块,用于将所述M个待渲染顶点的顶点数据写入至非直接渲染缓存器(indirect draw buffer);相应的,所述图形渲染模块,用于所述CPU基于非直接渲染调用(indirect draw调用)触发所述GPU从所述indirect draw buffer中获取所述M个待渲染顶点的顶点数据,以便所述CPU根据所述多个第二draw call进行图形渲染。
22.根据权利要求19至21任一所述的装置,其特征在于,所述N个待渲染顶点用于组成多个待渲染的模型网格,每个待渲染的模型网格包括多个三角形网络,每个三角形网络的顶点由所述N个待渲染顶点中的多个待渲染顶点组成,所述顶点剔除模块,用于根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格,以得到剔除后的多个模型网格,所述剔除后的多个模型网格包括M个待渲染顶点。
23.根据权利要求22所述的装置,其特征在于,所述顶点剔除模块,用于根据每个待渲染的模型网格中三角形网络的顶点的顶点数据,通过背面剔除、视锥体剔除以及遮挡剔除中的至少一种,剔除所述多个待渲染的模型网格中全部或部分顶点在用户视角范围内不可见的模型网格。
24.根据权利要求19至23任一所述的装置,其特征在于,所述CPU的负载量与如下的至少一种有关:
所述CPU进行一帧图像的渲染处理所需的时间;
所述CPU进行一帧图像的渲染处理时所需要处理的API调用的数量;
所述CPU的频点占用。
25.一种非易失性计算机可读存储介质,其特征在于,所述非易失性可读存储介质包含计算机指令,用于执行权利要求1至12任一所述的图形渲染方法。
26.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器,所述存储器中存储有代码,所述处理器用于获取所述代码,以执行权利要求1至12任一所述的图形渲染方法。
27.一种计算机程序产品,其特征在于,包括计算机指令,当所述计算机指令被一个或多个处理器执行时用于实现权利要求1至12任一所述的图形渲染方法。
CN202011192352.3A 2020-10-30 2020-10-30 一种图形渲染方法及其相关设备 Pending CN114529658A (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202011192352.3A CN114529658A (zh) 2020-10-30 2020-10-30 一种图形渲染方法及其相关设备
PCT/CN2021/127476 WO2022089592A1 (zh) 2020-10-30 2021-10-29 一种图形渲染方法及其相关设备
EP21885318.2A EP4231242A4 (en) 2020-10-30 2021-10-29 GRAPHIC REPRODUCTION METHOD AND ASSOCIATED DEVICE THEREFOR

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011192352.3A CN114529658A (zh) 2020-10-30 2020-10-30 一种图形渲染方法及其相关设备

Publications (1)

Publication Number Publication Date
CN114529658A true CN114529658A (zh) 2022-05-24

Family

ID=81383588

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011192352.3A Pending CN114529658A (zh) 2020-10-30 2020-10-30 一种图形渲染方法及其相关设备

Country Status (3)

Country Link
EP (1) EP4231242A4 (zh)
CN (1) CN114529658A (zh)
WO (1) WO2022089592A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115880436A (zh) * 2022-12-26 2023-03-31 杭州新迪数字工程系统有限公司 一种cad模型可见性确定方法、系统及电子设备

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115277598B (zh) * 2022-06-20 2024-04-02 中国联合网络通信集团有限公司 一种算力资源调度方法、装置及计算机可读存储介质
CN115350479B (zh) * 2022-10-21 2023-01-31 腾讯科技(深圳)有限公司 渲染处理方法、装置、设备及介质
CN116433818B (zh) * 2023-03-22 2024-04-16 宝钢工程技术集团有限公司 一种云端cpu及gpu平行渲染方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6137497A (en) * 1997-05-30 2000-10-24 Hewlett-Packard Company Post transformation clipping in a geometry accelerator
US9928621B2 (en) * 2014-07-11 2018-03-27 Autodesk, Inc. Line stylization through graphics processor unit (GPU) textures
CN109509139B (zh) * 2017-09-14 2023-06-27 龙芯中科技术股份有限公司 顶点数据处理方法、装置及设备
CN111724293B (zh) * 2019-03-22 2023-07-28 华为技术有限公司 图像渲染方法及装置、电子设备
CN111754381A (zh) * 2019-03-26 2020-10-09 华为技术有限公司 图形渲染方法、装置和计算机可读存储介质
CN111798361A (zh) * 2019-09-20 2020-10-20 厦门雅基软件有限公司 渲染方法、装置、电子设备及计算机可读存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115880436A (zh) * 2022-12-26 2023-03-31 杭州新迪数字工程系统有限公司 一种cad模型可见性确定方法、系统及电子设备
CN115880436B (zh) * 2022-12-26 2024-02-13 上海新迪数字技术有限公司 一种cad模型可见性确定方法、系统及电子设备

Also Published As

Publication number Publication date
EP4231242A1 (en) 2023-08-23
WO2022089592A1 (zh) 2022-05-05
EP4231242A4 (en) 2024-05-15

Similar Documents

Publication Publication Date Title
JP6504212B2 (ja) 装置、方法およびシステム
CN108351864B (zh) 成凹几何密铺
CN114529658A (zh) 一种图形渲染方法及其相关设备
US10242481B2 (en) Visibility-based state updates in graphical processing units
KR101800987B1 (ko) 계층적 z-컬링을 수행하기 위한 부분적으로-커버된 타일들의 선택적 병합
US8063903B2 (en) Edge evaluation techniques for graphics hardware
US10013731B2 (en) Maximizing parallel processing in graphics processors
US20210174569A1 (en) Real-time hardware-assisted gpu tuning using machine learning
KR102547879B1 (ko) z-컬링 후 중첩 단편들 식별 또는 제거
WO2020192608A1 (zh) 图形渲染方法、装置和计算机可读存储介质
US9934547B2 (en) Method and system for reducing the number of draw commands issued to a graphics processing unit (GPU)
US9165337B2 (en) Command instruction management
US10535188B2 (en) Tessellation edge shaders
CN111400024A (zh) 渲染过程中的资源调用方法、装置和渲染引擎
CN114663572A (zh) 实时射线追踪应用中使用空间散列的光重要性高速缓存
US20240177394A1 (en) Motion vector optimization for multiple refractive and reflective interfaces
CN117237502A (zh) 一种三维渲染方法、装置、设备及介质
CN115861510A (zh) 对象渲染方法、装置、电子设备、存储介质及程序产品
US11481967B2 (en) Shader core instruction to invoke depth culling
CN111402348B (zh) 光照效果的形成方法、装置和渲染引擎
Fu et al. Dynamic shadow rendering with shadow volume optimization
CN112465692A (zh) 图像处理方法、装置、设备及存储介质
CN107148619B (zh) 用于多线程图形流水线的自由排序线程模型
CN114037795A (zh) 一种不可见像素的剔除方法、装置及存储介质
CN115205091A (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