CN113034653B - 一种动画渲染方法及装置 - Google Patents

一种动画渲染方法及装置 Download PDF

Info

Publication number
CN113034653B
CN113034653B CN201911349293.3A CN201911349293A CN113034653B CN 113034653 B CN113034653 B CN 113034653B CN 201911349293 A CN201911349293 A CN 201911349293A CN 113034653 B CN113034653 B CN 113034653B
Authority
CN
China
Prior art keywords
frame image
decoding
animation
layer
image
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
CN201911349293.3A
Other languages
English (en)
Other versions
CN113034653A (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 CN201911349293.3A priority Critical patent/CN113034653B/zh
Publication of CN113034653A publication Critical patent/CN113034653A/zh
Application granted granted Critical
Publication of CN113034653B publication Critical patent/CN113034653B/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
    • G06T13/00Animation
    • G06T13/203D [Three Dimensional] animation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T13/00Animation
    • G06T13/802D [Two Dimensional] animation, e.g. using sprites

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Processing Or Creating Images (AREA)
  • Controls And Circuits For Display Device (AREA)

Abstract

本申请涉及图像处理技术领域,公开了一种动画渲染方法及装置,用于缩短动画渲染的总时长,提升播放的流畅度。所述方法包括:获取动画的当前帧图像,所述当前帧图像是在显示界面显示上一帧图像的过程中进行解码和绘制的;在显示界面显示所述当前帧图像,并在所述当前帧图像的显示过程中,解码和绘制下一帧图像。

Description

一种动画渲染方法及装置
技术领域
本发明涉及图像处理技术领域,尤其涉及一种动画渲染方法及装置。
背景技术
动画是由一系列图像来实现的,通过将一系列用于描绘人、物的表情、动作、变化等的图像画面连贯展示,给视觉造成连续变化,从而形成动画。随着计算机技术的发展,动画处理技术也在不断提升。现有技术中,对动画图片的渲染过程为依次对每一帧图像进行渲染,完全执行完上一帧的所有渲染步骤后,再进行下一帧渲染,从而整个动画的渲染耗时较长。
发明内容
本申请实施例提供了一种动画渲染方法及装置,用于缩短动画渲染的总时长,提升播放的流畅度。
根据本申请实施例的第一方面,提供了一种动画渲染方法,包括:
获取动画的当前帧图像,所述当前帧图像是在显示界面显示上一帧图像的过程中进行解码和绘制的;
在显示界面显示所述当前帧图像,并在所述当前帧图像的显示过程中,解码和绘制下一帧图像。
根据本申请实施例的第二方面,提供了一种动画渲染装置,所述装置包括:
获取单元,用于获取动画的当前帧图像,所述当前帧图像是在显示界面显示上一帧图像的过程中进行解码和绘制的;
显示单元,用于在显示界面显示所述当前帧图像;
解码单元,用于在所述当前帧图像的显示过程中,解码下一帧图像;
绘制单元,用于在所述当前帧图像的显示过程中,绘制所述下一帧图像。
一种可选的实施例中,所述获取单元,还用于确定所述下一帧图像包括多个图层;
所述解码单元,具体用于利用多个解码线程对所述多个图层并行解码,其中一个解码线程用于执行一个图层的解码任务;
所述绘制单元,具体用于利用多个绘制线程异步绘制解码后的多个图层,其中一个绘制线程用于执行一个图层的绘制任务。
一种可选的实施例中,所述解码单元,具体用于:
针对所有图层,开启对应数量的多个解码线程;
所述多个解码线程并行执行解码任务;
任一解码线程完成解码任务后,将解码后的图层放入消息队列中的对应位置;
所述绘制单元,具体用于:
针对所有图层,开启对应数量的多个绘制线程;
所述多个绘制线程按照固定时序,从所述消息队列中获取解码后的图层并进行绘制。
一种可选的实施例中,所述解码单元和所述绘制单元,还用于:
从相同的素材资源中获取渲染环境。
一种可选的实施例中,所述解码单元,还用于确定所述下一帧图像位于静态区间内;获取所述静态区间对应的参考帧图层;
所述绘制单元,还用于将所述参考帧图层作为所述下一帧图像的图层进行绘制。
一种可选的实施例中,所述获取单元,还用于获取所述动画的第一帧图像;
所述解码单元,还用于对所述第一帧图像进行解码;
所述绘制单元,还用于对所述第一帧图像进行绘制;
所述显示单元,还用于在显示界面显示所述第一帧图像;
其中,所述解码单元,用于在所述第一帧图像的解码、绘制和显示过程中,解码第二帧图像;所述绘制单元,用于在所述第一帧图像的解码、绘制和显示过程中,绘制所述第二帧图像。
根据本申请实施例的第三方面,提供了一种计算设备,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行本申请实施例提供的动画渲染方法的步骤。
根据本申请实施例的第四方面,提供了一种存储介质,所述存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行本申请实施例提供的动画渲染方法的步骤。
本申请实施例中,对动画的渲染过程中,在显示界面上显示上一帧图像的过程中,对当前帧图像进行解码和绘制。当刷新到当前帧时,获取动画的当前帧图像,直接在显示界面显示解码和绘制后的当前帧图像,并在当前帧图像的显示过程中,解码和绘制下一帧图像。这样,当下一帧刷新时,直接在显示界面显示解码和绘制完成的下一帧图像。本申请实施例中的动画,在显示当前帧图像的过程中,预先对下一帧图像进行解码和绘制,从而减少了动画渲染的总时长,使得播放更为流畅。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例。
图1为本申请实施例中的一种动画渲染***的***架构图;
图2为现有技术中的一种动画渲染方法的流程图;
图3为本申请实施例中的一种动画渲染方法的流程图;
图4为本申请实施例中动画渲染过程的时序示意图;
图5a为现有技术中动画同步解码和绘制的流程示意图;
图5b为本申请实施例中动画异步解码和绘制的流程示意图;
图6为本申请实施例中一个图像中包含三个图层的示意图;
图7为本申请实施例中多个线程的工作流程图。
图8为本申请实施例中OpenGL Context依赖框架示意图;
图9示出了现有技术中动画同步渲染和本申请实施例中动画异步渲染的效果对比示意图;
图10为本申请实施例中一种动画渲染装置的结构方框图;
图11示出了本申请一个实施例提供的终端的结构方框图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请技术方案的一部分实施例,而不是全部的实施例。基于本申请文件中记载的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本申请技术方案保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”和“第二”是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的保护。例如包含了一系列步骤或单元的过程、方法、***、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
下面对本申请实施例中涉及的部分概念进行介绍。
帧:就是影像动画中最小单位的单幅影像画面。一帧就是一副静止的图像,连续的帧就形成动画,如电视图象等。通常说帧数,简单地说,就是在1秒钟时间里传输的图像的帧数,也可以理解为图形处理器每秒钟能够刷新几次,通常用FPS(Frames Per Second,每秒钟帧数)表示。每一帧都是静止的图像,快速连续地显示帧便形成了运动的假象。高的帧率可以得到更流畅、更逼真的动画,FPS越大,所显示的动作就会越流畅。
动画:会活动的影像,动画是由一系列图像来实现的,通过将这一系列用于描绘人、物的表情、动作、变化等的图像画面连贯展示,给视觉造成连续变化,从而形成动画。动画的类型有很多,可以包括但不限于平面动画(又称二维动画)、三维动画、虚拟现实动画、数码动画等等。动画形式也有很多,可包括但不限于形状补间动画、位置补间动画、引导线动画、帧动画(Frame By Frame)等等。
渲染:英文为Render,是CG(Computer Animation,计算机动画)的最后一道工序。将抽象的图片信息数据通过计算机图形处理显示出结果的这个过程叫做渲染,简单来说就是把抽象的模型(一个抽象的但是可以可视化的东西,可以是物体模型,比如桌子椅子;也可以是数据模型,比如树状图、饼图)以输出设备(显示器)能够识别的格式呈现出来的过程。
线程:(thread)是操作***能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
异步处理:与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。让CPU暂时搁置当前请求的响应,处理下一个请求,当通过轮询或其他方式得到回调通知后,开始运行。多线程将异步操作放入另一线程中运行,通过轮询或回调方法得到完成通知,但是完成端口,由操作***接管异步操作的调度,通过硬件中断,在完成时触发回调方法,此方式不需要占用额外线程。
图层:每一个图层都是由许多像素组成的,而图层又通过上下叠加的方式来组成整个图像。通俗地讲,图层就像是含有文字或图形等元素的胶片,一张张按顺序叠放在一起,组合起来形成图像的最终效果。图层可以将图像上的元素精确定位。图层中可以加入文本、图片、表格、插件,也可以在里面再嵌套图层。
OpenGL:(Open Graphics Library,开放图形库),是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。
请参考图1,其示出了本申请一个实施例提供的动画渲染***架构图,包括服务器101和终端102。
终端102可以是手机、平板电脑或者是专用的手持设备等具有无线通信功能的电子设备,也可以是个人计算机(personal computer,简称PC),笔记本电脑,服务器等有线接入方式连接上网的设备。
服务器101可以是计算机等网络设备。服务器101可以是一个独立的设备,也可以是多个服务器所形成的服务器集群。优选地,服务器101可以采用云计算技术进行信息处理。
***中的网络可以为INTERNET网络,也可以为全球移动通信***(Global Systemfor Mobile Communications,简称GSM)、长期演进(long term evolution,简称LTE)***等移动通信***。
本申请实施例中的动画渲染方法由终端102来执行。动画可以存储于终端102的存储空间中,当需要对动画进行渲染时,终端从自身的存储空间中获取动画。动画也可以存储于服务器101中,当需要对动画进行处理时,终端102可以从服务器101下载并实时渲染该动画,该动画可以为其它终端上传至服务器101。可选地,终端102执行本申请实施例的动画渲染方法可以是由安装在其上的客户端或浏览器来执行。
需要注意的是,上文提及的应用场景仅是为了便于理解本申请的精神和原理而示出,本申请实施例在此方面不受任何限制。相反,本申请实施例可以应用于适用的任何场景。
一般来说,2D渲染引擎渲染动画的过程,包括刷新(flush)、解码(Decoder)、绘制(onDraw)和显示(Swapbuffer)。图2示出了现有技术中的动画渲染过程,如图2所示,每一帧图像刷新后,需要依次顺序执行解码、绘制和显示的步骤。前一帧所有步骤执行完成后,再对后一帧进行刷新,然后执行渲染的其它步骤,直至动画的所有帧图像均渲染完毕。
为了减少动画的渲染时长,下面结合图1所示的应用场景,对本申请实施例提供的动画渲染方法进行说明。
请参考图3,本申请实施例提供了一种动画渲染方法,如图3所示,方法包括:
步骤S301:获取动画的当前帧图像,当前帧图像是在显示界面显示上一帧图像的过程中进行解码和绘制的。
对于动画中的每一帧,当该帧刷新后,需要对图像进行解码、绘制和显示。现有技术中,当前帧刷新后,将当前帧图像进行解码和绘制,绘制完成后,暂时存储在缓存中,然后将缓存中的图像交换到设备的屏幕中进行显示。本申请具体实施过程中,在当前帧刷新前,将当前帧图像进行预处理,即在当前帧的上一帧图像交换显示过程中,将当前帧图像进行解码和绘制,并将绘制后的当前帧图像保存在内存中,在当前帧刷新后,直接将内存中绘制后的当前帧图像交换到屏幕中进行显示。
步骤S302:在显示界面显示当前帧图像,并在当前帧图像的显示过程中,解码和绘制下一帧图像。
本申请实施例中,对动画的渲染过程中,在显示界面上显示上一帧图像的过程中,对当前帧图像进行解码和绘制。当刷新到当前帧时,获取动画的当前帧图像,直接在显示界面显示解码和绘制后的当前帧图像,并在当前帧图像的显示过程中,解码和绘制下一帧图像。这样,当下一帧刷新时,直接在显示界面显示解码和绘制完成的下一帧图像。本申请实施例中的动画,在显示当前帧图像的过程中,预先对下一帧图像进行解码和绘制,从而减少了动画渲染的总时长,使得播放更为流畅。
特殊的,对于动画中的第一帧图像,由于其不存在上一帧图像,因此,对第一帧图像的渲染过程包括:
获取所述动画的第一帧图像;
对所述第一帧图像进行解码和绘制;
在显示界面显示所述第一帧图像;
其中,在第一帧图像的解码、绘制和显示过程中,解码和绘制第二帧图像。
具体实施过程中,在动画的第一帧刷新后,获取第一帧图像,并对第一帧图像进行解码和绘制,之后在显示界面显示第一帧图像。同时,在第一帧图像进行解码、绘制和显示的过程中,对动画的第二帧图像进行解码和绘制。这样,当第二帧刷新后,可以直接从内存中获取绘制后的第二帧图像在屏幕中显示,从而缩短了动画的渲染时间。
图4示出了一种可能的实施例中动画渲染过程的时序示意图。如图4所示,第一个flush(刷新)为动画的第一帧刷新时间,第一帧刷新后,对第一帧图像进行解码、绘制和显示,在此过程中,同时获取第二帧图像,并对第二帧图像进行解码和绘制,将绘制后的第二帧图像存储在内存中。第二个flush为第二帧刷新时间,第二帧刷新后,从内存中直接获取绘制后的第二帧图像,并在屏幕中显示,在第二帧图像显示的同时,获取第三帧图像,并对第三帧图像进行解码和绘制,将绘制后的第三帧图像存储在内存中。第三个flush为第三帧刷新时间,第三帧刷新后,从内存中直接获取绘制后的第三帧图像,并在屏幕中显示,在第三帧图像显示的同时,获取第四帧图像,并对第四帧图像进行解码和绘制,将绘制后的第四帧图像存储在内存中。之后,针对动画的每一帧,均类似上述处理方式,这里不做赘述。
一种可选的实施例中,为了进一步缩短动画的渲染时长,上述解码和绘制下一帧图像,包括:
确定下一帧图像包括多个图层;
利用多个解码线程对多个图层并行解码,其中一个解码线程用于执行一个图层的解码任务;
利用多个绘制线程异步绘制解码后的多个图层,其中一个绘制线程用于执行一个图层的绘制任务。
具体实施过程中,采用独立的线程对每一个图层进行解码和绘制。其中,解码线程与主线程并行执行,且同一个图像中不同图层对应的解码线程之间也可以并行执行,这样可以节省主线程的处理耗时,减少动画播放产生的延迟,保证动画播放界面的流畅性。解码线程将图层的解码任务处理完成后,绘制线程获取解码后的图层,对解码后的图层进行异步绘制。对多个图层进行异步绘制,可以进一步节省主线程的渲染时长,调高动画播放的流畅性。
图5a示出了现有技术中动画同步解码和绘制的流程示意图。图5b示出了本申请实施例中动画异步解码和绘制的流程示意图。在图像包含三个图层的前提下,如图5a所示,在同步执行过程中,针对每一帧的多个图层,在该帧图像刷新后,均依次执行解码、绘制的流程,然后一同上屏显示,其中解码和绘制占用的时间较长。如图5b所示,在异步执行过程中,由于利用多线程框架异步执行解码和绘制任务,因此,缩短了解码和绘制占用主线程的时间,从而缩短了渲染时长。
由于同一个图像中不同图层的绘制需要按照一定的次序执行,因此,一种可选的实施例中,利用消息队列保证图层绘制的时序性。
具体地,上述利用多个线程对所述多个图层并行解码,包括:
针对所有图层,开启对应数量的多个解码线程;
多个解码线程并行执行解码任务;
任一解码线程完成解码任务后,将解码后的图层放入消息队列中的对应位置;
利用多个线程异步绘制解码后的多个图层,包括:
针对所有图层,开启对应数量的多个绘制线程;
多个绘制线程按照固定时序,从所述消息队列中获取解码后的图层并进行绘制。
具体实施过程中,同一个图像中一般包含多个图层,针对每一个图层分别创建一个解码线程和一个绘制线程。由于同一个图层的绘制线程执行绘制任务需要这种解码线程执行完成之后,因此,针对同一个图层,解码线程执行完解码任务后,将解码后的图层放入消息队列中的对应位置,绘制线程从该消息队列的对应位置处获取对应的图层执行绘制任务。另一方面,同一个图像中不同的图层需要按照一定的顺序进行绘制,一般为按照从下至上的顺序进行绘制。图6示出了一个图像中包含三个图层的示意图。如图6所示,三个图层按照从下至上的顺序依次绘制,即首先绘制图层a,之后是图层b,最后绘制图层c。因此,无论解码线程将解码后的图层放入队列中的次序,绘制线程从消息队列中获取解码后的图层需要按照固定的时序。
仍以图6的图像为例对各个图层的渲染过程详细介绍。若当前帧图像如图6所示,包含三个图层,则在上一帧图像显示过程中,获取当前帧图像,确定当前帧图像包含三个图层后,开启三个解码线程和三个绘制线程,三个解码线程分别用于执行三个图层的解码任务,三个绘制线程分别用于执行三个图层的绘制任务。
图7示出了一种可选的实施例中多个线程的工作流程图。如图7所示,线程1、线程2和线程3为解码线程,线程1、线程2和线程3并行执行解码任务,其中线程1用于执行图层a的解码任务,线程2用于执行图层b的解码任务,线程3用于执行图层c的解码任务。线程1、线程2和线程3按照对应的位置,将解码后的图层放入消息队列中,即线程1将解码后的图层a放入消息队列中的第一个位置,线程2将解码后的图层b放入消息队列中的第二个位置,线程3将解码后的图层c放入消息队列中的第三个位置。这里,图层无论解码任务执行完成的先后顺序,均按照对应的位置放在消息队列中。
线程4、线程5和线程6为绘制线程,线程4、线程5和线程6异步执行绘制任务,且由于不同图层需按序绘制,因此,线程4、线程5和线程6按照消息队列中的图层顺序依次获取解码后的图层,并按照时序执行绘制任务。具体地,线程4从消息队列中获取解码后的图层a,对解码后的图层a进行绘制;线程5从消息队列中获取解码后的图层b,对解码后的图层b进行绘制;线程6从消息队列中获取解码后的图层c,对解码后的图层c进行绘制。上述的绘制任务依次异步执行,从而图层a首先被绘制,其次是图层b,最后绘制图层c,最终整个图像被绘制完成,存入内存,等待当前帧刷新后进行显示。
上述解码和绘制过程,通过消息队列实现两个线程之间的通信,从而在线程的并行执行和异步执行的同时,保证同一图层先解码后绘制的顺序,同时保证同一图像中不同图层间的绘制顺序。
一种可选的实施例中,可以另外建立一个循环执行的线程,按照先后顺序依次从消息队列中获取解码后的图层交给绘制线程执行,直至消息队列中的图层被执行完毕,或者暂停任务,或者取消任务。
另一种可选的实施例中,消息队列也可以是一个优先级队列,即消息队列中的图层被赋予优先级,图层按照优先级由高至低的顺序被执行绘制任务。
需要说明的是,本申请实施例中的执行顺序为顺次执行,即按照消息队列中的排序依次获取对应的图层执行绘制任务。但图层的执行顺序并不仅限于上述所举实施例中的顺序排列,还可以是其它的排列和执行顺序,可以根据需求进行相应的排列和执行顺序配置。
进一步地,为了实现各个线程之间渲染环境的共享,本申请实施例中,确定下一帧图像包括多个图层之后,还包括:
多个解码线程和多个绘制线程从相同的素材资源中获取渲染环境。
具体实施过程中,针对各个线程,可以采用在同一个开放图形库中配置动画信息的配置方式,即所有线程共享同一个开放图形库,从而保证各个图层的信息一致性。
一种可选的实施例中,基于OpenGL Context创建Context依赖的框架,如图8所示,即素材资源为OpenGL,所有线程的渲染环境都是从共享的OpenGL Context(共享上下文)中创建的。这样,每个线程都拥有自己的OpenGL Context环境,同时,各个线程之间也实现了OpenGL环境的共享,实现信息一致。
此外,若个别线程之间需要共享其它的OpenGL Context,针对这部分线程,也可以基于其它的OpenGL Context创建渲染环境,从而实现部分线程之间的环境共享,实现信息一致。
本申请实施例中的动画渲染方法相对于现有技术方案具有明显的有益效果。图9示出了现有技术中动画同步渲染和本申请实施例中动画异步渲染的效果对比示意图。图9中左图为三个动画序列帧同步渲染的效果图,其中,解码耗时为5.12ms,整体的渲染耗时为29.44ms。图9中右图为三个动画序列帧异步渲染的效果图,其中,解码耗时为2.56ms,整体的渲染耗时为19.88ms。由上述对比可以看出,解码耗时和整体的渲染耗时都有了较为明显的减少,这是由于本申请实施例采用异步解码以及异步绘制所带来的结果,极大地缩短了渲染耗时,提高了动画播放的流畅程度。
一种可选的实施例中,为了进一步减少渲染耗时,本申请实施例中增加了静态区间的概念。则本申请实施例中绘制下一帧图像,包括:
确定下一帧图像位于静态区间内;
获取静态区间对应的参考帧图层;
将参考帧图层作为下一帧图像的图层进行绘制。
具体实施过程中,会出现多个帧之间图层不变的情况。例如,动画的第N帧包含三个图层,第N+1帧包含三个图层,第N+2帧包含两个图层,其中,第N帧至第N+2帧之间图层d保持不变。则创建动画时,可以标示出第N帧至第N+2帧为静态区间,参考帧图层为第N帧的图层d。这样,在绘制第N+1帧图像和第N+2帧图像时,可以复用已经解码完成的第N帧的图层d,即直接将解码后的图层d作为第N+1帧的图层以及第N+2帧的图层进行绘制,从而节省了第N+1帧图层和第N+2帧图层的解码时间,进一步缩短了渲染耗时。此外,由于静态区间中的后续帧直接复用解码后的参考帧图层,无需重复存储,因此还降低了内存的占用率。
一种具体实现场景中,未设置静态区间和参考帧图层的动画渲染时长为7346us,设置了静态区间和参考帧图层后,动画渲染耗时为486us,渲染效率提高了10倍以上。
下面以具体实施例对上述流程进行详细介绍,具体实施例包括以下步骤:
第一帧刷新后,获取动画中的第一帧图像。
确定第一帧图像包含的图层数量为M,M≥1。
创建2M个线程,其中包括M个解码线程和M个绘制线程。其中,所有2M个线程的OpenGL Context环境都是从共享的OpenGL Context中创建的。
M个解码线程对M个图层分别进行解码处理,并将解码后的图层放入消息队列中。
M个绘制线程按照预定顺序,依次从消息队列中获取解码后的图层进行异步绘制处理,形成绘制完成的第一帧图像。
将第一帧图像上屏显示。
在上述第一帧图像进行解码、绘制和显示的过程中,获取第二帧图像,确定第二帧图像包含的图层数量为L,创建2L个线程,其中包括L个解码线程和L个绘制线程。
L个解码线程中的每一个解码线程均执行:判断对应的图层是否设置有静态区间和参考帧图层,若是,则直接获取参考帧图层,放入消息队列中;若否,则将对应的图层进行解码处理,将解码后的图层放入消息队列中。
L个绘制线程按照预定顺序,依次从消息队列中获取解码后的图层进行异步绘制处理,形成绘制完成的第二帧图像,将第二帧图像进行存储。
第二帧刷新后,获取内存中的第二帧图像,并将第二帧图像上屏显示。
在第二帧图像显示过程中,获取第三帧图像。针对第三帧图像执行如上述第二帧图像的处理过程,这里不做赘述。
针对动画的后续帧图像,依次执行如上述的处理过程,直至将动画的所有帧图像播放完成。
下述为本申请装置实施例,对于装置实施例中未详尽描述的细节,可以参考上述一一对应的方法实施例。
请参考图10,其示出了本申请一个实施例提供的数据处理的结构方框图。该动画渲染装置通过硬件或者软硬件的结合实现成为图1中终端102的全部或者一部分。该装置包括:获取单元1001、解码单元1002、绘制单元1003、显示单元1004。
获取单元1001,用于获取动画的当前帧图像,当前帧图像是在显示界面显示上一帧图像的过程中进行解码和绘制的;
显示单元1004,用于在显示界面显示当前帧图像;
解码单元1002,用于在当前帧图像的显示过程中,解码下一帧图像;
绘制单元1003,用于在当前帧图像的显示过程中,绘制下一帧图像。
一种可选的实施例中,获取单元1001,还用于确定下一帧图像包括多个图层;
解码单元1002,具体用于利用多个解码线程对多个图层并行解码,其中一个解码线程用于执行一个图层的解码任务;
绘制单元1003,具体用于利用多个绘制线程异步绘制解码后的多个图层,其中一个绘制线程用于执行一个图层的绘制任务。
一种可选的实施例中,解码单元1002,具体用于:
针对所有图层,开启对应数量的多个解码线程;
多个解码线程并行执行解码任务;
任一解码线程完成解码任务后,将解码后的图层放入消息队列中的对应位置;
绘制单元1003,具体用于:
针对所有图层,开启对应数量的多个绘制线程;
多个绘制线程按照固定时序,从消息队列中获取解码后的图层并进行绘制。
一种可选的实施例中,解码单元1002和绘制单元1003,还用于:
从相同的素材资源中获取渲染环境。
一种可选的实施例中,解码单元1002,还用于确定下一帧图像位于静态区间内;获取静态区间对应的参考帧图层;
绘制单元1003,还用于将参考帧图层作为下一帧图像的图层进行绘制。
一种可选的实施例中,获取单元1001,还用于获取动画的第一帧图像;
解码单元1002,还用于对第一帧图像进行解码;
绘制单元1003,还用于对第一帧图像进行绘制;
显示单元1004,还用于在显示界面显示第一帧图像;
其中,解码单元1002,用于在第一帧图像的解码、绘制和显示过程中,解码第二帧图像;绘制单元1003,用于在第一帧图像的解码、绘制和显示过程中,绘制第二帧图像。
基于与图3论述的动画渲染方法的实施例相对应地,本申请实施例还提供了一种终端设备1100,该终端设备1100可以为智能手机、平板电脑,手提电脑或PC机等电子设备。
请参照图11,该终端设备1100包括显示单元1140、处理器1180以及存储器1120,其中,显示单元1140包括显示面板1141,用于显示动画图像以及终端设备1100的各种操作界面等,在本申请实施例中主要用于显示终端设备1100中已安装的客户端的界面、快捷窗口等。可选的,可以采用LCD(Liquid Crystal Display,液晶显示器)或OLED(Organic Light-Emitting Diode,有机发光二极管)等形式来配置显示面板1141。
处理器1180用于读取计算机程序,然后执行计算机程序定义的方法,例如处理器1180读取动画播放应用长须,从而在该终端设备1100上运行应用,在显示单元1140上显示应用的界面。处理器1180可以包括一个或多个通用处理器,还可包括一个或多个DSP(Digital Signal Processor,数字信号处理器),用于执行相关操作,以实现本申请实施例所提供的技术方案。
存储器1120一般包括内存和外存,内存可以为随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)等。外存可以为硬盘、光盘、USB盘、软盘或磁带机等。存储器1120用于存储计算机程序和其他数据,该计算机程序包括客户端对应的应用程序等,其他数据可包括操作***或应用程序被运行后产生的数据,该数据包括***数据(例如操作***的配置参数)和游戏玩家数据。本申请实施例中程序指令存储在存储器1120中,处理器1180执行存储其中1120中的程序指令,实现前文图2中论述的动画渲染方法。
此外,终端设备1100还可以包括显示单元1140,用于接收输入的数字信息、字符信息或接触式触摸操作/非接触式手势,以及产生与终端设备1100的动画渲染有关的信号输入等。具体地,本申请实施例中,该显示单元1140可以包括显示面板1141。显示面板1141例如触摸屏,可收集用户在其上或附近的触摸操作(比如玩家使用手指、触笔等任何适合的物体或附件在显示面板1141上或在显示面板1141的操作),并根据预先设定的程式驱动相应的连接装置。可选的,显示面板1141可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器1180,并能接收处理器1180发来的命令并加以执行。
其中,显示面板1141可以采用电阻式、电容式、红外线以及表面声波等多种类型实现。除了显示单元1140,终端设备1100还可以包括输入单元1130,输入单元1130可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。例如,用户在动画播放过程中,可以通过触摸显示面板1141的方式进行操作,也可以通过输入单元1130进行操作,例如通过物理键盘对应的快捷键进行操作。
除以上之外,终端设备1100还可以包括用于给其他模块供电的电源1190、音频电路1160、近场通信模块1170和RF电路。终端设备1100还可以包括一个或多个传感器1150,例如加速度传感器、光传感器、压力传感器等。音频电路1160具体包括扬声器1161和麦克风1162等,例如终端设备1100可以通过扬声器1161播放动画的声音。
基于同一发明构思,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,当计算机指令在计算机上运行时,使得计算机执行前文论述任一设备执行动画渲染方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种动画渲染方法,其特征在于,所述方法包括:
获取动画的当前帧图像,所述当前帧图像是在显示界面显示上一帧图像的过程中进行解码和绘制的;
在显示界面显示所述当前帧图像,并在所述当前帧图像的显示过程中,确定下一帧图像包括的多个图层,并针对所述多个图层,开启对应数量的并行执行解码任务的多个解码线程,其中一个解码线程用于执行一个图层的解码任务;任一解码线程完成解码任务后,将解码后的图层放入消息队列中的对应位置;
针对所述多个图层,开启对应数量的多个绘制线程,所述多个绘制线程按照固定时序,从所述消息队列中获取解码后的图层并进行绘制,其中一个绘制线程用于执行一个图层的绘制任务。
2.根据权利要求1所述的方法,其特征在于,所述确定下一帧图像包括的多个图层之后,还包括:
所述多个解码线程和所述多个绘制线程从相同的素材资源中获取渲染环境。
3.根据权利要求1所述的方法,其特征在于,还包括:
确定所述下一帧图像位于静态区间内;
获取所述静态区间对应的参考帧图层;
将所述参考帧图层作为所述下一帧图像的图层进行绘制。
4.根据权利要求1至3任一项所述的方法,其特征在于,还包括:
获取所述动画的第一帧图像;
对所述第一帧图像进行解码和绘制;
在显示界面显示所述第一帧图像;
其中,在所述第一帧图像的解码、绘制和显示过程中,解码和绘制第二帧图像。
5.一种动画渲染装置,其特征在于,所述装置包括:
获取单元,用于获取动画的当前帧图像,所述当前帧图像是在显示界面显示上一帧图像的过程中进行解码和绘制的;
显示单元,用于在显示界面显示所述当前帧图像;
解码单元,用于在所述当前帧图像的显示过程中,确定下一帧图像包括的多个图层,并针对所述多个图层,开启对应数量的并行执行解码任务的多个解码线程,其中一个解码线程用于执行一个图层的解码任务;任一解码线程完成解码任务后,将解码后的图层放入消息队列中的对应位置;
绘制单元,用于针对所述多个图层,开启对应数量的多个绘制线程,所述多个绘制线程按照固定时序,从所述消息队列中获取解码后的图层并进行绘制,其中一个绘制线程用于执行一个图层的绘制任务。
6.根据权利要求5所述的装置,其特征在于,所述解码单元和所述绘制单元,还用于:
从相同的素材资源中获取渲染环境。
7.根据权利要求5所述的装置,其特征在于,所述解码单元,还用于确定所述下一帧图像位于静态区间内;获取所述静态区间对应的参考帧图层;
所述绘制单元,还用于将所述参考帧图层作为所述下一帧图像的图层进行绘制。
8.根据权利要求5至7任一所述的装置,其特征在于,所述获取单元,还用于获取动画的第一帧图像;
所述解码单元,还用于对第一帧图像进行解码;
所述绘制单元,还用于对第一帧图像进行绘制;
所述显示单元,还用于在显示界面显示第一帧图像;
其中,所述解码单元,用于在所述第一帧图像的解码、绘制和显示过程中,解码第二帧图像;所述绘制单元,用于在所述第一帧图像的解码、绘制和显示过程中,绘制所述第二帧图像。
9.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,
所述处理器执行所述计算机程序时实现如权利要求1至4任一项所述的动画渲染方法。
10.一种计算机可读存储介质,其特征在于,存储有处理器可执行指令,
所述处理器可执行指令被处理器执行时用于实现如权利要求1至4任一项所述的动画渲染方法。
CN201911349293.3A 2019-12-24 2019-12-24 一种动画渲染方法及装置 Active CN113034653B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911349293.3A CN113034653B (zh) 2019-12-24 2019-12-24 一种动画渲染方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911349293.3A CN113034653B (zh) 2019-12-24 2019-12-24 一种动画渲染方法及装置

Publications (2)

Publication Number Publication Date
CN113034653A CN113034653A (zh) 2021-06-25
CN113034653B true CN113034653B (zh) 2023-08-08

Family

ID=76451913

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911349293.3A Active CN113034653B (zh) 2019-12-24 2019-12-24 一种动画渲染方法及装置

Country Status (1)

Country Link
CN (1) CN113034653B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114567789A (zh) * 2021-11-04 2022-05-31 浙江浙大中控信息技术有限公司 一种基于双缓冲队列和视频帧拥塞控制的视频直播方法
CN117812332A (zh) * 2023-12-29 2024-04-02 书行科技(北京)有限公司 播放处理方法、装置、电子设备及计算机存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6430591B1 (en) * 1997-05-30 2002-08-06 Microsoft Corporation System and method for rendering electronic images
CN101031085A (zh) * 2007-03-30 2007-09-05 中国联合通信有限公司 一种移动终端帧动画的处理方法
CN103221918A (zh) * 2010-11-18 2013-07-24 德克萨斯仪器股份有限公司 上下文切换方法和装置
CN106095366A (zh) * 2016-06-07 2016-11-09 北京小鸟看看科技有限公司 一种缩短图像延迟的方法、装置和虚拟现实设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5635672B1 (ja) * 2013-12-05 2014-12-03 株式会社 ディー・エヌ・エー 画像処理装置及び画像処理プログラム
US9798581B2 (en) * 2014-09-24 2017-10-24 Facebook, Inc. Multi-threaded processing of user interfaces for an application

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6430591B1 (en) * 1997-05-30 2002-08-06 Microsoft Corporation System and method for rendering electronic images
CN101031085A (zh) * 2007-03-30 2007-09-05 中国联合通信有限公司 一种移动终端帧动画的处理方法
CN103221918A (zh) * 2010-11-18 2013-07-24 德克萨斯仪器股份有限公司 上下文切换方法和装置
CN106095366A (zh) * 2016-06-07 2016-11-09 北京小鸟看看科技有限公司 一种缩短图像延迟的方法、装置和虚拟现实设备

Also Published As

Publication number Publication date
CN113034653A (zh) 2021-06-25

Similar Documents

Publication Publication Date Title
WO2020186935A1 (zh) 虚拟对象的显示方法、装置、电子设备和计算机可读存储介质
EP3111318B1 (en) Cross-platform rendering engine
JP6467062B2 (ja) スプーフクロック及び細粒度周波数制御を使用する下位互換性
CN110989878B (zh) 小程序中的动画展示方法、装置、电子设备及存储介质
KR101952983B1 (ko) 콘텐트의 타일-기반 렌더링을 위한 방법 및 콘텐트를 렌더링하기 위한 시스템
US20130055072A1 (en) Multi-Threaded Graphical Display System
CN110704768B (zh) 基于图形处理器的网页渲染方法以及装置
WO2021008627A1 (zh) 游戏角色渲染方法、装置、电子设备及计算机可读介质
CN113244614B (zh) 图像画面展示方法、装置、设备及存储介质
CN105027039A (zh) 减少墨水渲染时的等待时间
CN113034653B (zh) 一种动画渲染方法及装置
CN114401443B (zh) 特效视频处理方法、装置、电子设备及存储介质
CN110750664B (zh) 图片的显示方法及装置
WO2018000372A1 (zh) 画面显示的方法和终端
CN112053449A (zh) 基于增强现实的显示方法、设备及存储介质
CN112053370A (zh) 基于增强现实的显示方法、设备及存储介质
JP2018512899A (ja) 仮想キャラクタターンを実施するための方法および端末
US20230267063A1 (en) Real-time latency measurements in streaming systems and applications
CN111127469A (zh) 缩略图显示方法、装置、存储介质以及终端
CN113411664A (zh) 基于子应用的视频处理方法、装置和计算机设备
CN104142807A (zh) 基于安卓控件利用OpenGL绘制图像的方法和***
WO2018175869A1 (en) System and method for mass-animating characters in animated sequences
JP2023055615A (ja) 自然言語処理を使用するゲーム・ログからのイベント情報抽出
CN115661375B (zh) 三维发型生成方法、装置、电子设备和存储介质
US10719286B2 (en) Mechanism to present in an atomic manner a single buffer that covers multiple displays

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: 40050662

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant