本发明涉及利用粒子系统进行图形处理的方法和装置,更具体地说,本发明涉及一种图形引擎粒子系统更新的方法和装置。
背景技术:
粒子系统是用于表示三维计算机图形学中模拟一些特定的模糊现象的技术,而对于这些现象,使用传统的渲染技术是难以实现其真实感的。在图形引擎中,一般使用粒子系统来实现特效。经常使用粒子系统模拟的现象有火、爆炸、烟、水流、落叶、云、雪、流星尾迹或发光轨迹等及其类似的抽象视觉效果。
在计算机的图形渲染领域,摄像机是一个非常重要的概念。摄像机是被虚拟出来的一个物件,人们可以从摄像机的视角来“观察”三维世界中的物体。对于任何三维游戏,都存在一个相应的摄像机,比如第一人称射击类(FPS)游戏,摄像机为主视角类型,角色扮演类(RPG)游戏,摄像机为尾随视角类型,而即时战略类(RTS)游戏,其相应的摄像机为第三人称视角类型。不管对于哪一类型的游戏,摄像机的位置和方向都是随着游戏的进行而实时改变的。
公告板是与摄像机相关的矩形面片,在游戏中,公告板一般都是朝向摄像机,因此从摄像机的角度,不会“观察”到公告板的侧面。游戏引擎中,渲染图元一般采用三角形,因此可以利用两个渲染图元构造一个公告板。在粒子系统中,一般都是采用公告板来渲染粒子的。
在例如游戏等许多应用中,在出现人物技能,天气,火焰等时,为了展现华丽的效果,常常会使用大量的特效,这些特效通常由粒子系统构成。在一般的图形引擎中,粒子系统的操作在主线程中执行,如果使用的粒子 系统太多,将会对这些应用的性能造成影响。而且随着粒子数目的增长,对这些应用性能的影响将会越发显著。
基于以上原因,如何能展现更多的效果,同时不会对应用的性能造成过多影响,成为了一个亟待解决的技术问题。
技术实现要素:
本发明提出了一种客户端引擎粒子系统后台更新的技术。特别是,提供一种粒子系统优化方案,使应用(例如游戏)能够表现更多的效果,并对应用的性能不会产生太多影响。
根据本发明的优化粒子系统方法,包括:
将粒子系统的更新操作以及粒子朝向计算从主线程中剥离出来,放到单独的线程(即粒子系统更新线程)中;
将渲染用到所有粒子系统数据统一放到一个内存池中,在渲染前把该内存中的数据传送到显卡中,只执行一次传送过程。
本发还提供一种通过多个线程利用粒子系统进行图形处理的方法,其中所述多个线程包括第一线程和第二线程,所述方法包括:
通过所述第一线程创建粒子系统,
唤醒所述第二线程,
通过所述第二线程执行所述粒子系统的更新操作和粒子朝向计算,以生产渲染数据,
阻塞所述第二线程,
通过所述第一线程利用所述渲染数据渲染所述粒子系统。
实施本发明,具有如下效果:
现在电脑CPU一般都是多核的,将粒子系统的更新操作以及粒子朝向计算移到单独的线程中执行,从而和主线程并行运算在一定程度上可以提高程序的性能;
将所有粒子系统渲染数据统一放到一个内存池中,在渲染前把该内存中的数据传入到显存比每个粒子系统执行一次传入操作效率要高的多。
附图说明
从下面结合附图对本发明的具体实施方式的描述中可以更好地理解本发明,其中:
图1示出了根据本发明示例性实施例的采用粒子系统进行图形处理的方法的流程图,
图2示出被配置成实施这里提供的一个或多个实施例的计算装置。
具体实施方式
为了使本发明的特征及优点得到更清楚的了解,以下结合附图对本发明的示例性实施例进行详细说明。应当理解,这里给出的实施例只是示例性的,并不作为本发明的限制。
图1示出了根据本发明示例性实施例的采用粒子系统进行图形处理的方法的流程图。如图1所示,本发明实施例的图形处理方法包括了两个线程,即主线程和粒子系统更新线程。本领域的技术人员应该理解,虽然图1中示出了两个线程,但是也可以包括更多的线程。
主线程和粒子系统更新线程例如可以在程序初始化时创建。粒子系统更新线程的工作就是更新粒子系统,计算粒子系统朝向(例如面朝向)以及将渲染数据传入到显存中。粒子系统更新线程具有唤醒和阻塞接口。唤醒接口的作用是启动该线程,开始处理粒子系统,阻塞接口的作用是停止该线程,不占用任何CPU时间。由于该线程创建后,先处于阻塞阶段,因此,主线程将所有的粒子系统放于队列中之后需要通过唤醒接口启动粒子系统更新线程。启动粒子系统更新线程后,主线程和粒子系统更新线程二者开始并行运算。
特别是对于多核CPU,将粒子系统的更新操作以及粒子朝向计算移到单独的线程中执行,从而和主线程并行运算在一定程度上可以提高程序的性能。
如图1所示,主线程在步骤101开始,例如可以采用心跳来控制主线程每个循环的开始和结束。
在步骤102中,主线程执行粒子系统的创建和/或销毁操作。粒子系统由粒子的集合组成,可以使用例如发射器发射粒子(即生成粒子)。每个粒子根据发射器的位置及给定的生成区域在特定的三维空间位置生成,根据粒子生成速度以及更新间隔计算新粒子的数目。
根据需要可以生成一个或多个粒子系统。例如,游戏里面为了表现华丽的效果,例如人物技能,天气,火焰等,会用到大量的特效,这就需要使用多个粒子系统。
粒子系统中的粒子具有属性,其会影响粒子性态或对粒子进行渲染的方式。可以在生成粒子同时对每个新产生的粒子的属性给出初始值。粒子的属性可以包括:位置、速度(速率和方向)、颜色、形状、大小、透明度等。
主线程例如还可以检查所有存活的粒子,根据一定的条件,例如,是否超过生命周期,来判断粒子是否死亡,一个系统中所有的粒子都死亡时,销毁这个粒子系统。
然后该方法转到103。在步骤103中,主线程更新摄像机的位置和方位(例如根据游戏的进行),并相应更新粒子系统的位置和方位。之后在步骤104中,主线程将所有的粒子系统放于队列中。然后启动粒子系统更新线程,同时主线程在步骤111中继续执行不涉及粒子系统的其它操作,由此两个线程并行执行。
下面描述粒子系统更新线程。粒子系统更新线程启动后,在步骤121中,粒子系统更新线程清空粒子系统内存池,执行粒子系统的更新操作。粒子的更新操作,包括发射粒子和回收粒子,即根据规则在一定范围内产生粒子,同时对超过生命周期而死亡的粒子进行回收。更新操作还改变粒子的属性,例如改变粒子位置(通过移动)和大小等。在队列中具有多个粒子系统时,步骤121例如可以顺序地对这些系统执行更新操作。然后,更新线程转到步骤122。
随着摄像机位置,方位的改变,系统中每个粒子的朝向需要在每一帧重新计算,在步骤122中,由粒子系统更新线程执行粒子朝向计算,并将计算结果存储到粒子系统内存池中。根据示例实施例,例如可以采用公告 板作为粒子最终渲染图元,随着摄像机位置,方位的改变,在每一帧重新计算矩形的4个顶点位置(即计算粒子的朝向)。
计算完朝向后,粒子系统更新线程将数据(即渲染数据)存储到内存池中。粒子系统更新线程将队列中的所有粒子系统的渲染数据都存储到内存池中之后,
在步骤123中,粒子系统更新线程将粒子系统渲染数据从粒子系统内存池中传入到显存,以进行渲染。粒子数据的相关计算结果都是保存在内存中的,因此需要把粒子数据传送到显存用于渲染。由于在步骤122中将所有粒子系统数据统一放到一个内存池中,因此,只需要执行一次传送过程便可以把内存中的数据传送到显卡中。
最后,在步骤124中,粒子系统更新线程通知主线程粒子系统更新操作完成。在通知主线程后,粒子系统更新线程将自身挂起,而后继续阻塞状态,直至下次唤醒。
根据本发明示例实施例,粒子系统更新线程用来存储粒子渲染数据的内存池是一段连续的内存,在执行更新操作(步骤121)之前先清空该内存池,在更新操作和朝向计算完成之后,内存池里的数据会传输给显存。例如可以通过偏移量确定存储粒子系统数据的起始位置。假如假设每个粒子系统所需大小是30字节,即需要30个字节大小的内存空间用于存储粒子系统的数据。如果设第一个粒子系统的偏移量是0,那第二个粒子系统的偏移量就是0+30,第n个粒子系统的偏移量就是0+30×(n-1)。在每次更新操作开始时,根据偏移量确定存储粒子系统数据的起始位置。
下面接着描述主线程。在步骤113中,主线程判断粒子系统的更新是否结束。如果是,则进行下一步骤;如果否,则重复这一判断过程。这一判断的执行,可以通过判断是否接收到粒子系统更新线程发送的通知消息而完成。
在步骤114中,主线程执行粒子系统的渲染。根据本发明的示例实施例,采用例如公告板技术进行粒子系统的渲染,每个粒子的最终渲染采用四个顶点进行描述。渲染算法对视觉效果或计算机图形学领域的技术人员是已知的。普通的渲染算法包括但不限于:光栅化、光线跟踪和光子映射。 对于光线跟踪,通过从图像像素至光源反向跟踪相应光线来渲染对象,然后,由对象表面的反射系数和光源的特性来确定像素颜色。
上文说过粒子系统更新线程的工作是更新粒子系统,计算粒子系统面朝向以及将渲染数据传入到显存中。在粒子系统更新线程进行的同时,主线程在步骤111中,执行不涉及粒子系统的其余操作。在步骤112中,主线程执行除粒子系统外其余模型的渲染过程。
如图1中的虚线所示,主线程执行的步骤111至113与粒子系统更新线程所执行的步骤121至124并行进行。在步骤115中,主线程执行其余操作。
由上面的描述可知,本发明将粒子系统更新操作以及计算面朝向操作从主线程中剥离出来。主线程负责例如创建和销毁粒子系统、更新粒子系统的位置以及方位、更新摄像机的位置以及方位、渲染粒子系统。在唤醒粒子系统更新线程前,主线程要先执行完创建和销毁粒子系统、更新粒子系统的位置以及方位、更新摄像机的位置以及方位等操作。渲染粒子系统要等粒子系统更新线程完毕后再执行。采用这种安排避免了线程之间加锁产生的影响。对于许多应用(例如大多数游戏)来说,粒子系统一般都是透明的,所以粒子系统都是较后开始渲染。在渲染其他物体的时候,主线程和粒子系统更新线程是并行运行的。
本领域的技术人员可以理解上述实施例的方法可以通过能够在计算装置上运行的计算机可读指令实现。
图2示出被配置成实施这里提供的一个或多个实施例的计算装置1002的例子。计算装置1002的一个实例是服务器,例如可以是上文提到的原服服务器、基础跨服服务器和/或复合跨服服务器。计算装置1002可以包括处理单元1006和存储器1008。存储器1008例如可以是易失性的(例如RAM)、非易失性的(例如ROM、闪速存储器等等)、或二者的组合。这种配置在图2上用虚线1004例示。
装置1002还可包括附加的存储装置,包括但不限于,磁存储装置、光存储装置等等。这样的附加存储装置在图2上用存储装置1010例示。在一个实施例中,实施这里提供的一个或多个实施例的计算机可读指令可 以是在存储装置1010中。存储装置1010还可存储操作系统、应用程序等等的其它计算机可读指令。计算机可读指令可被装载在存储器1008中,用于例如由处理单元1006执行。
装置1002还可包括允许装置1002与其它装置通信的通信装置1016。通信装置1016可包括但不限于,调制解调器、网络接口卡(NIC)、集成网络接口、射频发射机/接收机、红外端口、USB连接、或用于将计算装置1002连接到其它计算装置的其它接口。通信装置1016可包括有线连接或无线连接。
装置1002可包括输入装置1014,诸如键盘、鼠标、笔、话音输入装置、触摸输入装置、红外照相机、视频输入装置、和/或任何其它输入装置。诸如一个或多个显示器、扬声器、打印机、和/或任何其它输出装置那样的输出装置1012也可以被包括在装置1002中。输入装置1014和输出装置1012可以经由有线连接、无线连接或它们的任何组合被连接到装置1002。
计算装置1002的部件可以通过各种互连,诸如总线,而被连接。这样的互连可包括诸如PCI Express那样的外围设备互连(PCI)、通用串行总线(USB)、firewire(IEEE 1394)、光总线结构等等。
此外,尽管已经详细描述了本发明及其优势,但应该理解,可以在不背离所附权利要求限定的本-发明主旨和范围的情况下,进行各种不同的改变、替换和更改;而且,本发明的范围并不仅限于本说明书中描述的系统、方法和步骤的实施例。作为本发明普通技术人员应理解,通过本发明,现有的或今后开发的用于执行和根据本发明所采用的技术方案基本相同的方式或获得基本相同结果的方法和步骤根据本发明可以被使用。