游戏场景中生成贴图的方法、装置和系统与流程

文档序号:15146646发布日期:2018-08-10 20:31阅读:241来源:国知局

本发明涉及场景渲染领域,具体而言,涉及一种游戏场景中生成贴图的方法、装置和系统。



背景技术:

在游戏开发的过程中,开发人员需要对游戏中的对象(例如,游戏中的人物、景物)进行渲染,通常烘焙的方式生成贴图,然后在通过贴图对游戏中的对象进行渲染。在现代游戏渲染的管线中,物体表面的光影变化通常在游戏场景的呈现上起着十分重要的作用,其中,真实的光影效果会给用户带来良好的视觉上的体验。然而,在当前以光栅化为主的gpu(graphicsprocessingunit,即图像处理单元)架构下,符合物理的、逼真的场景渲染的实现对游戏系统的性能提出了较高的要求,尤其是对实时性要求较高的游戏场景的渲染。

在现有技术中,通常使用离线光照模拟技术(例如,lightmap技术)来对游戏场景中的光照进行渲染。然而,在现有技术中,烘焙进程与引擎系统集成在一起,在使用lightmap技术对游戏场景进行烘焙的过程中,游戏系统的cpu与gpu全力运转,从而导致游戏引擎暂时无法工作。即在对游戏场景进行烘焙时,游戏系统的软硬件资源几乎全部被烘焙系统所使用,游戏引擎的其他功能无法正常使用,并且,其他应用无法流畅使用。另外,烘焙进程与引擎系统集成在一起不利于采用分布式架构对游戏对象进行烘焙,即无法将烘焙任务拆分为若干个子任务,并将子任务配到多台设备上分别计算,每次烘焙的耗时较长。此外,由于游戏运行时引擎系统的运行方式、图像渲染方式与对游戏对象进行烘焙的方式不一致,从而引擎系统与烘焙进程所承载的任务不同。游戏运行时必须保证游戏以稳定的、较高的帧率运行,对烘焙的实时性要求较高,因此,使得游戏界面的流畅性较差,降低了用户的视觉体验。

针对上述现有技术中由于烘焙系统依赖于引擎系统导致在对游戏场景进行烘焙时游戏引擎无法正常工作的问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种游戏场景中生成贴图的方法、装置和系统,以至少解决现有技术中由于烘焙系统依赖于游戏引擎,导致在对游戏场景进行烘焙时游戏引擎无法正常工作的技术问题。

根据本发明实施例的一个方面,提供了一种游戏场景中生成贴图的方法,包括:确定游戏场景下的游戏对象;创建游戏对象的烘焙镜像;发送烘焙镜像至服务器;接收服务器根据烘焙镜像生成的贴图。

根据本发明实施例的另一方面,还提供了一种游戏场景中生成贴图的方法,包括:接收来自于客户端的游戏场景的场景参数以及游戏对象的烘焙镜像;根据场景参数还原游戏场景;根据游戏场景对烘焙镜像进行烘焙,生成贴图。

根据本发明实施例的另一方面,还提供了一种游戏场景中生成贴图的系统,包括:客户端,用于确定在游戏场景下的游戏对象,并创建游戏对象的烘焙镜像,然后发送烘焙镜像以及游戏场景的场景参数;服务器,与客户端通信连接,用于获取烘焙镜像以及场景参数,并根据场景参数还原客户端的游戏场景,然后根据游戏场景对烘焙镜像进行烘焙,生成贴图;客户端还用于接收服务器发送的贴图。

根据本发明实施例的另一方面,还提供了一种游戏场景中生成贴图的装置,包括:确定模块,用于确定游戏场景下的游戏对象;创建模块,用于创建游戏对象的烘焙镜像;发送模块,用于发送烘焙镜像至服务器;接收模块,用于接收服务器根据烘焙镜像生成的贴图。

根据本发明实施例的另一方面,还提供了一种游戏场景中生成贴图的装置,包括:获取模块,用于接收来自于客户端的游戏场景的场景参数以及游戏对象的烘焙镜像;还原模块,用于根据场景参数还原游戏场景;生成模块,用于根据游戏场景对烘焙镜像进行烘焙,生成贴图。

根据本发明实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,其中,程序执行游戏场景中生成贴图的方法。

根据本发明实施例的另一方面,还提供了一种处理器,该处理器用于运行程序,其中,程序运行时执行游戏场景中生成贴图的方法。

在本发明实施例中,采用烘焙进程与游戏引擎相互独立的方式,通过确定游戏场景下的游戏对象,并创建游戏对象的烘焙镜像,然后发送烘焙镜像至服务器,并接收服务器根据烘焙镜像生成的贴图,达到了烘焙进程与游戏引擎的进程并行运行的目的,从而实现了提高烘焙效率的技术效果,进而解决了现有技术中由于烘焙系统依赖于游戏引擎,导致在对游戏场景进行烘焙时游戏引擎无法正常工作的技术问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例的一种游戏场景中生成贴图的方法流程图;

图2是根据本发明实施例的一种可选的烘焙前的游戏对象的示意图;

图3是根据本发明实施例的一种可选的烘焙后的游戏对象的示意图;

图4是根据本发明实施例的一种可选的基于客户端的生成贴图的方法流程图;

图5是根据本发明实施例的一种基于客户端的生成贴图的方法流程图;

图6是根据本发明实施例的一种可选的基于客户端的生成贴图的方法流程图;

图7是根据本发明实施例的一种游戏场景中生成贴图的系统结构示意图;

图8是根据本发明实施例的一种游戏场景中生成贴图的装置结构示意图;以及

图9是根据本发明实施例的一种游戏场景中生成贴图的装置结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:

(1)lightmap技术,指应用于游戏场景物体表面,能够模拟物体表面光照状态的纹理贴图,其包括了纹理的创建、采样、压缩的过程,以及为创建纹理所进行的预处理工序和将生成后的纹理在游戏场景中的实际应用的过程。

(2)cs架构,即client-server结构(客户端-服务器架构)。其中,在本申请中,客户端指服务的请求者,其主要是接收用户输入的数据、封装数据,并向服务器发起服务处理请求;服务器用于接收多个客户端的请求,并将客户端输入的数据按照一定算法计算出结果,然后将结果返回给客户端。

(3)gpu(graphicsprocessingunit),即图形处理单元,指电子设备上进行图像运算工作的微处理器。其中,在本申请中,gpu主要是指工作在个人电脑或手持设备(例如,手机、平板电脑)上的用于渲染游戏场景的处理器。

(4)shader,即着色器,是指运行在gpu上的程序,其与cpu程序相比,具有并行度高、独立性强的优点。

(5)光栅化,是指将对象的顶点数据转换为像素的过程。其中,在对游戏场景进行实时渲染的过程中,光栅化是指通过一系列顶点变换将顶点坐标转化为视窗坐标,并通过shader对游戏场景进行像素着色的过程。

(6)渲染管线,即renderingpipeline,是指显示芯片内部对图形信号进行处理的相互独立的并行处理单元。其中,在本申请中,渲染管线指将3d向量图元转化为2d光栅化图像的过程,需要说明的是,在该过程中使用到了多种图形渲染算法。

(7)烘焙,是指利用渲染管线将物体表面的光照信息固化到光照纹理贴图上的过程。

实施例1

根据本发明实施例,提供了一种游戏场景中生成贴图的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图1是根据本发明实施例的游戏场景中生成贴图的方法流程图,如图1所示,该方法包括如下步骤:

步骤s102,确定游戏场景下的游戏对象。

需要说明的是,游戏引擎是烘焙系统的客户端,烘焙进程是烘焙系统的服务器,其中,烘焙系统为对游戏场景下的游戏对象进行烘焙的系统。客户端和服务器分别在不同的设备上运行,并且,客户端与服务器进行进程间的通信,其中,进程间的通信方式可以为但不限于管道通信、消息队列通信以及网络套接字通信。

此外,还需要说明的是,游戏对象可以为但不限于游戏场景中的人物、景物等,上述游戏对象为需要进行烘焙的对象。

具体的,在客户端启动之后,客户端调用预设场景库中的场景模块,并加载游戏场景,然后根据游戏场景生成游戏对象。此时,用户可通过烘焙系统的客户端的显示界面从多个游戏对象中,选择需要进行烘焙的游戏对象,例如,用户通过输入设备(例如,鼠标、键盘、触控显示屏)选择图2中牛奶盒为需要进行烘焙的对象。

步骤s104,创建游戏对象的烘焙镜像。

需要说明的是,游戏对象的烘焙镜像为在服务器进行烘焙的对象,其中,游戏对象与烘焙镜像的数据同步。例如,用户在客户端选择对图2所示的牛奶盒进行烘焙,客户端生成牛奶盒的镜像,服务器对牛奶盒的镜像进行烘焙。

步骤s106,发送烘焙镜像至服务器。

需要说明的是,在客户端创建游戏对象的烘焙镜像之后,客户端将游戏对象的烘焙镜像发送至服务器,由服务器对其进行烘焙镜像进行烘焙。由于服务器处理的是游戏对象的烘焙镜像,而并不是游戏对象本身,因此,在服务器进行烘焙进程的过程中,客户端的游戏引擎不需要在服务器结束烘焙进程之后再运行,而是可正常运行。

步骤s108,接收服务器根据烘焙镜像生成的贴图。

需要说明的是,在客户端将游戏对象的烘焙镜像发送至服务器之后,客户端即可执行游戏引擎的其他进程,同时,服务器根据接收到的烘焙镜像进行烘焙,生成贴图。其中,上述贴图可以为但不限于光照贴图(即lightmap贴图)。在服务器生成贴图之后,服务器将生成的贴图发送至客户端,客户端对接收到的贴图进行处理,将贴图与游戏对象进行结合,得到渲染后的游戏对象。例如,对图2所示的牛奶盒进行渲染得到图3所示的渲染后的牛奶盒。

基于上述步骤s102至步骤s108所限定的步骤,可以获知,通过确定游戏场景下的游戏对象,并创建游戏对象的烘焙镜像,然后发送烘焙镜像至服务器,并接收服务器根据烘焙镜像生成的贴图。

容易注意到的是,由于游戏对象的烘焙进程与游戏引擎的进程分别在不同的设备中运行,因此,在服务器对游戏对象的烘焙镜像进行烘焙时,客户端仍可执行游戏引擎对应的进程,而无需等待服务器的烘焙结束。另外,由于服务器处理的是游戏对象的烘焙镜像,而并不是游戏对象本身,因此,服务器与客户端可独立运行,互不影响。

由上述内容可知,本申请所提供的游戏场景中生成贴图的方法可以达到烘焙进程与游戏引擎的进程并行运行的目的,从而实现了提高烘焙效率的技术效果,进而解决了现有技术中由于烘焙系统依赖于游戏引擎,导致在对游戏场景进行烘焙时游戏引擎无法正常工作的技术问题。

在一种可选的实施例中,在创建游戏对象的烘焙镜像之前,需要将建立服务器与客户端之间的连接,具体步骤如下:

步骤s10,向服务器发送连接请求;

步骤s12,获取连接请求的发送次数;

步骤s14,在发送次数大于预设次数的情况下,生成连接失败消息。

需要说明的是,如果客户端向服务器发送连接请求,服务器未在预定时间内返回确认连接的确定消息,则说明客户端本次向服务器发送的连接请求失败。此时,客户端需要确定连接请求的发送次数是否大于预设次数(例如,3次),如果发送次数大于预设次数,例如,如果连续3次均连接失败,则确定该客户端与服务器连接失败,客户端向用户展示连接失败的消息。

在另一种可选的实施例中,如果在预设次数内,客户端与服务器连接成功,则客户端开始创建游戏对象的烘焙镜像,具体步骤如下:

步骤s20,向服务器发送连接请求;

步骤s22,获取连接请求的发送次数;

步骤s24,在发送次数小于或等于预设次数的情况下,确定执行创建烘焙镜像的步骤。

需要说明的是,可通过如下步骤获取连接请求的发送次数:

重传步骤,如果在预设时间段内未接收到服务器返回的确定消息,再次向服务器发送连接请求;

记录步骤,对发送次数执行递增操作,得到更新后的发送次数,返回重传步骤,直至发送次数大于预设次数。

具体的,客户端在向服务器发送连接请求之后,客户端开始计时,如果客户端在预设时间段内未接收到服务器返回的用于表征连接成功的确定消息,则说明本次请求失败。此时,客户端对连接请求的发送次数进行递增操作,例如,使发送次数加一,然后判断进行递增操作后的发送次数是否大于预设次数,如果发送次数不大于预设次数,则客户端继续向服务器发送连接请求。

需要说明的是,上述过程仅介绍了在创建烘焙对象之前,首先建立了客户端与服务器之间的通信连接的过程。其中,烘焙对象的创建与通信连接的先后顺序并不限于上述顺序,客户端在创建烘焙对象的过程中,可同时建立客户端与服务器之间的通信连接,此外,客户端也可以在连接客户端与服务器之间的通信连接之后,再创建烘焙对象。

此外,还需要说明的是,在接收到服务器生成的贴图之前,客户端可对服务器生成的贴图进行预览。如果用户对生成的贴图不满意,用户可通过客户端输入场景参数,以对服务器生成的贴图进行修改。

在一种可选的实施例中,在用户输入场景参数后,客户端对烘焙镜像进行更新,服务器根据更新后的烘焙镜像生成贴图,具体步骤如下:

步骤s30,获取输入的场景参数;

步骤s32,根据场景参数更新烘焙镜像;

步骤s34,发送更新后的烘焙镜像至服务器,并接收服务器根据更新后的烘焙镜像生成的贴图。

具体的,用户通过输入设备向客户端输入场景参数,客户端在检测到场景参数发生变化之后,对游戏对象的烘焙镜像进行更新,同时,客户端将更新后的烘焙镜像发送至服务器。服务器接收更新后的烘焙镜像,并对更新后的烘焙对象进行烘焙,得到贴图,此时,客户端显示更新后的烘焙镜像的贴图的预览图像。在用户确定贴图之后,服务器将生成的贴图发送至客户端,客户端对贴图进行像素调和处理,并保存处理后的贴图。

在另一种可选的实施例中,在用户输入场景参数后,客户端确定烘焙镜像更新之前和更新之后的差异参数,服务器更新差异参数更新烘焙镜像,进而更加更新后的烘焙镜像生成贴图,具体步骤如下:

步骤s40,获取输入的场景参数;

步骤s42,根据场景参数对游戏场景进行更新;

步骤s44,确定第一烘焙镜像的参数与第二烘焙镜像的参数的差异参数,其中,第一烘焙镜像为更新前的烘焙镜像,第二烘焙镜像为更新后的烘焙镜像;

步骤s46,发送差异参数至服务器,其中,差异参数用于服务器对烘焙镜像进行更新,并根据更新后的烘焙镜像生成贴图。

具体的,用户通过输入设备向客户端输入场景参数,客户端在检测到场景参数发生变化之后,客户端对烘焙镜像进行更新,并将确定烘焙镜像更新之前和更新之后的差异参数,然后将差异参数发送至服务器。服务器在接收到差异参数之后,对烘焙镜像进行更新,并根据更新后的烘焙镜像生成贴图。此时,客户端显示更新后的烘焙镜像的贴图的预览图像。在用户确定贴图之后,服务器将生成的贴图发送至客户端,客户端对贴图进行像素调和处理,并保存处理后的贴图。

需要说明的是,在游戏对象较大的情况下,客户端将游戏对象分为多个部分,对每个部分生成对应的烘焙对象,并将多个烘焙对象分别发送至不同的服务器,由不同的服务器分别进行烘焙,以生成贴图,从而达到了提高烘焙效率的目的。另外,由于烘焙进程不依赖于游戏引擎,即服务器不依赖于客户端,因此,客户端可对游戏对象进行任意划分。此外,在上述贴图为光照贴图的情况下,客户端可将游戏对象划分为光照环境相互独立的多个部分,进而使得服务器针对每个部分生成光照独立的光照贴图。

在一种可选的实施例中,如图4所示的一种基于客户端的生成贴图的方法流程图,其中,图4以生成烘焙对象的光照贴图为例进行说明。具体的,在游戏引擎启动之后,即在客户端启动之后,客户端加载游戏场景,并根据游戏场景生成游戏对象。在生成游戏对象之后,客户端向服务器发起tcp连接请求,如果客户端与服务器连接失败,则继续判断请求的发送次数是否大于3次。如果发送次数大于3次,则生成连接失败消息;如果发送次数不大于3次,则客户端继续向服务器发起tcp连接请求,直至服务器与客户端连接成功。在服务器与客户端连接成功之后,客户端创建游戏对象的烘焙镜像,并将烘焙镜像通过tcp连接发送给服务器。服务器在对烘焙镜像烘焙的过程中,客户端可对服务器生成的贴图进行预览,并通过服务器与客户端之间的交互接口对游戏场景的参数,例如,游戏对象的位置、缩放程度、光源位置等,进行调整。在客户端对游戏场景的参数进行调节的过程中,在该游戏场景中的烘焙镜像可能也发生了变化,此时,客户端确定烘焙镜像是否发生了变化,如果烘焙镜像发送了变化,则客户端对烘焙镜像进行更新,并将更新后的烘焙镜像发送至服务器,由服务器更新预览图像。如果烘焙镜像未发生变化,则客户端向服务器发起烘焙请求,在服务器对更新后的烘焙镜像烘焙完成之后,服务器将生成的光照贴图发送至客户端,客户端对光照贴图进行像素调和处理,并保存处理后的光照贴图。至此,便完成了生成贴图的过程。

实施例2

根据本发明实施例,还提供了一种游戏场景中生成贴图的方法实施例,其中,图5是根据本发明实施例的游戏场景中生成贴图的方法流程图,如图5所示,该方法包括如下步骤:

步骤s502,接收来自于客户端的游戏场景的场景参数以及游戏对象的烘焙镜像。

需要说明的是,游戏引擎是烘焙系统的客户端,烘焙进程是烘焙系统的服务器,其中,烘焙系统为对游戏场景中的游戏对象进行烘焙的系统。客户端和服务器分别在不同的设备上运行,并且,客户端与服务器进行进程间的通信,其中,进程间的通信方式可以为但不限于管道通信、消息队列通信以及网络套接字通信。

此外,还需要说明的是,游戏对象可以为但不限于游戏场景中的游戏角色、景物(例如:天空、花、草、树木、建筑物等等)等,游戏对象为需要进行烘焙的对象。场景参数可以为但不限于游戏场景的顶点位置、游戏场景的顶点法线、游戏场景的顶点切线、游戏场景的顶点纹理坐标、游戏对象的材质、主相机的空间信息、光源的空间信息等。

具体的,在服务器与客户端之间建立通信连接之后,客户端将游戏场景的场景参数以及游戏对象的烘焙镜像发送给服务器,服务器接收到场景参数以及烘焙镜像,并对烘焙镜像进行烘焙。其中,在客户端将场景参数以及烘焙镜像发送至服务器之后,客户端可执行游戏引擎的其他进程,而无需等待服务器生成贴图之后在运行游戏引擎的其他进程。

步骤s504,根据场景参数还原游戏场景。

需要说明的是,服务器根据场景参数还原的游戏场景为客户端的游戏场景。在对客户端的游戏场景进行还原后,用户可通过服务器的场景预览模块对服务器端的游戏场景进行预览。其中,在生成的贴图为光照贴图的情况下,用户可通过预览游戏场景对游戏对象的光照进行设置。

步骤s506,根据游戏场景对烘焙镜像进行烘焙,生成贴图。

需要说明的是,在客户端完成对游戏场景的场景参数的设置以及生成游戏对象的烘焙镜像之后,服务器在游戏场景下对烘焙镜像进行烘焙,并生成贴图。其中,上述贴图可以为但不限于光照贴图(即lightmap贴图)。在服务器生成贴图之后,服务器将生成的贴图发送至客户端,客户端对接收到的贴图进行处理,将贴图与游戏对象进行结合,得到渲染后的游戏对象。

基于上述步骤s502至步骤s506所限定的步骤,可以获知,通过服务器接收来自于客户端的游戏场景的场景参数以及游戏对象的烘焙镜像,并根据场景参数还原游戏场景,最后根据游戏场景对烘焙镜像进行烘焙,生成贴图。

容易注意到的是,由于游戏对象的烘焙进程与游戏引擎的进程分别在不同的设备中运行,因此,在服务器对游戏对象的烘焙镜像进行烘焙时,客户端仍可执行游戏引擎对应的进程,而无需等待服务器的烘焙结束。另外,由于服务器处理的是游戏对象的烘焙镜像,而并不是游戏对象本身,因此,服务器与客户端可独立运行,互不影响。

由上述内容可知,本申请所提供的游戏场景中生成贴图的方法可以达到烘焙进程与游戏引擎的进程并行运行的目的,从而实现了提高烘焙效率的技术效果,进而解决了现有技术中由于烘焙系统依赖于游戏引擎,导致在对游戏场景进行烘焙时游戏引擎无法正常工作的技术问题。

在一种可选的实施例中,服务器在得到场景参数以及烘焙镜像之后,需要对烘焙镜像进行烘焙,具体步骤如下:

步骤s5060,接收客户端发送的烘焙指令,其中,烘焙指令中携带的信息包括烘焙镜像;

步骤s5062,根据光线追踪算法对烘焙镜像进行烘焙处理。

具体的,服务器在接收到烘焙指令之后,服务器获取烘焙镜像的光照信息,并离线生成一张光照纹理图对烘焙镜像的光照效果进行模拟。在得到光照纹理图之后,服务器对光照纹理图进行采样,并将采样后的光照纹理图与烘焙镜像表面的颜色进行叠加,从而还原游戏对象的物体表面的光照信息。由于光照条件不会发生较大的变化,并且在游戏场景中游戏对象本身不会发生移动,因此,不易产生明显的光照错误。另外,由于光照纹理图是离线生成的,因此,可使用各种渲染技术来增强光照,进而达到对烘焙对象进行烘焙的效果,从而达到比实时渲染效果更好的效果。

在一种可选的实施例中,在服务器接收来自于客户端的场景参数以及烘焙镜像之前,需要建立与客户端之间的连接通信,具体步骤如下:

步骤s60,接收客户端发送的连接请求;

步骤s62,根据连接请求,建立与客户端之间的通信;

步骤s64,向客户端返回确认消息。

具体的,客户端向服务器发送连接请求,服务器在接收到客户端发送的连接请求之后,服务器向客户端返回确认消息。客户端在接收到确认信息之后,在将游戏场景的场景参数以及游戏对象的烘焙镜像发送给服务器,由服务器对烘焙镜像进行烘焙,并生成贴图。

在一种可选的实施例中,如图6所示的一种基于服务器的生成贴图的方法流程图,其中,图6以生成烘焙对象的光照贴图为例进行说明。具体的,在启动烘焙进程之后,服务器加载用户预先设置的参数以及预设贴图、着色器(shader)的着色程序等参数,然后启动tcp监听线程,以监听客户端是否发送连接请求。在接收到客户端发送的连接请求之后,服务器建立起与客户端的连接,并接收客户端发送的烘焙镜像,并还原客户端的游戏场景,生成预览结果。此时,用户可预览服务器生成的贴图,如果用户对生成的贴图不满意,用户可通过客户端对烘焙镜像进行更新。在接收到客户端发送的烘焙指令之后,服务器运行光线追踪算法对更新后的烘焙镜像进行烘焙,得到烘焙场景,并生成光照贴图,最后将光照贴图返回给客户端,由客户端展示烘焙后的游戏对象。

实施例3

根据本发明实施例,还提供了一种游戏场景中生成贴图的系统实施例,其中,图7是根据本发明实施例的游戏场景中生成贴图的系统结构示意图,如图7所示,该系统包括:客户端71和服务器73。

其中,客户端71,用于确定在游戏场景下的游戏对象,并创建游戏对象的烘焙镜像,然后发送烘焙镜像以及游戏场景的场景参数;服务器73,与客户端通信连接,用于获取烘焙镜像以及场景参数,并根据场景参数还原客户端的游戏场景,然后根据游戏场景对烘焙镜像进行烘焙,生成贴图;客户端还用于接收服务器发送的贴图。

需要说明的是,上述客户端71至少包括如下模块:进程间通信管理模块、场景构建模块、场景预览模块、用户操作管理模块、烘焙参数设定模块、烘焙贴图后处理模块等。服务器73至少包括如下模块:进程间通信管理模块、场景构建模块、场景预览模块、烘焙算法执行模块等。

其中,进程间通信管理模块用于管理进程间的通信,服务器的进程间通信管理模块主要用于处理监听端口,接收客户端输入的参数以及返回生成的贴图等;而客户端的进程间通信管理模块主要用于发起连接请求,发送场景参数以及烘焙镜像,并接收客户端返回的贴图。场景构建模块用于对游戏场景进行加载和解析。其中,客户端的场景构建模块用于从序列化文件中读取流数据,并将流数据反序列化为游戏对象,以及创建相关数据的结构;而服务器的场景构建模块用于将接收上述流数据,并将流数据转换为烘焙预览对象,并创建相关数据结构。场景预览模块主要用于向用户展示游戏场景。烘焙算法执行模块主要用于使用各种算法生成贴图,例如生成lightmap贴图。用户操作管理模块主要用于为用户提供可视化交互接口,以供用户输入游戏场景中的游戏对象的相关参数。烘焙参数设定模块用于根据游戏对象的参数生成应用于烘焙的参数,或者,使用图形交互接收直接确定应用于烘焙的参数。烘焙贴图后处理模块主要用于对服务器生成的贴图进行处理,以便于游戏在运行时能够更好的使用贴图。

由上可知,通过客户端确定在游戏场景下的游戏对象,并创建游戏对象的烘焙镜像,然后发送烘焙镜像以及游戏场景的场景参数;服务器获取烘焙镜像以及场景参数,并根据场景参数还原客户端的游戏场景,然后根据游戏场景对烘焙镜像进行烘焙,生成贴图,然后客户端接收服务器发送的贴图。

容易注意到的是,由于游戏对象的烘焙进程与游戏引擎的进程分别在不同的设备中运行,因此,在服务器对游戏对象的烘焙镜像进行烘焙时,客户端仍可执行游戏引擎对应的进程,而无需等待服务器的烘焙结束。另外,由于服务器处理的是游戏对象的烘焙镜像,而并不是游戏对象本身,因此,服务器与客户端可独立运行,互不影响。

由上述内容可知,本申请所提供的游戏场景中生成贴图的方法可以达到烘焙进程与游戏引擎的进程并行运行的目的,从而实现了提高烘焙效率的技术效果,进而解决了现有技术中由于烘焙系统依赖于游戏引擎,导致在对游戏场景进行烘焙时游戏引擎无法正常工作的技术问题。

在一种可选的实施例中,在客户端的数量为多个的情况下,服务器对多个客户端生成的烘焙镜像进行烘焙,并生成与多个客户端对应的贴图。具体的,在游戏对象的模型较大的情况下,客户端将游戏对象分为多个部分,针对每个部分生成对应的烘焙对象,并将多个烘焙对象分别发送至不同的服务器,由不同的服务器分别进行烘焙,以生成贴图,从而达到了提高烘焙效率的目的。另外,由于烘焙进程不依赖于游戏引擎,即服务器在进行烘焙处理时并不依赖于客户端,因此,客户端可对游戏对象进行任意划分。此外,在上述贴图为光照贴图的情况下,客户端可将游戏对象划分为光照环境相互独立的多个部分,进而使得服务器针对每个部分生成光照独立的光照贴图。

需要说明的是,本申请所提供的游戏场景中生成贴图的系统通过进程间通信进行数据传输,将烘焙指令通过通信管道进行传递可以达到如下效果:

(1)烘焙进程与游戏引擎的系统运行在不同的设备上,以使服务器在进行烘焙时并不会妨碍到游戏引擎或者同一设备上其他进程的运行。

(2)游戏引擎可以同时维持多个通信管道,客户端可将需要进行烘焙的游戏对象拆分为多个部分,并委托多个烘焙进程进行烘焙,以加速烘焙过程。

(3)游戏运行时引擎可全力优化实时渲染效率,烘焙进程可全力提高渲染质量,两者独立开发,互不干扰,从而达到渲染效率最大化。

(4)烘焙进程与游戏引擎互相独立,多个游戏引擎可共用一个烘焙进程,从而提高烘焙进程的通用性,节约了开发成本。

实施例4

根据本发明实施例,还提供了一种游戏场景中生成贴图的装置实施例,其中,图8是根据本发明实施例1的游戏场景中生成贴图的装置结构示意图,如图8所示,该装置包括:确定模块801、创建模块803、发送模块805以及接收模块807。

其中,确定模块801,用于确定游戏场景下的游戏对象;创建模块803,用于创建游戏对象的烘焙镜像;发送模块805,用于发送烘焙镜像至服务器;接收模块807,用于接收服务器根据烘焙镜像生成的贴图。

需要说明的是,上述确定模块801、创建模块803、发送模块805以及接收模块807对应于实施例1中的步骤s102至步骤s108,四个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例1所公开的内容。

在一种可选的实施例中,游戏场景中生成贴图的装置还包括:第一发送模块、第一获取模块以及第一生成模块。其中,第一发送模块,用于向服务器发送连接请求;第一获取模块,用于获取连接请求的发送次数;第一生成模块,用于在发送次数大于预设次数的情况下,生成连接失败消息。

需要说明的是,上述第一发送模块、第一获取模块以及第一生成模块对应于实施例1中的步骤s10至步骤s14,三个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例1所公开的内容。

在一种可选的实施例中,游戏场景中生成贴图的装置还包括:第二发送模块、第二获取模块以及第一确定模块。其中,第二发送模块,用于向服务器发送连接请求;第二获取模块,用于获取连接请求的发送次数;第一确定模块,用于在发送次数小于或等于预设次数的情况下,确定执行创建烘焙镜像的步骤。

需要说明的是,上述第二发送模块、第二获取模块以及第一确定模块对应于实施例1中的步骤s20至步骤s24,三个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例1所公开的内容。

在一种可选的实施例中,游戏场景中生成贴图的装置包括:重传模块以及记录模块。其中,重传模块,用于如果在预设时间段内未接收到服务器返回的确定消息,再次向服务器发送连接请求;记录模块,用于对发送次数执行递增操作,得到更新后的发送次数,返回重传模块,直至发送次数大于预设次数。

在一种可选的实施例中,游戏场景中生成贴图的装置还包括:第三获取模块、第一更新模块以及第三发送模块。其中,第三获取模块,用于获取输入的场景参数;第一更新模块,用于根据场景参数更新烘焙镜像;第三发送模块,用于发送更新后的烘焙镜像至服务器,并接收服务器根据更新后的烘焙镜像生成的贴图。

需要说明的是,上述第三获取模块、第一更新模块以及第三发送模块对应于实施例1中的步骤s30至步骤s34,三个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例1所公开的内容。

在一种可选的实施例中,游戏场景中生成贴图的装置还包括:第四获取模块、第二更新模块、第二确定模块以及第四发送模块。其中,第四获取模块,用于获取输入的场景参数;第二更新模块,用于根据场景参数对游戏场景进行更新;第二确定模块,用于确定第一烘焙镜像的参数与第二烘焙镜像的参数的差异参数,其中,第一烘焙镜像为更新前的烘焙镜像,第二烘焙镜像为更新后的烘焙镜像;第四发送模块,用于发送差异参数至服务器,其中,差异参数用于服务器对烘焙镜像进行更新,并根据更新后的烘焙镜像生成贴图。

需要说明的是,上述第四获取模块、第二更新模块、第二确定模块以及第四发送模块对应于实施例1中的步骤s40至步骤s46,四个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例1所公开的内容。

实施例5

根据本发明实施例,还提供了一种游戏场景中生成贴图的装置实施例,其中,图9是根据本发明实施例2的游戏场景中生成贴图的装置结构示意图,如图9所示,该装置包括:获取模块901、还原模块903以及生成模块905。

其中,获取模块901,用于接收来自于客户端的游戏场景的场景参数以及游戏对象的烘焙镜像;还原模块903,用于根据场景参数还原游戏场景;生成模块905,用于根据游戏场景对烘焙镜像进行烘焙,生成贴图。

需要说明的是,上述第获取模块901、还原模块903以及生成模块905对应于实施例2中的步骤s502至步骤s506,三个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例2所公开的内容。

在一种可选的实施例中,游戏场景中生成贴图的装置还包括:发送模块。其中,发送模块,用于发送贴图至客户端。

在一种可选的实施例中,生成模块包括:第一接收模块以及烘焙模块。其中,第一接收模块,用于接收客户端发送的烘焙指令,其中,烘焙指令中携带的信息包括烘焙镜像;烘焙模块,用于根据光线追踪算法对烘焙镜像进行烘焙处理。

需要说明的是,上述第一接收模块以及烘焙模块对应于实施例2中的步骤s5060至步骤s5062,两个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例2所公开的内容。

在一种可选的实施例中,游戏场景中生成贴图的装置还包括:第二接收模块、通信模块以及返回模块。其中,第二接收模块,用于接收客户端发送的连接请求;通信模块,用于根据连接请求,建立与客户端之间的通信;返回模块,用于向客户端返回确认消息。

需要说明的是,上述第二接收模块、通信模块以及返回模块对应于实施例2中的步骤s60至步骤s64,三个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例2所公开的内容。

实施例6

根据本发明实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,其中,程序执行实施例1和2中的游戏场景中生成贴图的方法。

实施例7

根据本发明实施例的另一方面,还提供了一种处理器,该处理器用于运行程序,其中,程序运行时执行实施例1和2中的游戏场景中生成贴图的方法。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1