CN115018692B - 一种图像渲染方法及电子设备 - Google Patents

一种图像渲染方法及电子设备 Download PDF

Info

Publication number
CN115018692B
CN115018692B CN202111552399.0A CN202111552399A CN115018692B CN 115018692 B CN115018692 B CN 115018692B CN 202111552399 A CN202111552399 A CN 202111552399A CN 115018692 B CN115018692 B CN 115018692B
Authority
CN
China
Prior art keywords
model
vertex
rate
function
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.)
Active
Application number
CN202111552399.0A
Other languages
English (en)
Other versions
CN115018692A (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.)
Honor Device Co Ltd
Original Assignee
Honor Device 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 Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202111552399.0A priority Critical patent/CN115018692B/zh
Publication of CN115018692A publication Critical patent/CN115018692A/zh
Application granted granted Critical
Publication of CN115018692B publication Critical patent/CN115018692B/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/005General purpose rendering architectures
    • 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
    • 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)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Image Generation (AREA)

Abstract

本申请实施例公开了一种图像渲染方法及电子设备,涉及图像处理领域,可以实现通过可变速率着色机制降低渲染开销,同时不会由于着色速率的降低产生对用户体验的影响。具体方案为:获取该应用程序下发的第一渲染命令,该第一渲染命令用于绘制第N帧图像中的第一模型。确定该第一模型的运动速率。根据该第一模型的运动速率,确定该第一模型的着色速率。运动速率越高,着色速率越低。运动速率越低,着色速率越高。

Description

一种图像渲染方法及电子设备
技术领域
本申请涉及图像处理技术领域,尤其涉及一种图像渲染方法及电子设备。
背景技术
电子设备在对图像进行渲染处理时,包括对图像的着色处理。示例性的,电子设备的图形处理器(graphics processing unit,GPU)可以分别对图像的每个像素进行着色,进而完成对整个图像的着色处理。
随着图像的像素的提高,对图像的着色处理会对电子设备产生较高的渲染负荷,如增加渲染过程中的算力和功耗开销。
发明内容
本申请实施例提供一种图像渲染方法及电子设备,可以根据当前帧图像中,模型的运动速率,灵活调整该模型的着色速率,从而实现通过可变速率着色机制降低渲染开销,同时不会由于着色速率的降低产生对用户体验的影响。
为了达到上述目的,本申请实施例采用如下技术方案:
第一方面,提供一种图像渲染方法,应用于电子设备,该电子设备中安装有应用程序,该方法包括:获取该应用程序下发的第一渲染命令,该第一渲染命令用于绘制第N帧图像中的第一模型。确定该第一模型的运动速率。根据该第一模型的运动速率,确定该第一模型的着色速率。
基于该方案,电子设备可以根据模型的运动速率,确定该模型的着色速率。在本示例中,该模型可以是一帧图像(如第N帧图像)中的任意一个模型。可以理解的是,在模型的运动速率较快时,则用户对该模型的着色的清晰度变化不敏感。基于此,本方案能够通过运动速率来适应性地调整对应模型的着色速率。由此使得对一些模型(如高速率运动的模型)的着色速率可以调整为较低。这样就能够有效地减少在该第N帧图像中的对快速运动模型的着色操作引入的开销,从而降低对整个帧图像的渲染过程中的算力以及功耗开销,同时不影响用户体验。
在一种可能的设计中,该第一模型的运动速率为第一速率时,该确定该第一模型的着色速率,具体包括:确定该第一模型的着色速率为第一着色速率。该第一模型的运动速率为第二速率时,该确定该第一模型的着色速率,具体包括:确定该第一模型的着色速率为第二着色速率。在该第一速率大于该第二速率时,该第一着色速率小于该第二着色速率。基于该方案,提供了一种对于不同运动速率模型的着色速率的对比示意。对于运动速率较高的模型,可以执行较低速率的着色操作,由此降低着色操作引入的功耗以及算力开销。对于运动速率较低的模型,可以执行较高速率的着色操作,由此提升对应模型的着色的清晰度。
在一种可能的设计中,该确定该第一模型的运动速率,包括:根据该第一模型在该第N帧图像中的第一位置,以及该第一模型在第N-1帧图像中的第二位置,确定该第一模型的运动速率。基于该方案,提供了一种确定模型的运动速率的方案示例。比如,可以根据相邻帧图像中,同一个模型的位置变化情况,确定该模型的运动速率。在不同实现中,运动速率可以通过两个帧图像中位置对应的运动向量标识,也可以通过该运动向量的模长标识,当然也可以通过该运动向量与相邻帧图像之间的时间差共同决定。
在一种可能的设计中,该方法还包括:获取该第一模型在第N-1帧图像中的第二位置。基于该方案,提供了一种确定第N帧图像中模型运动速率的方案示例。比如,可以结合前一帧图像中的位置,确定该第N帧图像中的运动速率。在另一些实施例中,电子设备还可以根据其他帧图像(如第N-M帧图像,M为大于或等于2的整数)中第一模型的位置,以及当前第N帧图像中第一模型的位置,确定运动速率。在另一些实施例中,电子设备还可以根据多个帧图像中第一模型分别所处位置,确定该第一模型的运动速率。
在一种可能的设计中,该电子设备的存储器中存储有该第一模型在该第N-1帧图像中的位置,该获取该第一模型在第N-1帧图像中的第二位置,包括:从该存储器中读取该第二位置。基于该方案,提供了一种获取第N-1帧图像中第一模型的位置的方案示例。比如,在执行第N-1帧图像的渲染过程中,电子设备可以将该第N-1帧图像中,第一模型的位置存储在存储器中,从而使得在后续渲染过程中(如对第N帧图像的渲染过程中)能够直接调用该第N-1帧图像中第一模型的位置。
在一种可能的设计中,该方法还包括:确定该第一模型在该第N帧图像中的第一位置。基于该方案,提供了一种确定第一模型的运动速率的方案实现。在本示例中,可以结合当前第N帧图像中,第一模型的位置,确定该第一模型的运动速率。
在一种可能的设计中,该方法还包括:根据该第一渲染命令,获取该第一模型的各个顶点在该第N帧图像中的第一顶点坐标,该第一顶点坐标是基于观察空间或者裁剪空间的坐标。该确定该第一模型在该第N帧图像中的第一位置,包括:根据该第一模型的各个顶点的第一顶点坐标,确定该第一位置。基于该方案,提供了一种获取当前帧图像中第一模型位置的方案示例。比如,可以根据应用程序下发的对该第一模型进行渲染的指令(如第一渲指令),确定该第一模型在当前帧图像(如第N帧图像)中的位置。在本示例中,该位置可以是指在观察空间或者裁剪空间下的位置。比如坐标等。
在一种可能的设计中,该根据该第一模型的各个顶点的第一顶点坐标,确定该第一位置,包括:根据该第一模型的各个顶点的第一顶点坐标,确定该第一模型的包围盒坐标。根据该包围盒坐标,确定该第一位置。基于该方案,提供了一种具体确定该第一模型的位置方案示例。例如,第一模型对应的包围盒(如AABB包围盒)对应的各个顶点,在三个方向上的中点位置,即可标识出该包围盒的位置。那么该包围盒的位置就可以为第一模型的位置。可以理解的是,包围盒的位置可以根据第一模型的各个顶点的坐标确定。
在一种可能的设计中,该方法还包括:根据该第一渲染命令,获取该第一模型的各个顶点的第二顶点坐标,以及该第一模型对应的MVP矩阵。其中,该第二顶点坐标是基于局部空间的坐标。该获取该第一模型的各个顶点在该第N帧图像中的第一顶点坐标,包括:根据该第二顶点坐标,和该MVP矩阵,获取该第一顶点坐标。基于该方案,提供了一种获取该第一模型在第N帧图像中,基于观察空间或者裁剪空间的顶点坐标的方案示例。电子设备可以根据第一渲染命令,获取第一模型的各个顶点在局部空间中的坐标(如第二坐标),通过MVP矩阵转换,获取各个顶点在观察空间或者裁剪空间的顶点坐标(如第一坐标)。
在一种可能的设计中,该电子设备的第一存储区域中存储有多个模型的基于局部空间的第二顶点坐标,该第一存储区域中的数据能够被该电子设备的处理器调用。该根据该第一渲染命令,获取该第二顶点坐标,包括:根据该第一渲染命令中的第一函数,获取第一存储位置,该第一存储位置用于指示该第二顶点坐标在该第一存储区域中的存储位置。该第一函数携带第一参数,该第一参数是该应用程序传递顶点数据过程中携带的参数。基于该方案,提供了一种根据第一渲染命令确定第一模型的局部坐标的方案示例。在原生逻辑中,应用程序可以在加载过程中,将所有可能使用到的模型的坐标通过命令下发给电子设备,存储在GPU能够调用的存储空间中。由于该存储空间中的数据无法直接被CPU调用,因此在本示例中,电子设备可以预先在CPU能够调用的存储空间中,备份存储该有可能使用到的模型的坐标。那么,结合应用程序下发的第一渲染命令中,指示第一模型的顶点数据的相关信息(如顶点坐标的存储位置等),电子设备就可以找到备份存储的数据中,与第一模型对应的顶点坐标等,由此便于计算在观察空间或裁剪空间中的顶点坐标。
在一种可能的设计中,该电子设备的第一存储区域中存储有至少一个MVP矩阵,该第一存储区域中的数据能够被该电子设备的处理器调用。该根据该第一渲染命令,获取该MVP矩阵,包括:根据该第一渲染命令中的第二函数,获取第二存储位置,该第二存储位置用于指示该MVP矩阵在该第二存储区域中的存储位置。该第二函数携带第二参数,该第二参数是该应用程序传递MVP矩阵过程中携带的参数。基于该方案,提供了一种具体的获取第一模型的MVP矩阵的方案示例。类似与前述方案中顶点坐标获取的方案示例,在原生逻辑中,应用程序可以在加载过程中,将所有可能使用到的模型的MVP矩阵通过命令下发给电子设备,存储在GPU能够调用的存储空间中。由于该存储空间中的数据无法直接被CPU调用,因此在本示例中,电子设备可以预先在CPU能够调用的存储空间中,备份存储该有可能使用到的模型的MVP矩阵。那么,结合应用程序下发的第一渲染命令中,指示第一模型的顶点数据的相关信息(如MVP矩阵的存储位置等),电子设备就可以找到备份存储的数据中,与第一模型对应的MVP矩阵等,由此便于计算在观察空间或裁剪空间中的MVP矩阵。
在一种可能的设计中,该方法还包括:获取该应用程序下发的第二渲染命令,该第二渲染命令用于将该应用程序运行过程中使用的第一数据存储在第二存储区域中,该第二存储区域是该电子设备的图形处理器GPU使用的存储区域,该第一数据包括该第一模型的各个顶点的第二顶点坐标以及该MVP矩阵。根据该第二渲染命令,将该第一数据存储在第一存储区域中,该第一存储区域是该电子设备的CPU能够调用的区域。基于该方案,提供了一种备份存储第一数据的方案示例。这样,就可以在需要使用模型的顶点数据(如顶点坐标)以及MVP矩阵时,从备份存储的区域中调用相应的数据。
在一种可能的设计中,该根据该第二渲染命令,将该第一数据存储在第一存储区域中,包括:获取该第二渲染命令包括的第三函数和第四函数,该第三函数携带第一参数,该第四函数携带第二参数。该第一参数是该应用程序传递顶点数据过程中携带的参数,该第二参数是该应用程序传递MVP矩阵过程中携带的参数。根据该第三函数和该第四函数,确定该第一数据,并将该第一数据存储在该第一存储区域中。基于该方案,提供了一种拦截命令并进行备份存储的方案示例。一般而言,用于传递顶点数据(如顶点坐标)以及MVP矩阵的函数是相对固定的。该函数中也会携带对应的参数。在本示例中,该第三函数、第四函数、第一参数以及第二参数可以通过静态分析获取。这样,通过针对性地拦截携带有对应参数的函数,就能够实现对下发的顶点坐标以及MVP矩阵的拦截,由此便于后续的备份存储。
在一种可能的设计中,该方法还包括:存储第一存储位置和该第二存储位置的映射关系,该映射关系用于根据该第一渲染命令,确定该第一模型的各个顶点的第二顶点坐标在该第一存储区域中的存储位置。该第一存储位置是该第一数据中包括的第一模型的顶点坐标与在该第二存储区域中的存储位置,该第二存储位置时该第一模型的顶点坐标在该第一存储区域中的存储位置。基于该方案,提供了一种维护备份存储的数据的方案示例。可以理解的是,备份存储数据的存储空间与应用程序指示存储的位置可以不同。这样,为了能够在后续调用过程中,根据应用程序下发的指令,确定备份存储的数据的具体位置,在本示例中,可以在备份存储时,通过映射关系,维护同一个数据在备份存储空间以及应用程序指示的存储空间的对应关系。这样,根据第一渲染命令指示的存储位置,就能够通过该映射关系,找到对应的备份存储的数据并使用。
在一种可能的设计中,该电子设备中设置有拦截模块,数据处理模块,以及存储器,该方法包括:该拦截模块拦截该第一渲染命令。该拦截模块将该第一渲染命令中的第一函数和第二函数传输给该数据处理模块,该第一函数携带有第一参数,该第一参数是该应用程序传递顶点数据过程中携带的参数。该第二函数携带有第二参数,该第二参数是该应用程序传递MVP矩阵过程中携带的参数。该数据处理模块根据该第一函数,确定该第一模型的第二顶点坐标在该电子设备的存储器中的第一存储位置。该第二顶点坐标是基于局部空间的坐标。该数据处理模块根据该第二函数,确定该第一模型的MVP矩阵在该电子设备的存储器中的第二存储位置。基于该方案,提供了本方案的一种基于不同模块之间交互的方案实现。在本示例中,不同的模块都可以设置在电子设备的框架层。拦截模块可以具有拦截的功能,数据处理模块可以具有数据分析以及向存储器的存储调用的功能。
在一种可能的设计中,该电子设备中还设置有计算模块,该方法还包括:该计算模块根据该第一存储位置和该第二存储位置,获取该第一模型的第二顶点坐标和该MVP矩阵,该计算模块计算该第一模型的第一顶点坐标,该第一顶点坐标是基于观察空间或者裁剪空间的坐标。该计算模块根据该第一顶点坐标,确定该第一模型的包围盒坐标。该计算模块根据该包围盒坐标,确定该第一模型在该第N帧图像中的第一位置。基于该方案,提供了一种基于模块划分的第一模型的位置确定方案示例。在本示例中,计算模块可以用于从存储器中读取顶点坐标以及MVP矩阵,并计算获取经过矩阵变换之后的坐标。此外,计算模块还可以根据矩阵变换之后的坐标(如第一顶点坐标),确定包围盒位置。在一些实现中,该包围盒位置,可以通过包围盒坐标标识。该包围盒坐标可以是包围盒每个顶点的坐标,也可以是包围盒的中心坐标,也可以是包围盒的各个方向上极值坐标的中点。
在一种可能的设计中,在该拦截模块拦截到来自该应用程序的drawelement的情况下,该计算模块根据该第一存储位置和该第二存储位置,获取该第一模型的第二顶点坐标和该MVP矩阵。基于该方案,提供了一种计算模块计算第一模型的位置的触发机制。比如在拦截模块拦截到当前Drawcall中携带的Drawelement时,则可以确定即将对当前模型进行着色操作,那么计算模块就可以计算该第一模型的位置,以便于获取第一模型的运动速率。
在一种可能的设计中,该方法还包括:该计算模块获取该第一模型在第N-1帧图像中的第二位置,该计算模块根据该第一位置和该第二位置,确定该第一模型的运动速率。基于该方案,计算模块还可以用于根据不同帧图像中第一模型的位置,计算获取第一模型的运动速率。
在一种可能的设计中,该电子设备还设置有决策模块,该方法还包括:该决策模块根据该第一模型的运动速率,确定该第一模型的着色速率。该决策模块将该第一模型的着色速率发送给该电子设备的图形库,以便该图形库指示该电子设备的GPU使用该第一模型的着色速率对该第一模型进行着色操作。基于该方案,决策模块可以用于根据计算获取的运动速率,确定对当前第一模型的着色速率。比如,运动速率越大,着色速率越低。对应的,运动速率越低,着色速率越高。
在一种可能的设计中,该方法还包括:该拦截模块拦截来自该应用程序的第二渲染命令,该第二渲染命令用于将该应用程序运行过程中使用的第一数据存储在第二存储区域中,该第二存储区域是该电子设备的图形处理器GPU使用的存储区域,该第一数据包括该第一模型的各个顶点的第二顶点坐标以及该MVP矩阵。该拦截模块将该第二渲染命令中包括的第三函数和第四函数发送给该数据处理模块,该第三函数携带有该第一参数,该第四函数携带有该第二参数。该数据处理模块根据该第三函数和该第四函数,将该第一数据存储在该存储器的第一存储区域中。基于该方案,提供了一种备份存储数据的方案示例。该具体实现与前述备份存储方案中的方案实现类似。
第二方面,提供一种电子设备,电子设备包括一个或多个处理器和一个或多个存储器;一个或多个存储器与一个或多个处理器耦合,一个或多个存储器存储有计算机指令;当一个或多个处理器执行计算机指令时,使得电子设备执行如上述第一方面以及各种可能的设计中任一种的图像渲染方法。
第三方面,提供一种芯片系统,芯片系统包括接口电路和处理器;接口电路和处理器通过线路互联;接口电路用于从存储器接收信号,并向处理器发送信号,信号包括存储器中存储的计算机指令;当处理器执行计算机指令时,芯片系统执行如上述第一方面以及各种可能的设计中任一种的图像渲染方法。
第四方面,提供一种计算机可读存储介质,计算机可读存储介质包括计算机指令,当计算机指令运行时,执行如上述第一方面以及各种可能的设计中任一种的图像渲染方法。
第五方面,提供一种计算机程序产品,计算机程序产品中包括指令,当计算机程序产品在计算机上运行时,使得计算机可以根据指令执行如上述第一方面以及各种可能的设计中任一种的图像渲染方法。
应当理解的是,上述第二方面,第三方面,第四方面,以及第五方面提供的技术方案,其技术特征均可对应到第一方面及其可能的设计中提供的图像渲染方法,因此能够达到的有益效果类似,此处不再赘述。
附图说明
图1为一种坐标空间的示意图;
图2为一种可变速率着色的示意图;
图3为本申请实施例提供的一种电子设备的组成示意图;
图4为本申请实施例提供的一种电子设备的软件组成示意图;
图5为本申请实施例提供的一种渲染过程的示意图;
图6为本申请实施例提供的一种图像渲染方法的流程示意图;
图7为本申请实施例提供的又一种图像渲染方法的流程示意图;
图8为本申请实施例提供的又一种图像渲染方法的流程示意图;
图9为本申请实施例提供的又一种图像渲染方法的流程示意图;
图10为本申请实施例提供的又一种图像渲染方法的流程示意图;
图11为本申请实施例提供的一种模型包围盒的示意图;
图12为本申请实施例提供的一种模型位置的示意图;
图13为本申请实施例提供的又一种图像渲染方法的流程示意图;
图14为本申请实施例提供的一种着色速率的确定效果示意图;
图15为本申请实施例提供的又一种电子设备的组成示意图;
图16为本申请实施例提供的一种芯片系统的组成示意图。
具体实施方式
电子设备可以根据其中安装的应用程序下发的渲染命令,进行不同帧图像的渲染,从而获取各个帧图像对应的显示数据,进而控制显示器根据这些显示数据实现各个帧图像的显示。
在进行图像渲染的过程,电子设备需要确定当前帧图像中包括的一个或多个模型的顶点位置。在本申请实施例中,一个模型可以对应到一个模型,该针对一个模型的渲染命令可以通过一个Drawcall下发。
示例性的,应用程序下发的渲染命令中,可以包括模型的各个顶点的坐标。在一些实现中,该渲染命令中包括的顶点坐标可以是基于模型自身的局部坐标系的坐标。在本申请中,模型基于局部坐标系的分布空间可以称为局部空间(Local Space)。电子设备为了能够确定模型在显示屏上各个顶点的坐标,可以基于局部空间中模型的坐标进行矩阵变换。由此获取模型在基于显示屏的空间(如称为屏幕空间(Screen Space))坐标系下的坐标。
作为一种示例,电子设备可以通过局部空间向世界空间(World Space),再向观察空间(View Space),再向裁剪空间(Clip Space),再向屏幕空间(Screen Space)的矩阵变换处理,将模型的各个顶点在局部空间下的局部坐标转换为屏幕空间下的坐标。
示例性的,参考图1,示出了一种坐标由局部空间向世界空间向观察空间向裁剪空间的矩阵变换的逻辑过程示意。在本示例中,以要渲染的模型为物体1为例。如图1所示,在局部空间中,坐标系可以是基于物体1自身的。比如,局部空间中的坐标系原点可以是设置在物体1的中心,或者一个顶点所在的位置等。应用程序可以在下发对物体1的渲染命令中,携带该局部空间的坐标系下,物体1的各个顶点的坐标,即局部坐标。电子设备可以通过应用程序下发的M矩阵,将局部空间中的坐标转换为世界空间中的坐标。其中,世界空间可以是相对于局部空间更大的区域。比如,以应用程序下发的渲染命令用于进行游戏图像的渲染为例。局部空间可以对应能够覆盖某一个模型(如物体1)的较小区域。而世界空间可以对应游戏中,包括物体1以及其他物体(如物体2)的一张地图的区域。电子设备可以将局部空间中的局部坐标,结合M矩阵进行M矩阵变换,从而获取物体1在世界空间中的坐标。类似的,在应用程序下发了在该帧图像中的对物体2的渲染命令的情况下,通过上述M矩阵变换,电子设备还可以获取物体2在世界空间中的坐标。
在获取当前帧图像中,各个物体的顶点在世界空间中的坐标之后,电子设备可以根据应用程序下发的V矩阵,将世界空间中的坐标,转换为观察空间中的坐标。可以理解的是,世界空间中的坐标可以是三维空间中的坐标。而电子设备在向用户展示帧图像时,各个模型(如物体1,物体2等)则是在二维的显示屏上进行显示的。在使用不同的观察角度观察世界空间中的模型时,则会看到不同的二维画面。该观察角度可以是与在世界空间中设置的摄像机(或者观察者)的位置相关的。在本示例中,与摄像机位置对应的坐标空间可以称为观察空间。示例性的,以摄像机设置在世界空间中的y轴正方向为例。那么基于V矩阵的变换,就可以获取在该摄像机位置对应的观察空间中,物体1和物体2的各个顶点的坐标。如图1所示,由于摄像机位于y轴正方向,向下进行拍摄,因此对应在观察空间中的物体1和物体2可以呈现为俯视效果。
在电子设备获取观察空间中的各个模型的坐标后,可以将其投影到裁剪坐标。该裁剪坐标对应的坐标空间可以称为裁剪空间。可以理解的是,在进行V矩阵变换过程中,可以是对世界空间中的较大区域的变换,因此获取的图像范围可能是比较大的。而由于电子设备显示屏的尺寸有限,因此可能无法将该观察空间中的所有模型同时进行显示。在本示例中,电子设备就可以将观察空间中的各个模型的坐标,投影到裁剪空间中。在投影到裁剪空间中后,能够显示在显示屏上的模型的坐标可以在-1.0到1.0的范围内。而对于无法显示在显示屏上的部分模型的坐标,则可以在-1.0到1.0的范围之外。这样,电子设备就可以根据坐标在-1.0到1.0范围内的顶点坐标进行对应的显示。示例性的,电子设备可以根据应用程序下发的P矩阵,对观察空间中的各个坐标进行P矩阵变换,从而获取各个坐标对应的在裁剪空间中的裁剪坐标。
可以理解的是,通过上述MVP矩阵的变换(即M矩阵变换,V矩阵变换,以及P矩阵变换),电子设备就能够获取在显示屏上显示的各个模型的顶点的坐标(即裁剪坐标)。接着,电子设备还可以将裁剪坐标变换为屏幕坐标,比如,使用视口变换(Viewport Transform)将位于-1.0到1.0范围的坐标变换到由GlViewport函数所定义的坐标范围内。最后变换出来的坐标将会送到光栅器,将其转化为片段,进而获取与各个像素对应的显示数据。基于这些显示数据,电子设备就可以控制显示屏进行对应的显示。
电子设备在进行图像的渲染过程中,除了需要根据上述方案确定各个模型的顶点坐标之外,还需要对当前帧图像中的各个像素进行着色,即确定各个像素的颜色数据。从而根据各个像素的颜色数据,控制显示器在对应的像素位置进行对应颜色的显示。
在一些实现中,电子设备可以在渲染过程中,以一个像素为单位,对每个像素进行着色,即进行着色速率为1×1的着色处理。从而实现对整个帧图像的着色。
随着电子设备显示屏的分辨率以及刷新率的提升,加上需要渲染的帧图像的场景越来越复杂,基于单个像素的着色处理会对电子设备的渲染过程造成较大的内存和功耗开销,进而出现发热或者掉帧现象,影响用户体验。
为了应对上述问题,一些电子设备可以通过提供可变速率着色的功能,降低着色过程中对内存和功耗的开销。
示例性的,在着色速率为1×1的着色机制下,电子设备可以分别使用着色器,对一个像素进行着色。完成该像素的着色处理之后,电子设备可以使用着色器,对另一个像素进行着色。比如,结合图2中的(a),电子设备可以使用着色器,对位于第一行第一列的像素进行着色。完成该第一行第一列的像素的着色之后,电子设备可以使用着色器,对其他像素,如第一行第二列的像素进行着色。这样,要完成如图2中的(a)所示的5×5的像素的着色,电子设备就需要使用着色器进行至少25次着色处理。在执行着色处理的GPU具有较强的并行处理能力时,比如GPU可以同时通过着色器对3个像素分别进行着色,那么电子设备也可以通过着色器并行地实现多个像素(如3个像素)的着色处理。然而多发并行处理的过程虽然能够节省处理时间,但是并不会减少电子设备在进行着色处理的过程中的负荷。为了便于说明,以下以电子设备中的GPU同一时刻使用着色器对1个像素进行着色为例进行说明。
与以单个像素为单位进行着色处理相对的,在电子设备使用可变速率着色功能的情况下,电子设备可以使用着色器,通过一次着色处理完成对多个像素的着色。比如,以一次着色处理可以完成对4个像素的着色(如着色速率为2×2)为例。结合图2中的(b),电子设备可以通过一次着色处理,实现对第一行第一列像素到第二行第二列像素的着色。这样,通过可变速率着色,电子设备就可以通过更少的着色处理,完成在对图像渲染过程中的着色。
可以理解的是,可变速率着色后的像素组成的图像的颜色精细度会低于一般的着色机制(即以一个像素为粒度的着色处理)获取的像素组成的图像。那么,如何合理地使用可变速率着色,同时不会使得用户对图像的观感产生明显的影响,就成为了可变速率着色功能使用的关键。
为了解决上述问题,本申请实施例提供的渲染方案,能够合理地选取帧图像中需要使用可变速率着色功能的区域,使得电子设备可以通过可变速率着色功能降低渲染过程中的功耗和发热的同时,渲染获取的图像不会对用户的观感产生明显的影响。由此即可在降低电子设备的功耗和发热的同时,提升用户体验。示例性的,电子设备可以根据相邻两帧图像中,同一个模型所在位置的差异,确定该模型在这两个帧图像中的运动速率,进而根据运动速率灵活确定对该模型的着色速率。比如,运动速率越高,模型颜色精度的变化越不易被用户察觉,那么可以采用较低的着色速率进行快速着色。又如,运动速率越低,模型颜色精度的变化越容易被用户察觉,那么可以采用较高的着色速率获取高精度的着色效果。
在本申请实施例中,较低的着色速率对应的同时着色的像素数量可以大于较高的着色速率对应的同时着色的像素数量。比如,对比1×1的着色速率以及2×2的着色速率,那么2×2的着色速率可以为较低的着色速率,1×1的着色速率可以为较高的着色速率。
以下结合附图对本申请实施例提供的方案进行详细说明。
需要说明的是,本申请实施例提供的渲染方法,可以应用在用户的电子设备中。比如,该电子设备可以是手机、平板电脑、个人数字助理(personal digital assistant,PDA)、增强现实(augmented reality,AR)\虚拟现实(virtual reality,VR)设备、媒体播放器等便携式移动设备,该电子设备也可以是智能手表等具备图像显示能力的可穿戴电子设备。本申请实施例对该设备的具体形态不作特殊限制。
请参考图3,为本申请实施例提供的一种电子设备300的结构示意图。
如图3所示,该电子设备300可以包括处理器310,外部存储器接口320,内部存储器321,通用串行总线(universal serial bus,USB)接口330,充电管理模块340,电源管理模块341,电池342,天线1,天线2,移动通信模块350,无线通信模块360,音频模块370,传感器模块380,摄像头393,显示屏394等。其中,传感器模块380可以包括压力传感器,陀螺仪传感器,气压传感器,磁传感器,加速度传感器,距离传感器,接近光传感器,指纹传感器,温度传感器,触摸传感器,环境光传感器,骨传导传感器等。
可以理解的是,本实施例示意的结构并不构成对电子设备300的具体限定。在另一些实施例中,电子设备300可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器310可以包括一个或多个处理单元,例如:处理器310可以包括中央处理器(Central Processing Unit,CPU),应用处理器(application processor,AP),调制解调处理器,GPU,图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器310中。
在一些实施例中,处理器310可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口330等。在另一些实现中,接口中的USB接口可以通过micro USB接口,和/或type C接口,和/或lighting接口实现。
电子设备300可以通过ISP,摄像头393,视频编解码器,GPU,显示屏394以及应用处理器等实现拍摄功能。
充电管理模块340用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块340可以通过USB接口330接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块340可以通过电子设备300的无线充电线圈接收无线充电输入。充电管理模块340为电池342充电的同时,还可以通过电源管理模块341为电子设备300供电。
电源管理模块341用于连接电池342,充电管理模块340与处理器310。电源管理模块341接收电池342和/或充电管理模块340的输入,为处理器310,内部存储器321,外部存储器,显示屏394,摄像头393,和无线通信模块360等供电。电源管理模块341还可以用于监测电池342容量,电池342循环次数,电池342健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块341也可以设置于处理器310中。在另一些实施例中,电源管理模块341和充电管理模块340也可以设置于同一个器件中。
电子设备300的无线通信功能可以通过天线1,天线2,移动通信模块350,无线通信模块360,调制解调处理器310以及基带处理器310等实现。
电子设备300通过GPU,显示屏394,以及应用处理器310等实现显示功能。GPU为图像处理的微处理器,连接显示屏394和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器310可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏394用于显示图像,视频等。显示屏394包括显示面板。显示面板可以采用液晶显示屏394(liquid crystal display,LCD),有机发光二极管(organic light-emittingdiode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganic light emitting diode,AMOLED),柔性发光二极管(flex light-emittingdiode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot lightemitting diodes,QLED)等。在一些实施例中,电子设备300可以包括1个或N个显示屏394,N为大于1的正整数。
外部存储器接口320可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备300的存储能力。外部存储卡通过外部存储器接口320与处理器310通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器321可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器310通过运行存储在内部存储器321的指令,从而执行电子设备300的各种功能应用以及数据处理。内部存储器321可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备300使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器321可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
音频模块370用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块370还可以用于对音频信号编码和解码。在一些实施例中,音频模块370可以设置于处理器310中,或将音频模块370的部分功能模块设置于处理器310中。
在传感器模块380中可以包括多个不同的传感器。比如,其中可以包括触摸传感器,压力传感器等。该触摸传感器也称“触控面板”。触摸传感器可以设置于显示屏394,由触摸传感器与显示屏394组成触摸屏,也称“触控屏”。触摸传感器用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。在一些实施例中,可以通过显示屏394提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器也可以设置于电子设备300的表面,与显示屏394所处的位置不同。
电子设备300中还可以包括按键、马达、指示器、SIM卡接口等。
本申请实施例提供的渲染方法均能够应用于具有如图3所示的组成的电子设备中。
需要说明的是,上述图3及其说明仅为本申请实施例提供的方案的一种应用载体的示例。图3的组成并不构成对本申请实施例所述的方案的限定。在另一些实施例中,电子设备还可以具有比图3所示组成更多或更少的部件。
在如图3所示的示例中,提供了电子设备的硬件组成。在一些实施例中,电子设备还可以通过其各个硬件部件(如图3所示的硬件组成),运行操作系统。在该操作系统中,可以设置有不同的软件分层,从而实现不同程序的运行。
示例性的,图4为本申请实施例提供的一种电子设备的软件组成的示意图。如图4所示,该电子设备可以包括应用(Application,APP)层401,框架(Framework)层402,系统库403,以及硬件层404等。
其中,应用层401也可以称为应用程序层。在一些实现中,应用层401可以包括一系列应用程序包。应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序。应用程序包还可以包括需要通过渲染图像向用户展示图片或者视频的应用程序。比如,该应用层401中包括的应用程序可以为游戏类应用程序(简称为游戏应用),例如等。
框架层402也可以称为应用程序框架层。该框架层402可以为应用层401的应用程序提供应用编程接口(application programming interface,API)和编程框架。框架层402包括一些预先定义的函数。
示例性的,框架层402可以包括窗口管理器,内容提供器,视图系统,资源管理器,通知管理器,活动管理器,输入管理器等。窗口管理器提供窗口管理服务(Window ManagerService,WMS),WMS可以用于窗口管理、窗口动画管理、surface管理以及作为输入系统的中转站。内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。该数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。活动管理器可以提供活动管理服务(Activity Manager Service,AMS),AMS可以用于系统组件(例如活动、服务、内容提供者、广播接收器)的启动、切换、调度以及应用进程的管理和调度工作。输入管理器可以提供输入管理服务(Input Manager Service,IMS),IMS可以用于管理系统的输入,例如触摸屏输入、按键输入、传感器输入等。IMS从输入设备节点取出事件,通过和WMS的交互,将事件分配至合适的窗口。
在本申请实施例中,在框架层402中可以设置一个或多个功能模块,用于实现本申请实施例提供的渲染方案。示例性的,框架层402中可以设置有拦截模块,数据处理模块,计算模块,以及决策模块等。在后续示例中,将会对上述各个模块的功能进行详细说明。
系统库403可以包括多个功能模块。例如:表面管理器(surface manager),媒体框架(Media Framework),标准C库(Standard C library,libc),嵌入式系统的开放图形库(OpenGL for Embedded Systems,OpenGL ES)、Vulkan、SQLite、Webkit等。
其中,表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。媒体框架支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:动态图像专家组4(Moving PicturesExperts Group,MPEG4),H.264,动态影像专家压缩标准音频层面3(Moving PictureExperts Group Audio Layer3,MP3),高级音频编码(Advanced Audio Coding,AAC),自适应多码解码(Adaptive Multi-Rate,AMR),联合图像专家组(Joint Photographic ExpertsGroup,JPEG,或称为JPG),便携式网络图形(Portable Network Graphics,PNG)等。OpenGLES和/或Vulkan提供应用程序中2D图形和3D图形的绘制和操作。SQLite为电子设备的应用程序提供轻量级关系型数据库。
在一些实现中,系统库403中的OpenGL ES能够提供可变速率着色功能。那么,电子设备可以在需要针对某一个绘制命令(Drawcall)执行可变速率着色时,调用OpenGL ES中的可变速率着色API,与其他指令一同实现对当前Drawcall的可变速率着色。比如,电子设备可以使用较低的速率(如2×1,2×2,4×2,4×4等)对当前Drawcall进行着色,由此降低对当前Drawcall进行着色产生的开销。
在如图4的示例中,电子设备中还可以包括硬件层404。该硬件层404中可以包括处理器(如CPU,GPU等),以及具有存储功能的部件(如存储器)。在一些实现中,CPU可以用于控制框架层402中的各个模块实现其各自的功能,GPU可以用于根据框架层402中各个模块处理后的指令所调用的图形库(如OpenGL ES)中的API执行相应的渲染处理。
为了能够对本申请实施例提供的软件架构中各个层的功能进行更加清楚的说明,以下以图像渲染为例,对具有如图4所示软件组成的各个组件的功能实现进行举例说明。
示例性的,请参考图5。应用层中的应用程序在需要进行图像渲染时,可以下发渲染命令。在以下说明中,应用程序下发的一个渲染命令也可以称为一个Drawcall。在不同示例中,该渲染命令可以包括不同的内容。比如,在一些实施例中,以应用程序需要渲染帧图像中的图形为例。在下发的渲染命令中可以包括该需要被渲染的图形的顶点数据。在一些实现中,该顶点数据可以用于指示待渲染的图形的顶点的坐标。该坐标可以是基于局部空间的坐标。在渲染命令中,还可以包括如图1所示的说明中的MVP矩阵,以及一个或多个绘制元素(Drawelement)。框架层402可以在接收到该渲染命令之后,将渲染命令转换为渲染指令,在渲染指令中可以携带上述顶点数据,MVP矩阵,以及一个或多个Drawelement等。在一些实现中,框架层402还可以根据应用程序的指示,从系统库403的图形库中获取当前Drawcall所需的API,以便使用该API对应的功能指示其他模块(如GPU)进行渲染操作。示例性的,电子设备可以在Drawelement之前,确定可变速率着色过程中所要使用的参数。电子设备还可以通过调用可变速率着色API,结合前述参数,发送可变着色指令。实现对后续Drawelement的可变速率着色。以硬件层404中的GPU执行渲染为例。GPU可以获取可变着色指令,并响应于该可变着色指令,使用对应的参数指示的着色速率执行Drawelement。
本申请实施例提供的渲染方法也可以应用于具有如图4所示的软件组成的电子设备中。以下结合如图4所示的软件组成,对本申请实施例提供的方案进行说明。
需要说明的是,在以下示例中,为了能够更加清楚地对本申请提供的方案进行说明,根据不同的功能,对电子设备进行模块划分,该模块划分可以理解为具有如图3或图4所示组成的电子设备的另一种划分形式。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
以下结合如图4所示的软件组成,对本申请实施例提供的渲染方法的具体实现进行详细说明。为了便于说明,以下示例中,以下发渲染命令的应用程序为游戏应用,该游戏应用使用OpenGL图形库为例进行说明。应当理解的是,在其他的不同渲染引擎/渲染环境下,实施机制类似,仅对应的函数可能存在差异。
在游戏开始运行时(或游戏加载时),游戏应用可以加载后续帧图像的渲染过程中可能要使用的数据。在一些实现中,在游戏加载时加载的数据可以包括后续渲染过程中可能使用到的所有模型的顶点数据以及一个或多个帧图像的MVP矩阵。在另一些实现中,在一次游戏加载时可能只会加载一部分模型的顶点数据。这样,在需要使用到新的模型时,电子设备就可以再次执行加载过程,将该新的模型的顶点数据加载到GPU中。或者,电子设备可以通过在下发的渲染指令中携带该新的模型的顶点数据,实现顶点数据的加载。在另一些实现中,游戏应用还可以在游戏加载过程中只进行顶点数据的传输,而对于每帧图像都可能不同的MVP矩阵,游戏应用可以在游戏运行过程中,进行该MVP矩阵的传输。在本申请实施例中,顶点数据可以包括顶点坐标,该顶点坐标可以是基于局部空间的坐标。
为了便于说明,以下示例中,以游戏通过一次加载,实现所有模型的顶点坐标,以及MVP矩阵的加载为例。
在本示例中,通过游戏加载,游戏应用可以通过包括多个指令的命令,传输所有可能用到模型的顶点坐标以及一个或多个MVP矩阵。通过这些指令,模型的顶点坐标以及MVP矩阵可以被存储到GPU所能够调用的内存空间中。
示例性的,结合图6,在游戏启动时,游戏应用可以下发命令1,用于实现上述加载过程。在一些实施例中,以在该命令1中包括glGenbuffers函数,glBindbuffer函数,glBufferdata函数,glBufferSubData函数,glMapBuffer函数,glMapBufferRange函数中的一个或多个为例。
其中,glGenbuffers函数可以用于创建缓存。即在电子设备的内存中划分一个或多个存储空间,每个存储空间都可以具有一个标识(ID)。该划分的存储空间可以用于存储渲染过程中的各项数据。比如,一些缓存可以用于存储模型的顶点坐标,一些缓存可以用于存储MVP矩阵等。
glBindbuffer函数可以用于绑定缓存。通过该函数的绑定,就可以将后续的操作绑定在对应的缓存上。比如,以创建的缓存包括缓存1,缓存2,缓存3为例。通过glBindbuffer(1),就可以将后续的操作绑定在缓存1上。例如,后续操作包括写入数据(如顶点坐标)的操作,那么电子设备就可以将顶点坐标写入到缓存1进行存储。
glBufferdata函数可以用于传递数据。示例性的,在glBufferdata函数携带的数据非空(NULL),则电子设备就可以将该glBufferdata函数携带的数据(或者数据的指针)存储到已经绑定的缓存上。比如,在glBufferdata函数携带有顶点坐标时,则电子设备就可以将该顶点坐标存储到已经绑定的帧缓冲上。又如,在glBufferdata函数携带有顶点坐标的索引时,则电子设备就可以将该顶点坐标索引存储到已经绑定的帧缓冲上。类似于glBufferdata函数,glMapBuffer函数以及glMapBufferRange函数也可以用于进行数据的传递。例如,glMapBuffer函数可以用于将一个缓冲区对象中的数据映射到电子设备中的地址空间。这样,在GPU需要使用这些数据时,可以从电子设备中的地址空间直接读取该数据。不同于glMapBuffer函数,glMapBufferRange函数可以将一部分特定的数据映射到电子设备的地址空间中,以便于后续GPU调用。
glBufferSubData函数可以用于数据的更新。比如,游戏应用可以通过该glBufferSubData函数,实现对顶点坐标中的一部分或全部进行更新。从而达到指示电子设备(如电子设备的GPU)根据新的顶点坐标进行绘制渲染的效果。
在本申请实施例中,电子设备可以对命令1的指令流进行拦截,由此获取传输顶点数据以及MVP矩阵的指令。电子设备还可以对这些获取的指令进行备份存储。如,电子设备可以将这些数据存储在内存中CPU能够调用的区域。由此使得在游戏运行之前,电子设备的内存中就可以存储有后续渲染过程中可能用到的顶点数据(如顶点坐标)以及MVP矩阵。可以理解的是,原生命令(如命令1中的指令流)是用于将数据传输到GPU所能够调用的存储区域的,因此,通过本示例中的备份存储,使得CPU也可以具有对顶点数据和MVP矩阵的调用能力,由此保证后续方案的实现。
示例性的,如图6所示,电子设备中的拦截模块可以拦截命令1中包括的glGenbuffers函数,glBindbuffer函数,glBufferdata函数,glBufferSubData函数,glMapBuffer函数,以及glMapBufferRange函数。拦截模块还可以将这些函数传输给数据处理模块进行分析处理。如数据处理模块可以筛选来自拦截模块的函数中,携带参数1的函数。其中,参数1可以为指示用于进行顶点相关数据传输的参数。这样,数据处理模块就可以获取传输顶点数据相关的指令。那么基于这些筛选获取的函数,数据处理模块就可以执行对顶点数据的备份存储。
其中,该参数1可以是通过离线分析获取的。在一些实施例中,该参数1可以预先保存在电子设备(如数据处理模块)中,以便于数据处理模块可以基于该参数1执行对顶点数据相关指令的筛选。作为一种可能的实现,该参数1可以包括GL_ELEMENT_ARRAY_BUFFER和/或GL_ARRAY_BUFFER。
与针对顶点数据指令的拦截以及备份存储类似的,拦截模块拦截的拦截命令1中包括的glGenbuffers函数,glBindbuffer函数,glBufferdata函数,glBufferSubData函数,glMapBuffer函数,以及glMapBufferRange函数也可以用于进行MVP矩阵的传输。
在本申请中,在游戏运行过程中,该glGenbuffers函数,glBindbuffer函数,glBufferdata函数,glBufferSubData函数,glMapBuffer函数,以及glMapBufferRange函数中的一个或多个在进行顶点坐标传递时,可以称为第一函数。对应的,在游戏加载过程中,用于进行顶点数据传输的函数可以称为第三函数,用于进行MVP矩阵传输的函数可以称为第四函数。
那么,数据处理模块也可以筛选来自拦截模块的函数中,携带参数2的函数,来获取用于传输MVP矩阵的函数。其中,参数2可以为指示用于进行MVP矩阵传输的参数。这样,数据处理模块就可以获取传输MVP矩阵相关的指令。那么基于这些筛选获取的函数,数据处理模块就可以执行对MVP矩阵的备份存储。
其中,类似于参数1,该参数2可以是通过离线分析获取的。在一些实施例中,该参数2可以预先保存在电子设备(如数据处理模块)中,以便于数据处理模块可以基于该参数2执行对MVP矩阵相关指令的筛选。作为一种可能的实现,该参数2可以包括GL_UNIFORM_BUFFER。
上述示例中,是以拦截模块将所有拦截的指令不经过处理直接传输给数据处理模块进行分析处理为例进行说明的。在本申请的另一些实施例中,该拦截模块还可以具有数据分析能力。比如,拦截模块可以只拦截携带有参数1以及参数2的glGenbuffers函数,glBindbuffer函数,glBufferdata函数,glBufferSubData函数,glMapBuffer函数,以及glMapBufferRange函数。其中,参数1可以为指示用于进行顶点相关数据传输的参数。参数2可以为指示用于进行MVP矩阵传输的参数。
这样,数据处理模块就可以直接对来自拦截模块的指令进行备份存储。由此可以减轻数据处理模块的数据处理压力。
以下说明中,以拦截模块拦截顶点相关指令(如携带参数1的指令)以及MVP相关指令(如携带参数2的指令)传输给数据处理模块进行备份存储为例进行说明。
数据处理模块可以根据来自拦截模块的信息,如顶点相关指令和/或MVP相关指令,进行顶点数据和/或MVP矩阵的备份存储。
示例性的,本申请实施例中涉及的备份存储,可以通过跳转表的形式实现。该跳转表可以用于指示原生ID与备份ID的对应关系。其中,原生ID可以为命令1中携带函数所指示需要操作的缓存ID。备份ID可以为在内存中配置的,可以被CPU调用的用于进行数据的备份存储的缓存ID。
示例性的,以拦截模块拦截的顶点数据相关指令的函数包括如下函数为例:
glGenbuffers(GL_ARRAY_BUFFER,1)//为顶点数据创建缓存,缓存ID为1;
glBindbuffer(GL_ARRAY_BUFFER,1)//为顶点数据绑定ID为1的缓存;
glBufferdata(GL_ARRAY_BUFFER,data1)//向已经绑定的缓存写入data1;
glBufferSubData(GL_ARRAY_BUFFER,data2)//更新已经绑定的缓存中的数据为data2。
那么,该示例中的原生ID就可以为1。以对应的备份ID为11为例。
根据拦截的glGenbuffers(GL_ARRAY_BUFFER,1),数据处理模块就可以在备份缓存中创建ID为与1对应的11的缓存。
根据拦截的glBindbuffer(GL_ARRAY_BUFFER,1),数据处理模块就可以控制后续操作在ID为与1对应的11的缓存上进行。
根据拦截的glBufferdata(GL_ARRAY_BUFFER,data1),数据处理模块就可以将data1写入备份缓存中的ID为11的存储空间中。
根据拦截的glBufferSubData(GL_ARRAY_BUFFER,data2),数据处理模块就可以将data2更新到备份缓存中的ID为11的存储空间中。
其中,data1和data2可以包括顶点数据,如顶点坐标,顶点的法向量等。
由此,就可以实现对命令1中携带的顶点数据相关指令的备份存储。
与顶点数据的备份存储类似的,数据处理模块还可以对MVP矩阵进行备份存储。
示例性的,以拦截模块拦截的MVP矩阵相关指令的函数包括如下函数为例:
glGenbuffers(GL_UNIFORM_BUFFER,2)//为统一变量(如MVP矩阵)创建缓存,缓存ID为2;
glBindbuffer(GL_UNIFORM_BUFFER,2)//为统一变量(如MVP矩阵)绑定ID为2的缓存;
glBufferdata(GL_UNIFORM_BUFFER,data3)//向已经绑定的缓存写入data3;
glBufferSubData(GL_UNIFORM_BUFFER,data4)//更新已经绑定的缓存中的数据为data4。
其中,data3和data4可以包括MVP矩阵。
那么,该示例中的原生ID就可以为2。以对应的备份ID为22为例。
根据拦截的glGenbuffers(GL_UNIFORM_BUFFER,2),数据处理模块就可以在备份缓存中创建ID为与2对应的22的缓存。该ID为22的备份缓存可以用于存储统一变量对应的数据,如该统一变量可以包括MVP矩阵。
根据拦截的glBindbuffer(GL_UNIFORM_BUFFER,2),数据处理模块就可以控制后续操作在ID为与2对应的22的缓存上进行。
根据拦截的glBufferdata(GL_UNIFORM_BUFFER,data3),数据处理模块就可以将data3写入备份缓存中的ID为22的存储空间中。
根据拦截的glBufferSubData(GL_UNIFORM_BUFFER,data4),数据处理模块就可以将data4更新到备份缓存中的ID为22的存储空间中。
其中,data3和data4可以包括MVP矩阵,如M矩阵,VP矩阵等。
由此,就可以实现对命令1中携带的MVP矩阵相关指令的备份存储。
在对指令以及相关数据进行备份存储之外,数据处理模块还可以存储包括原生ID与备份ID的对应关系的跳转表,从而可以根据后续应用下发的命令中的ID,准确地找到备份存储中对应数据的ID。
例如,如下表1示出了跳转表的一种示例。
表1
原生ID 备份ID
1 11
2 22
…… ……
基于表1,在游戏应用下发指示对ID为1的缓存执行操作时,电子设备就可以确定在备份ID为11的存储空间中可以保存有对应的数据。类似的,在游戏应用下发指示对ID为2的缓存执行操作时,电子设备就可以确定在备份ID为22的存储空间中可以保存有对应的数据。
需要说明的是,为了保证命令1的顺利执行,在本示例中,拦截模块还可以将没有携带参数1或参数2的指令(如回调指令a)回调给图形库,以便于通过调用图形库中对应的接口,控制硬件层中的部件(如GPU)执行对应的功能。数据处理模块还可以在完成对顶点数据以及MVP矩阵的备份存储之后,将来自拦截模块的指令(如回调指令b)回调给图形库,以便通过调用图形库中对应的接口,控制硬件层中的部件(如GPU)执行对应的功能。
这样,在实现对顶点数据以及MVP矩阵的备份存储的同时,也能够实现对命令1的完整执行,从而不会影响后续游戏应用下发的命令的执行。
在本申请实施例中,根据加载过程中的备份存储的数据,电子设备可以实现对游戏运行过程中命令的相关处理,从而确定当前命令(即当前Drawcall)所要绘制模型的顶点坐标以及当前Drawcall对应的MVP矩阵。
示例性的,结合图7。在游戏运行过程中,游戏应用可以发出命令2。其中,该命令2可以用于实现包括对模型的绘制。
可以理解的是,结合前述说明,要绘制的模型的顶点数据以及MVP矩阵可以是已经通过命令1加载的。也就是说,这些数据可以是已经存储在GPU可以调用的内存空间中的。那么,在命令2中,可以通过指示需要使用的顶点数据以及MVP矩阵的相关参数,以便GPU可以从已经加载的数据中获取对应的顶点数据和MVP矩阵,从而进行对应模型的绘制。
在本示例中,在游戏下发的该命令2中可以包括多个指令(即函数)组成的指令流。在本申请中,命令2也可以称为第一渲染命令。为了实现上述功能,在命令2中可以包括绑定缓存的函数,指示顶点数据解析方式的函数,指示MVP矩阵相关参数的函数。
作为一种可能的实现,在命令2中可以至少包括以下指令:
绑定缓存的函数,如glBindbuffer函数;
用于指示顶点数据解析方式的glVertexAttribPoint函数;
用于指示MVP矩阵相关参数的glBindBufferRange函数。
那么,拦截模块可以用于在该游戏运行的过程中,拦截上述指令。在一些实施例中,拦截模块可以拦截包括glBindbuffer函数,glVertexAttribPoint函数的顶点相关指令。拦截模块还可以拦截包括glBindBufferRange函数的MVP相关指令。拦截模块还可以将该顶点相关指令以及MVP相关指令传输给数据处理模块进行解析。在本申请中,在游戏运行过程中,用于进行MVP矩阵数据传输的该glBindbuffer函数,glVertexAttribPoint函数以及glBindBufferRange函数中的一个或多个可以称为第二函数。
类似于上述加载过程中的数据拦截的说明,在本示例中,拦截模块也可以具有一定的数据解析能力。那么,拦截模块可以拦截携带有参数1(如GL_ELEMENT_ARRAY_BUFFER和/或GL_ARRAY_BUFFER)的glBindbuffer函数,以及glVertexAttribPoint函数。拦截模块还可以拦截携带有参数2(如GL_UNIFORM_BUFFER)的glBindBufferRange函数。
那么,数据处理模块可以在接收到携带有参数1的glBindbuffer函数以及glVertexAttribPoint函数后,据此确定当前Drawcall所要使用的顶点坐标。
在本申请的一些实施例中,数据处理模块可以结合本地存储的参数3,确定当前Drawcall所要使用的顶点坐标。该参数3可以是对当前游戏的静态分析确定的。
可以理解的是,在顶点数据中可以包括多项顶点的相关数据。不同的数据可以存储在不同的属性(attribute)中。比如,attitude0可以用于存储顶点坐标,attribute1可以用于存储顶点法向量等。对于一个游戏应用而言,其在工作过程中所用于存储顶点坐标的属性的ID(如0)一般是不会变化的。因此,在本示例中,参数3中可以包括当前游戏用于存储顶点坐标的属性的ID(如0)。
这样,数据处理模块在接收到来自拦截模块的指令后,可以根据glVertexAttribPoint函数所指示的存储数据的属性ID是否与参数3匹配,确定该glVertexAttribPoint函数是否用于进行顶点数据的传输。在glVertexAttribPoint函数指示的属性ID与参数3匹配的情况下,数据处理模块就可以确定该glVertexAttribPoint函数是顶点坐标相关的函数。
那么,数据处理模块就可以根据该glVertexAttribPoint函数之前,通过glBindbuffer函数绑定的缓存ID,确定当前Drawcall所指示的顶点数据的存储位置。数据处理模块可以据此确定当前Drawcall所指示的顶点坐标在备份存储的缓存中的存储位置。
例如,数据处理模块接收到来自拦截模块的指令包括:
glBindbuffer(GL_ARRAY_BUFFER,1)//绑定ID为1的缓存;
glVertexAttribPoint(0,3,GL_FLOAT,GL_FALSE,3*sizeof(float),(void*_0))//各个参数按照先后顺序分别指示:属性值为0,每组数据包括3个值(如XYZ),类型为浮点类型,不需要进行标准化,步长为3×4,起始地址为0。
以参数3指示的属性ID为0为例。
数据处理模块可以确定glVertexAttribPoint函数指示的属性ID(如0)与参数3匹配,那么该glVertexAttribPoint函数所绑定的ID,即glVertexAttribPoint函数之前的glBindbuffer(GL_ARRAY_BUFFER,1)所绑定的ID为1的缓存,为用于传递当前Drawcall所要绘制模型的顶点数据的缓存。
接着,数据处理模块可以根据原生ID与备份ID的对应关系(如表1),确定在备份存储的数据中,存储当前Drawcall所要绘制模型的顶点坐标的缓存ID为11。接着,根据glVertexAttribPoint函数所指示的属性ID(也就是参数3所指示的ID)以及偏移量,确定该模型的各个顶点的顶点坐标。
上述说明详细阐述了当前Drawcall要绘制模型(简称为当前模型)的顶点坐标的获取方式。以下对当前模型对应的MVP矩阵的获取进行说明。
结合前述游戏运行过程中,拦截模块还可以拦截携带有参数2(如GL_UNIFORM_BUFFER)的glBindBufferRange函数。
该携带有参数2的glBindBufferRange函数可以被传输给数据处理模块进行处理。
示例性的,在本申请的一些实施例中,数据处理模块可以结合本地存储的参数4,确定当前Drawcall所要使用的MVP矩阵。该参数4可以是对当前游戏的静态分析确定的。
在一些实施例中,该参数4可以包括存储M矩阵,和/或VP矩阵的偏移量。可以理解的是,对于确定的游戏应用,在对应缓存中存储M矩阵的偏移量,以及VP矩阵的偏移量一般是不会变化的。因此,本示例中,数据处理模块可以根据该参数4,结合拦截到的glBindBufferRange函数携带的参数,确定该拦截到的glBindBufferRange函数是否用于传输当前Drawcall对应的MVP矩阵。
在数据处理模块确定glBindBufferRange函数携带的偏移量与参数4匹配的情况下,则数据处理模块就可以确定该glBindBufferRange函数是用于传输当前Drawcall对应的MVP矩阵的。
那么数据处理模块就可以根据该glBindBufferRange函数所指示的缓存ID,以及上述跳转表(如表1),确定在备份存储中,存储当前Drawcall对应的MVP矩阵的缓存ID。此外,还可以根据glBindBufferRange函数所指示的偏移量(或参数4指示的偏移量)确在该缓存中M矩阵和VP矩阵具体的存储位置。
例如,数据处理模块接收到来自拦截模块的指令包括:
glBindBufferRange(GL_UNIFORM_BUFFER,2,0,152)//各个参数按照先后顺序指示的含义为:目标为GL_UNIFORM_BUFFER,缓存ID为2,偏移量首地址为0,数据大小为152。
以参数4指示的偏移量首地址0,数据大小为152为例。
数据处理模块可以确定当前拦截到的glBindBufferRange函数指示的偏移量与参数4匹配,那么该glBindBufferRange函数是用于传递当前Drawcall对应MVP矩阵的。因此,根据glBindBufferRange函数所指示的ID(如2),数据处理模块就可以确定当前Drawcall对应的MVP矩阵对应的原生ID为2。
接着,数据处理模块可以根据原生ID与备份ID的对应关系(如表1),确定在备份存储的数据中,存储当前Drawcall所要绘制模型的MVP矩阵的缓存ID为22。根据glBindBufferRange函数所指示的偏移量(也就是参数4所指示的偏移量),数据处理模块就可以确定该模型的MVP矩阵。
需要说明的是,在本示例中,类似前述备份存储的过程,拦截模块还可以通过回调指令c,实现对命令2中,与顶点数据以及MVP矩阵不相关的指令的回调。数据处理模块可以通过回调指令d,实现对命令2中,与顶点数据以及MVP矩阵相关的指令的回调。
为了能够使得本领域技术人员能更加清楚地了解本申请实施例提供方案中,关于游戏加载过程中数据的备份存储过程,以及游戏运行过程中顶点数据和MVP矩阵的确定过程,以下从指令流的角度,对该过程中各个模块的功能进行示例性说明。
示例性的,请参考图8,为本申请实施例提供的游戏加载(或启动)时,对数据备份存储的流程示意图。如图8所示,该过程可以包括:
S801、在接收到指令P后,确定指令P是否是顶点相关指令。
在本示例中,在游戏加载时,游戏应用可以发出指令P,该指令P可以用于进行顶点数据的加载。
在指令P为顶点相关指令的情况下,执行以下S802。在指令P不是顶点相关指令的情况下,执行以下S811。
结合前述示例,该顶点相关指令可以包括携带有参数1的函数。如携带有参数1的glGenbuffers函数,glBindbuffer函数,glBufferdata函数,glBufferSubData函数,glMapBuffer函数,以及glMapBufferRange函数等。
S802、拦截模块向数据处理模块发送顶点相关指令。其中,该顶点相关指令可以包括指令P。
S803、数据处理模块控制内存备份存储顶点相关数据。
其中,本示例中的内存可以对应到上述示例中的缓存。该内存(或缓存)可以是电子设备的内部存储介质中,可以被CPU调用的部分存储空间。
上述S801-S803中,关于顶点数据的拦截,分析,存储等过程,与前述说明中的具体实现类似,此处不再赘述。由此即可实现对顶点数据的备份存储。
在本申请的一些实施例中,在执行S803的过程中,数据处理模块还可以存储原生ID与备份ID的对应关系,用于后续数据的调用。
电子设备在执行该S801-S803的过程中,还可以通过指令回调,实现游戏应用发出的命令的正常运行,如实现数据的正常加载。示例性的,该过程可以包括:
S811、拦截模块向图形库回调指令1-1。
示例性的,在指令P不是顶点相关指令的情况下,拦截模块可以将该指令回调给图形库。例如,该指令1-1可以包括指令P。
S812、图形库调取相关API 1-1。其中,该相关API 1-1可以是为了实现回调指令1-1的功能所调用的API。
S813、图形库向GPU发送指令1-1。在该指令1-1中可以携带API 1-1对应的代码。
S814、GPU执行指令1-1对应的操作。
与拦截模块类似的,数据处理模块也可以对顶点相关指令进行回调。示例性的,该过程可以包括:
S815、数据处理模块向图形库回调指令1-2。该指令1-2可以包括拦截模块拦截并传输给数据处理模块的指令。比如,该指令可以包括指令P中的顶点相关指令。
S816、图形库调取相关API 1-2。该API 1-2可以是为了实现回调指令1-2的功能所调用的API。
S817、图形库向GPU发送指令1-2。在该指令1-2中可以携带API 1-2对应的代码。
S818、GPU执行指令1-2对应的操作。
由此,通过S811-S818,就实现了对指令P中所有数据的回调,从而顺利实现指令P中数据的加载。
在本示例中,电子设备还可以通过如下流程实现对MVP矩阵的备份存储。示例性的,该过程可以包括:
S804、在接收到指令Q后,确定指令Q是否是MVP相关指令。。
在本示例中,在游戏加载时,游戏应用可以发出指令Q,该指令Q可以用于进行MVP数据的加载。拦截模块可以拦截该指令Q中包括的携带参数2的函数。
如携带有参数2的glGenbuffers函数,glBindbuffer函数,glBufferdata函数,glBufferSubData函数,glMapBuffer函数,以及glMapBufferRange函数等。
在指令Q为MVP相关指令的情况下,执行以下S805。在指令P不是MVP相关指令的情况下,执行以下S821。
S805、拦截模块向数据处理模块发送MVP相关指令。其中,该MVP相关指令可以包括指令Q。
S806、数据处理模块控制内存备份存储MVP相关数据。
上述S804-S806中,关于MVP矩阵的拦截,分析,存储等过程,与前述说明中的具体实现类似,此处不再赘述。由此即可实现对MVP矩阵的备份存储。
类似于前述关于顶点数据的回调过程,在本示例中,电子设备也可以对MVP指令进行回调,实现MVP矩阵的正常加载。示例性的,该过程可以包括:
S821、拦截模块向图形库回调指令2-1。
示例性的,在指令P不是MVP相关指令的情况下,拦截模块可以将该指令回调给图形库。例如,该指令2-1可以包括指令Q。
S822、图形库调取相关API 2-1。其中,该相关API 2-1可以是为了实现回调指令2-1的功能所调用的API。
S823、图形库向GPU发送指令2-1。在该指令2-1中可以携带API 2-1对应的代码。
S824、GPU执行指令2-1对应的操作。
与拦截模块类似的,数据处理模块也可以对MVP相关指令进行回调。示例性的,该过程可以包括:
S825、数据处理模块向图形库回调指令2-2。该指令2-2可以包括拦截模块拦截并传输给数据处理模块的指令。比如,该指令可以包括指令Q中的MVP相关指令。
S826、图形库调取相关API 2-2。该API 2-2可以是为了实现回调指令2-2的功能所调用的API。
S827、图形库向GPU发送指令2-2。在该指令2-2中可以携带API 2-2对应的代码。
S828、GPU执行指令2-2对应的操作。
由此,通过S821-S828,就实现了对指令Q中所有指令的回调,从而顺利实现指令Q中数据的加载。
下面结合从指令流的角度,对游戏运行过程中,当前Drawcall所要绘制模型对应的顶点坐标和MVP矩阵的确定过程进行举例说明。
示例性的,结合图9,以游戏应用在运行过程中发出指令N用于指示当前模型的顶点数据为例。该过程可以包括:
S901、在接收到指令N之后,拦截模块确定指令N是否是顶点相关指令。
在本示例中,该顶点相关指令可以为指令N中携带的用于指示当前Drawcall所要绘制模型对应的顶点数据的指令。在一些实施例中,这些指令可以携带有与顶点数据相关的参数1。结合前述说明,该顶点相关指令可以包括glVertexAttribPoint函数,以及对应的glBindbuffer函数等。
在指令N是顶点相关指令的情况下,可以执行以下S902。在指令N不是顶点相关指令的情况下,可以执行对指令N的回调,如执行S911。
S902、拦截模块向数据处理模块发送顶点相关指令。其中,该顶点相关指令可以包括指令N。
S903、数据处理模块确定传输顶点数据的缓存ID。
示例性的,数据处理模块可以在拦截模块拦截的glVertexAttribPoint函数所指示的属性ID,与预设的参数3匹配时,确定当前拦截的函数是用于指示当前Drawcall所要绘制模型对应的顶点数据的。
那么数据处理模块就可以根据glVertexAttribPoint函数之前的glBindbuffer函数,确定传输顶点数据的缓存ID。该缓存ID可以为原生ID。
S904、数据处理模块确定顶点数据的备份存储中的存储位置。
示例性的,数据处理模块可以根据包括原生ID与备份ID的对应关系的跳转表,确定与当前原生ID对应的备份ID。由此即可确定当前Drawcall所要绘制模型对应的顶点数据在备份存储中的缓存ID。此外还可以根据顶点坐标所在属性ID以及偏移量,准确获取各个顶点坐标在备份存储中的存储位置。
在本申请的一些实施例中,在确定顶点数据的备份存储中的存储位置之后,数据处理模块可以将该顶点坐标转存到预设位置1,以便后续调用。在另一些实施例中,在确定顶点数据的备份存储中的存储位置之后,数据处理模块可以对备份存储中存储当前Drawcall对应顶点坐标的位置进行标记,以便后续调用。
需要说明的是,为了保证指令N的正常运行,本申请实施例中,拦截模块以及数据处理模块还可以进行指令回调。示例性的,该过程可以包括:
S911、拦截模块向图形库回调指令3-1。
示例性的,在指令N不是顶点相关指令的情况下,可以执行该步骤实现对指令N的回调。在一些实施例中,该指令3-1可以包括指令N。
S912、图形库调取相关API 3-1。该API 3-1可以是图形库中为了实现指令3-1对应功能的API。
S913、图形库向GPU发送指令3-1。该指令3-1可以包括API 3-1对应的代码。
S914、GPU执行指令3-1对应的操作。
需要说明的是,在一些实施例中,上述S911-S914的执行,可以是在S902之后执行的。
与拦截模块类似的,数据处理模块也可以执行指令回调。示例性的,该过程可以包括:
S915、数据处理模块向图形库回调指令3-2。
示例性的,该指令3-2可以包括指令N中,拦截模块拦截的顶点相关指令。
S916、图形库调取相关API 3-2。该API 3-2可以是图形库中为了实现指令3-2对应功能的API。
S917、图形库向GPU发送指令3-2。该指令3-2可以包括API 3-2对应的代码。
S918、GPU执行指令3-2对应的操作。
在一些实施例中,上述S915-S918的执行,可以是在S904之后执行的。
由此,就实现了指令N的全量回调,从而保证指令N的正常执行。
在本示例中,电子设备还可以通过如下流程确定当前Drawcall对应的MVP矩阵在备份存储中的存储位置。示例性的,结合图9,以游戏应用在运行过程中发出指令M用于指示当前模型的MVP矩阵为例。该过程可以包括:
S905、在接收到指令M之后,拦截模块确定指令N是否是MVP相关指令。
在本示例中,该MVP相关指令可以为指令M中携带的用于指示当前Drawcall所要绘制模型对应的MVP矩阵的指令。在一些实施例中,这些指令可以携带有与MVP矩阵相关的参数2。结合前述说明,该MVP相关指令可以包括glBindBufferRange函数等。
在指令M是MVP相关指令的情况下,可以执行以下S906。在指令M不是MVP相关指令的情况下,可以执行对指令M的回调,如执行S921。
S906、拦截模块向数据处理模块发送MVP相关指令。
S907、数据处理模块确定传输MVP矩阵的缓存ID。
示例性的,数据处理模块可以在拦截模块拦截的glBindBufferRange函数所指示的偏移量,与预设的参数4匹配时,确定当前拦截的函数是用于指示当前Drawcall所要绘制模型对应的MVP矩阵的。
那么数据处理模块就可以根据glBindBufferRange函数指示的缓存的ID,确定传输MVP矩阵的缓存ID。该缓存ID可以为原生ID。
S908、数据处理模块确定MVP矩阵的备份存储中的存储位置。
示例性的,数据处理模块可以根据包括原生ID与备份ID的对应关系的跳转表,确定与当前原生ID对应的备份ID。由此即可确定当前Drawcall所要绘制模型对应的MVP矩阵在备份存储中的缓存ID。此外还可以根据MVP矩阵的偏移量,准确获取M矩阵,和/或VP矩阵在备份存储中的存储位置。
在本申请的一些实施例中,类似于前述顶点数据的处理,在确定MVP矩阵的备份存储中的存储位置之后,数据处理模块可以将该MVP矩阵转存到预设位置2,以便后续调用。在另一些实施例中,在确定MVP矩阵的备份存储中的存储位置之后,数据处理模块可以对备份存储中存储当前Drawcall对应MVP矩阵的位置进行标记,以便后续调用。
需要说明的是,为了保证指令M的正常运行,本申请实施例中,拦截模块以及数据处理模块还可以进行指令回调。示例性的,该过程可以包括:
S921、拦截模块向图形库回调指令4-1。
示例性的,在指令M不是MVP相关指令的情况下,可以执行该步骤实现对指令M的回调。在一些实施例中,该指令4-1可以包括指令M。
S922、图形库调取相关API 4-1。该API 4-1可以是图形库中为了实现指令4-1对应功能的API。
S923、图形库向GPU发送指令4-1。该指令4-1可以包括API 4-1对应的代码。
S924、GPU执行指令4-1对应的操作。
需要说明的是,在一些实施例中,上述S921-S924的执行,可以是在S906之后执行的。
与拦截模块类似的,数据处理模块也可以执行指令回调。示例性的,该过程可以包括:
S925、数据处理模块向图形库回调指令4-2。
示例性的,该指令4-2可以包括指令M中,拦截模块拦截的MVP相关指令。
S926、图形库调取相关API 4-2。该API 4-2可以是图形库中为了实现指令4-2对应功能的API。
S927、图形库向GPU发送指令4-2。该指令4-2可以包括API 4-2对应的代码。
S928、GPU执行指令4-2对应的操作。
在一些实施例中,上述S925-S928的执行,可以是在S908之后执行的。
由此,就实现了指令N的全量回调,从而保证指令M的正常执行。
通过上述方案说明,电子设备就可以确定游戏应用当前下发的渲染命令所指示绘制模型(如当前模型)在当前帧图像中的顶点数据以及MVP数据。
在本申请实施例中,电子设备可以根据当前模型在当前帧图像中的位置,以及同一个模型在前一帧或多帧图像中的位置,确定当前模型的运动情况。根据该运动情况,电子设备就可以适应性地确定在当前帧图像中,对当前模型的着色速率。
示例性的,以及当前帧图像为第N帧图像,电子设备参考第N-1帧图像中当前模型的位置,结合第N帧图像中当前模型的位置,确定当前模型在第N帧图像中的着色速率为例。
结合图10示出的模块间的交互示意图。游戏应用可以下发命令2,以便指示电子设备对当前模型进行着色操作。该命令2中可以包括指示在第N帧图像中,当前模型的顶点数据以及MVP数据的指令。
拦截模块可以拦截该顶点相关指令以及MVP相关指令,并将顶点相关指令以及MVP相关指令传输给数据处理模块。数据处理模块可以据此确定当前模型的顶点数据以及MVP数据。在一些实施例中,该拦截以及确定的过程,可以参考上述图7或图9的示例,此处不再赘述。
在本示例中,游戏应用还可以下发针对当前模型的具体的渲染指令。比如,游戏应用可以在命令2对应的Drawcall中下发一个glDrawElements。
在拦截模块可以在接收到该glDrawElements的情况下,指示计算模块计算当前模型在第N帧图像中的位置。该位置可以是基于观察空间或裁剪空间的位置。在本申请中,该位置也可以称为第一位置。对应的,第N-1帧图像中,该模型的位置可以称为第二位置。
在本申请的一些实施例中,可以根据模型包围盒确定当前模型在第N帧图像中的位置。其中,该包围盒可以为AABB(Axis-aligned bounding box)包围盒。
示例性的,图11示出了一种模型的包围盒的示例。以当前模型为图11所示的头部雕塑模型为例。如图11所示,该包围盒可以为六面体结构,该包围盒至少能够将模型完全容纳在其中。以包围盒的每个面都与模型相切为例,那么该包围盒的中心就可以对应到模型的中心,由此标识模型在帧图像中的位置。示例性的,以根据包围盒确定的模型的中心坐标为(xcenter,ycenter,zcenter)为例。那么,xcenter可以为(xmin+xmax)/2,其中,xmin可以为当前模型的所有顶点的x坐标中,最小的x坐标;xmax可以为当前模型的所有顶点的x坐标中,最大的x坐标。对应的,ycenter可以为(ymin+ymay)/2,其中,ymin可以为当前模型的所有顶点的y坐标中,最小的y坐标;ymay可以为当前模型的所有顶点的y坐标中,最大的y坐标。zcenter可以为(zmin+zmaz)/2,其中,zmin可以为当前模型的所有顶点的z坐标中,最小的z坐标;zmaz可以为当前模型的所有顶点的z坐标中,最大的z坐标。
需要说明的是,由于计算模块最终计算获取的位置坐标是基于观察空间或裁剪空间的(以基于观察空间为例)。因此,在计算当前模型在第N帧图像中的位置之前,计算模块可以根据数据处理模块的处理结果,从存储器中读取当前模型在第N帧图像中的顶点数据(如顶点坐标)以及MVP数据。计算模块还可以据此计算当前模型的各个顶点经过MVP矩阵变换到观察空间之后的坐标。接着,计算模块就可以在需要计算当前模型的位置时,根据已经计算获取的各个顶点在观察空间中的坐标,结合前述图11中的方案说明,计算获取当前模型在第N帧图像中的位置。
可以理解的是,结合图11所示方案的说明,在该示例中,在计算获取当前模型在第N帧图像中的位置的过程中,可以只用到x、y以及z方向上的最大值和最小值。因此,在一些实施例中,在计算模块计算当前模型的顶点在观察空间中的坐标时,可以对所有的顶点都进行基于MVP矩阵的坐标转换,从而使得在计算模块计算当前模型的位置时,能够通过比对,从这些坐标中筛选出x、y以及z方向上的最大值和最小值进行计算。在另一些实施例中,在计算模块计算当前模型的顶点在观察空间中的坐标时,可以在进行MVP矩阵的坐标转换之前,基于局部空间坐标,确定x、y以及z方向上的最大值和最小值对应的多个顶点。针对这些确定的多个顶点,执行MVP矩阵的转换,从而获取计算当前模型位置所需的各个方向的极值。
此外,图11所示方案仅为一种确定当前模型的位置的方案示例。在本申请的另一些实施例中,电子设备还可以根据其他方案确定当前模型的位置。比如,计算模块可以计算当前模型的几何中心,将该几何中心作为当前模型在第N帧图像中的位置。又如,游戏应用可以在渲染命令,下发指示当前模型的位置的指令。那么,拦截模块可以对应拦截该指令,并将该指令所指示的位置信息发送给计算模块以供使用。本申请实施例对于当前模型对第N帧图像的位置的确定方式不作限定。
这样,计算模块就可以计算获取当前模型在第N帧图像中的位置。与之类似的,在第N帧图像中还包括其他模型时,计算模块还可以分别计算获取其他模型的位置。
在本申请实施例中,计算模块还可以确定第N-1帧图像中,同一个模型的位置。可以理解的是,在连续的帧图像中所包括的模型基本不会变化。只是,在运动场景下,同一个模型在不同的帧图像中的位置可能会发生变化。
在本示例中,第N-1帧图像中当前模型的位置,可以是电子设备在执行第N-1帧图像的渲染过程中确定的。对应的,该当前模型在第N-1帧图像中的位置可以被存储在存储器中,以便于执行后续帧图像(如第N帧图像)的处理过程中快速调用。在另一些实施例中,电子设备的存储器中可以存储有第N-1帧图像中各个模型的顶点数据以及MVP数据。那么,在执行第N帧图像中当前模型的处理时,计算模块可以从存储器中读取第N-1帧图像中当前模型的顶点数据以及MVP数据,通过上述示例中类似于第N帧图像中当前模型位置的计算方式,确定第N-1帧图像中当前模型的位置。以下以存储器中存储有第N帧图像中模型的位置为例。
在本申请实施例中,计算模块可以根据当前模型在第N帧图像以及第N-1帧图像中的位置,确定当前模型的运动情况。
在一些实施例中,该运动情况可以通过运动速率标识。例如,以当前模型在第N帧图像中的位置为(xN,yN,zN),当前模型在第N-1帧图像中的位置为(xN-1,yN-1,zN-1)为例。运动速率v可以通过如下公式(1)确定。
其中,S为当前模型在第N帧图像中的位置,与当前模型在第N-1帧图像中的位置之间的距离。在本示例中,S可以为两个位置之间的欧式距离(Euclidean distance)。T为相邻帧图像的时间差。一般而言,在固定刷新率的显示场景中,相邻帧图像之间的时间差是固定的。比如,刷新率为60帧/秒时,相邻帧图像之间的时间差可以为16.67毫秒。又如,刷新率为90帧/秒时,相邻帧图像之间的时间差可以为11.11毫秒。计算模块在计算当前模型的运动速率时,可以结合当前游戏应用运行过程中的帧率配置参数,选取对应的时间差T进行准确的计算。
在另一些实施例中,当前模型的运动情况还可以直接通过当前模型在第N帧图像中的位置,与当前模型在第N-1帧图像中的位置之间的距离(即前述示例中的S)标识。也就是说,在本示例中,当前模型的运动情况可以根据两个位置的向量模长确定。可以理解的是,通常一个游戏应用运行过程中,其刷新帧率基本保持不变,因此S的变化也就可以标识模型运动情况。这样,计算模块就可以通过更少的计算量计算获取当前模型的运动情况。
需要说明的是,在一些场景中,一个帧图像中可能包括多个模型。那么在进行第N帧图像的处理时,计算模块可以在根据上述方案,计算后去该第N帧图像中各个模型的位置之外,确定存储器中存储的第N-1帧图像中多个模型的位置中,该当前模型的位置。
示例性的,在一些实施例中,同一个模型在不同帧图像的处理过程中,其局部空间中的顶点坐标可以是相同的。那么,计算模块可以根据第N-1帧图像中,各个模型的顶点数据,与当前第N帧图像中的当前模型的顶点数据进行比对,确定当前模型在第N-1帧图像中的位置。在另一些实施例中,计算模块可以根据与模型对应的其他参数,匹配确定当前模型在第N-1帧图像中的位置。
作为一种示例,结合图12,对包括多个帧图像的模型的运动情况进行说明。其中,以每个单元格为归一化1×1大小为例。在本示例中,第N-1帧图像以及第N帧图像中,可以包括模型1、模型2和模型3。
如图12所示,在第N-1帧图像中,模型1的位置可以为(1,1),模型2的位置可以为(3,2),模型2的位置可以为(4,3)。在第N帧图像中,模型1的位置可以为(1,2),模型2的位置可以为(2,3),模型2的位置可以为(3,1)。那么,在该如图12所示的位置均为观察空间的位置的情况下,该模型1的运动向量可以为(1,0),模长为1。该模型2的运动向量可以为(-1,1),模长为1.41。该模型3的运动向量可以为(2,1),模长为2.24。这样,就可以根据当前游戏的帧图像之间的时间间隔,结合上述各个模型的运动模长,确定各个模型的运动速率。
由此,在帧图像中包括多个不同模型时,就可以分别计算获取各个模型的运动速率,进而使得电子设备可以根据各个模型的运动速率,分别确定各个模型对应的着色速率。
示例性的,继续结合图10。计算模块可以将计算获取的当前模型的运动速率传输给决策模块。对应的,决策模块可以根据该运动速率,确定执行当前模型的Drawcall中包括的drawelement时,所需要采用的着色速率。
在一些实施例中,决策模块中可以预置有不同运动速率与着色速率的对应关系。比如,该对应关系可以如下表2所示。
表2
运动速率 着色速率
[1,10) 1×1
(10,50] 2×1
(50,100] 2×2
(100,200] 4×2
大于200 4×4
基于如表2的示例,决策模块可以在接收到计算模块传输的当前模型的运动速率在[1,10)范围内时,确定着色速率为1×1。类似的,决策模块可以在接收到计算模块传输的当前模型的运动速率在(10,50]范围内时,确定着色速率为2×1。决策模块可以在接收到计算模块传输的当前模型的运动速率在(50,100]范围内时,确定着色速率为2×2。决策模块可以在接收到计算模块传输的当前模型的运动速率在(100,200]范围内时,确定着色速率为4×2。决策模块可以在接收到计算模块传输的当前模型的运动速率大于200时,确定着色速率为4×4。
可以看到,运动速率越大,则着色速率越小,对应降低着色过程中的功耗开销。相应的,运动速率越小,则着色速率越大,对应的着色效果越清晰。
需要说明的是,上述表2所示的运动速率与着色速率的对应关系仅为一种示例。在本申请的另一些实施例中,运动速率与着色速率的对应关系也可以是不同于表2所示的对应关系,该对应关系的设置可以根据具体的游戏应用以及实施过程中所应用的场景灵活调整。
在本申请中,决策模块根据上述方案确定当前模型的着色速率之后,可以调用图形库中对应的可变速率着色API。作为一种示例,决策模块可以将该调用可变速率着色API的指令,与当前Drawcall中的drawelement分别下发给图形库。以便于图形库可以向GPU发送相应的指令2。
例如,以当前Drawcall中的drawelement对应代码包括:
Xxxxxx
Xxx
glDrawElements
决策模块确定的着色速率为2×2为例。
那么,经过图形库之后,传递给GPU的指令2就可以包括如下代码:
Xxxxxx
Xxx
glVRS(2X2)
glDrawElements
其中,glVRS(2X2)用于指示使用2×2的着色速率对当前模型进行着色操作。
这样,以Drawcall为单位,电子设备就可以结合前一帧图像中模型的位置,以及当前很图像中模型的位置,确定该模型的运动情况,并据此采用对应的着色速率对模型进行着色。从而达到合理分配着色速率,降低着色操作的功耗开销,同时提升着色效果的目的。
为了能够对本申请实施例提供的方案进行更加清楚的说明,以下结合图13示出的模块间交互流程图,对游戏运行过程中,方案的具体实现继续进行说明。
如图13所示,该方案可以包括:
S1301、拦截模块和数据处理模块确定当前模型的顶点数据以及MVP数据。
示例性的,在执行第N帧图像的渲染后,游戏应用可以下发指令N,用于指示当前模型的顶点相关信息。游戏应用还可以下发指令M,用于指示当前模型的MVP相关信息。
拦截模块可以拦截该顶点相关信息以及MVP相关信息,并将这些信息传输给数据处理模块。对应的,数据处理模块可以结合前述说明的方案示例,确定当前模型的顶点数据以及MVP数据。
S1302、计算模块获取当前模型的顶点数据和MVP数据,以及当前模型在上一帧图像中的位置。
示例性的,计算模块可以根据数据处理模块确定的顶点数据以及MVP数据在存储器中的存储位置,读取该当前模型的顶点数据以及MVP数据,以便执行后续S1303。
S1303、计算模块计算当前模型的运动速率。
示例性的,在拦截模块拦截到游戏应用下发的指令R后,可以指示计算模块执行该S1303。例如,拦截模块可以将该指令R发送给计算模块,以便指示计算模块执行S1303。其中,指令R可以包括对当前模型执行的glDrawElements。
结合前述说明,在电子设备的存储器中可以存储有第N-1帧中,当前模型的位置。在另一些实施例中,电子设备中可以存储有当前模型在第N-1帧图像中的顶点数据以及MVP数据,那么,该计算模块还可以读取当前模型在第N-1帧图像中的顶点数据以及MVP数据,计算获取该当前模型在第N-1帧图像中的位置。
以下以电子设备中存储有第N-1帧中当前模型的位置为例。
计算模块可以根据当前模型在第N帧图像中的位置,以及在第N-1帧图像中的位置,计算获取该当前模型的运动速率。
S1304、计算模块将该当前模型的运动速率发送给决策模块。
S1305、决策模块根据当前模型的运动速率确定当前模型的着色速率。
S1306、决策模块调用图形库中对应的可变速率着色API。
S1307、图形库调用该可变速率着色API,以便根据确定的着色速率进行着色操作。
需要说明的是,在本示例中,为了能够顺利实现对当前模型的渲染操作,拦截模块还可以执行以下S1308和S1309。
S1308、拦截模块回调相关指令。其中,该相关指令可以是游戏应用下发的用于对当前模型进行渲染操作的指令。比如,结合前述示例,该相关指令可以包括命令2中的指令。
S1309、图形库调用对应的API,以便实现原生逻辑。
S1310、图形库向GPU发送指令2。该指令2用于指示GPU根据决策模块确定的着色速率对当前模型进行着色操作。
S1311、GPU根据该指令2,对当前模型进行着色操作。
这样,结合前述方案说明,就可以实现对第N帧图像中运动或静止的模型执行相应的可变速率着色,从而降低着色操作过程中的功耗以及算力开销。
示例性的,请参考图14,结合图12中的说明。可以看到,从运动速率的角度来看,模型1的运动速率最小,接着是模型2,模型3的运动速率最大。那么,基于本申请实施例提供的方案,对模型1的着色速率可以是最低的,由此获取最清晰的着色效果。对模型3的着色速率可以是最高的,由此在不影响用户观感的情况下,降低着色过程中的功耗以及算力开销。比如,在如图14所示的示例中,模型1的着色速率可以为1×1,模型2的着色速率可以为2×1,模型3的着色速率可以为2×2。
上述主要从各个功能模块的角度对本申请实施例提供的方案进行了介绍。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
示例性的,图15示出了的一种电子设备1500的组成示意图。如图15所示,该电子设备1500可以包括:处理器1501和存储器1502。该存储器1502用于存储计算机执行指令。示例性的,在一些实施例中,当该处理器1501执行该存储器1502存储的指令时,可以使得该电子设备1500执行上述实施例中任一种所示的图像渲染方法。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
图16示出了的一种芯片系统1600的组成示意图。该芯片系统1600可以包括:处理器1601和通信接口1602,用于支持相关设备实现上述实施例中所涉及的功能。在一种可能的设计中,芯片系统还包括存储器,用于保存电子设备必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。需要说明的是,在本申请的一些实现方式中,该通信接口1602也可称为接口电路。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
在上述实施例中的功能或动作或操作或步骤等,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包括一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包括这些改动和变型在内。

Claims (17)

1.一种图像渲染方法,其特征在于,应用于电子设备,所述电子设备中安装有应用程序,所述方法包括:
在所述应用程序启动时,获取所述应用程序下发的第二渲染命令,所述第二渲染命令包括第一数据,所述第一数据包括第二顶点坐标以及MVP矩阵;所述第二顶点坐标是第一模型的各个顶点基于局部空间的坐标;所述第一模型是第N帧图像中的多个模型中的一个;
获取所述第二渲染命令包括的第三函数和第四函数;所述第三函数携带第一参数,所述第四函数携带第二参数;所述第一参数是所述应用程序传递顶点数据过程中携带的参数,所述第二参数是所述应用程序传递MVP矩阵过程中携带的参数;
根据所述第三函数和所述第四函数,确定所述第一数据,并将所述第一数据存储在第一存储区域中,所述第一存储区域是所述电子设备的CPU能够调用的区域;
在所述应用程序运行时,获取所述应用程序下发的第一渲染命令,所述第一渲染命令用于绘制所述第N帧图像中的所述第一模型;
根据所述第一渲染命令,从所述第一存储区域中的顶点坐标信息以及MVP矩阵信息中,确定所述第一模型在所述第N帧图像中的顶点坐标信息以及MVP矩阵信息;
根据所述第一模型在所述第N帧图像中的顶点坐标信息以及MVP矩阵信息,确定所述第一模型在所述第N帧图像中的第一位置;
获取第二位置,所述第二位置是所述第一模型在第N-1帧图像中的位置;
根据所述第一位置以及所述第二位置,确定所述第一模型的运动速率;
根据所述第一模型的运动速率,确定所述第一模型的着色速率。
2.根据权利要求1所述的方法,其特征在于,所述第一模型的运动速率为第一速率时,所述确定所述第一模型的着色速率,具体包括:
确定所述第一模型的着色速率为第一着色速率;
所述第一模型的运动速率为第二速率时,所述确定所述第一模型的着色速率,具体包括:
确定所述第一模型的着色速率为第二着色速率;
在所述第一速率大于所述第二速率时,所述第一着色速率小于所述第二着色速率。
3.根据权利要求1或2所述的方法,其特征在于,所述电子设备的存储器中存储有所述第一模型在所述第N-1帧图像中的第二位置,所述获取第二位置,包括:
从所述存储器中读取所述第二位置。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据所述第一渲染命令,获取所述第一模型的各个顶点在所述第N帧图像中的第一顶点坐标,所述第一顶点坐标是基于观察空间或者裁剪空间的坐标;
所述确定所述第一模型在所述第N帧图像中的第一位置,包括:
根据所述第一模型的各个顶点的第一顶点坐标,确定所述第一位置。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第一模型的各个顶点的第一顶点坐标,确定所述第一位置,包括:
根据所述第一模型的各个顶点的第一顶点坐标,确定所述第一模型的包围盒坐标;
根据所述包围盒坐标,确定所述第一位置。
6.根据权利要求4或5所述的方法,其特征在于,所述方法还包括:
根据所述第一渲染命令,获取所述第一模型的各个顶点的所述第二顶点坐标,以及所述第一模型对应的MVP矩阵;
所述获取所述第一模型的各个顶点在所述第N帧图像中的第一顶点坐标,包括:
根据所述第二顶点坐标,和所述MVP矩阵,获取所述第一顶点坐标。
7.根据权利要求6所述的方法,其特征在于,
所述根据所述第一渲染命令,获取所述第二顶点坐标,包括:
根据所述第一渲染命令中的第一函数,
获取第一存储位置,所述第一存储位置用于指示所述第二顶点坐标在所述第一存储区域中的存储位置;所述第一函数携带第一参数,所述第一参数是所述应用程序传递顶点数据过程中携带的参数。
8.根据权利要求6所述的方法,其特征在于,所述电子设备的第一存储区域中存储有至少一个MVP矩阵,所述第一存储区域中的数据能够被所述电子设备的处理器调用;
所述根据所述第一渲染命令,获取所述MVP矩阵,包括:
根据所述第一渲染命令中的第二函数,获取第二存储位置,所述第二存储位置用于指示所述MVP矩阵在所述第一存储区域中的存储位置;所述第二函数携带第二参数,所述第二参数是所述应用程序传递MVP矩阵过程中携带的参数。
9.根据权利要求1或2或4或5或7所述的方法,其特征在于,所述电子设备中设置有拦截模块,数据处理模块,以及存储器,所述方法包括:
所述拦截模块拦截所述第一渲染命令;
所述拦截模块将所述第一渲染命令中的第一函数和第二函数传输给所述数据处理模块,所述第一函数携带有第一参数,所述第一参数是所述应用程序传递顶点数据过程中携带的参数;所述第二函数携带有第二参数,所述第二参数是所述应用程序传递MVP矩阵过程中携带的参数;
所述数据处理模块根据所述第一函数,确定所述第一模型的第二顶点坐标在所述电子设备的存储器中的第一存储位置;所述第二顶点坐标是基于局部空间的坐标;
所述数据处理模块根据所述第二函数,确定所述第一模型的MVP矩阵在所述电子设备的存储器中的第二存储位置。
10.根据权利要求9所述的方法,其特征在于,所述电子设备中还设置有计算模块,所述方法还包括:
所述计算模块根据所述第一存储位置和所述第二存储位置,获取所述第一模型的第二顶点坐标和所述MVP矩阵,
所述计算模块计算所述第一模型的第一顶点坐标,所述第一顶点坐标是基于观察空间或者裁剪空间的坐标;
所述计算模块根据所述第一顶点坐标,确定所述第一模型的包围盒坐标;
所述计算模块根据所述包围盒坐标,确定所述第一模型在所述第N帧图像中的第一位置。
11.根据权利要求10所述的方法,其特征在于,在所述拦截模块拦截到来自所述应用程序的绘制元素drawelement的情况下,所述计算模块根据所述第一存储位置和所述第二存储位置,获取所述第一模型的第二顶点坐标和所述MVP矩阵。
12.根据权利要求10或11所述的方法,其特征在于,所述方法还包括:
所述计算模块获取所述第一模型在第N-1帧图像中的第二位置,
所述计算模块根据所述第一位置和所述第二位置,确定所述第一模型的运动速率。
13.根据权利要求12所述的方法,其特征在于,所述电子设备还设置有决策模块,所述方法还包括:
所述决策模块根据所述第一模型的运动速率,确定所述第一模型的着色速率;
所述决策模块将所述第一模型的着色速率发送给所述电子设备的图形库,以便所述图形库指示所述电子设备的GPU使用所述第一模型的着色速率对所述第一模型进行着色操作。
14.根据权利要求9所述的方法,其特征在于,所述方法还包括:
所述拦截模块拦截来自所述应用程序的第二渲染命令,所述第二渲染命令用于将所述应用程序运行过程中使用的第一数据存储在第二存储区域中,所述第二存储区域是所述电子设备的图形处理器GPU使用的存储区域,所述第一数据包括所述第一模型的各个顶点的第二顶点坐标以及所述MVP矩阵;
所述拦截模块将所述第二渲染命令中包括的第三函数和第四函数发送给所述数据处理模块,所述第三函数携带有所述第一参数,所述第四函数携带有所述第二参数;
所述数据处理模块根据所述第三函数和所述第四函数,将所述第一数据存储在所述存储器的第一存储区域中。
15.一种电子设备,其特征在于,所述电子设备包括一个或多个处理器和一个或多个存储器;所述一个或多个存储器与所述一个或多个处理器耦合,所述一个或多个存储器存储有计算机指令;
当所述一个或多个处理器执行所述计算机指令时,使得所述电子设备执行如权利要求1-14中任一项所述的图像渲染方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机指令,当所述计算机指令运行时,执行如权利要求1-14中任一项所述的图像渲染方法。
17.一种芯片系统,其特征在于,所述芯片系统包括处理器和通信接口;所述处理器用于从存储介质中调用并运行所述存储介质中存储的计算机程序,执行如权利要求1-14中任一项所述的图像渲染方法。
CN202111552399.0A 2021-12-17 2021-12-17 一种图像渲染方法及电子设备 Active CN115018692B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111552399.0A CN115018692B (zh) 2021-12-17 2021-12-17 一种图像渲染方法及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111552399.0A CN115018692B (zh) 2021-12-17 2021-12-17 一种图像渲染方法及电子设备

Publications (2)

Publication Number Publication Date
CN115018692A CN115018692A (zh) 2022-09-06
CN115018692B true CN115018692B (zh) 2024-03-19

Family

ID=83064871

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111552399.0A Active CN115018692B (zh) 2021-12-17 2021-12-17 一种图像渲染方法及电子设备

Country Status (1)

Country Link
CN (1) CN115018692B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116308999B (zh) * 2023-05-18 2023-08-08 南京砺算科技有限公司 图形处理器的数据处理方法及图形处理器、存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101051382A (zh) * 2006-08-24 2007-10-10 威盛电子股份有限公司 于图形处理单元中提供共享属性计算电路的系统及方法
CN110868580A (zh) * 2018-08-09 2020-03-06 辉达公司 使用可变速率着色的运动自适应渲染
CN111724293A (zh) * 2019-03-22 2020-09-29 华为技术有限公司 图像渲染方法及装置、电子设备
CN111754381A (zh) * 2019-03-26 2020-10-09 华为技术有限公司 图形渲染方法、装置和计算机可读存储介质
CN112348732A (zh) * 2019-08-08 2021-02-09 华为技术有限公司 基于图形渲染管线的模型推理方法、装置及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7839404B2 (en) * 2006-07-25 2010-11-23 Siemens Medical Solutions Usa, Inc. Systems and methods of direct volume rendering
US9245371B2 (en) * 2009-09-11 2016-01-26 Nvidia Corporation Global stores and atomic operations
US20160335985A1 (en) * 2015-05-14 2016-11-17 Box, Inc. Rendering high bit depth grayscale images using gpu color spaces and acceleration
CN115379185B (zh) * 2018-08-09 2024-04-02 辉达公司 使用可变速率着色的运动自适应渲染
CN113538208A (zh) * 2020-04-20 2021-10-22 华为技术有限公司 图片加载方法及相关装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101051382A (zh) * 2006-08-24 2007-10-10 威盛电子股份有限公司 于图形处理单元中提供共享属性计算电路的系统及方法
CN110868580A (zh) * 2018-08-09 2020-03-06 辉达公司 使用可变速率着色的运动自适应渲染
CN111724293A (zh) * 2019-03-22 2020-09-29 华为技术有限公司 图像渲染方法及装置、电子设备
CN111754381A (zh) * 2019-03-26 2020-10-09 华为技术有限公司 图形渲染方法、装置和计算机可读存储介质
CN112348732A (zh) * 2019-08-08 2021-02-09 华为技术有限公司 基于图形渲染管线的模型推理方法、装置及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
M. Chavent.GPU-accelerated dynamic visualization of molecular interactions andvrepresentations as HyperBalls,a unified algorithm for balls,sticks and hyperboloids.《Journal of Computational Chemistry》.2011,第32卷(第12期),第2924-2935页. *
于平 ; .基于GPU加速的辐射度光照算法的研究及应用.国外电子测量技术.2016,(11),第52-58、63页. *
谭喆编著.《应用软件开发协议栈》.东南大学出版社,2020,第17-18页. *

Also Published As

Publication number Publication date
CN115018692A (zh) 2022-09-06

Similar Documents

Publication Publication Date Title
US10986330B2 (en) Method and system for 360 degree head-mounted display monitoring between software program modules using video or image texture sharing
US10930056B2 (en) Electronic device for generating images having rendering qualities differing by view vector
US20170150139A1 (en) Electronic device and method for displaying content according to display mode
US11698822B2 (en) Software development kit for image processing
KR20230019975A (ko) 이미지 프로세싱 sdk에서 사용하기 위한 인터페이스 캐러셀
WO2014085788A1 (en) Low latency image display on multi-display device
CN114632329B (zh) 终端设备性能调节方法和相关装置
CN116672702A (zh) 一种图像渲染方法和电子设备
CN116703693A (zh) 一种图像渲染方法及电子设备
CN115018692B (zh) 一种图像渲染方法及电子设备
US20200364926A1 (en) Methods and apparatus for adaptive object space shading
CN116091329B (zh) 图像处理方法、装置、设备及存储介质
CN114780012B (zh) 电子设备的锁屏壁纸的显示方法和相关装置
CN116091292B (zh) 数据处理方法和相关装置
US20220414984A1 (en) Volumetric data processing using a flat file format
CN116095221B (zh) 一种游戏中的帧率调整方法及相关装置
CN116225274A (zh) 触控操作的识别方法、装置、电子设备及存储介质
WO2023005751A1 (zh) 渲染方法及电子设备
CN115904563A (zh) 应用程序启动中的数据处理方法、装置和存储介质
CN115690269B (zh) 一种视图对象的处理方法及电子设备
WO2024045701A9 (zh) 数据处理方法、装置、设备及存储介质
WO2024045701A1 (zh) 数据处理方法、装置、设备及存储介质
CN116688494B (zh) 生成游戏预测帧的方法和电子设备
CN116672707B (zh) 生成游戏预测帧的方法和电子设备
WO2024051471A1 (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