模型处理方法和装置、电子设备和存储介质
文献发布时间:2023-06-19 10:29:05
技术领域
本申请涉及数据处理领域,尤其涉及一种模型处理方法和装置、电子设备和存储介质。
背景技术
在3D(Three Dimensions,三维)游戏开发的过程中,需要对游戏性能进行优化,而性能优化的一个重要过程是对模型的渲染优化。模型的渲染优化涉及到以下几个方面:模型贴图的内存占用;模型的顶点、三角形面数优化;每一帧中,同屏幕模型渲染的提交次数;每一帧中,模型本身的渲染效率。
目前,3D游戏场景中可以采用LOD(Levels of Detail,多细节层次)模型。在进行不同的LOD切换时,需要保证画面渲染效果不发生大的改变。然而,相关技术中的模型处理方式,如果某些模型的贴图精度不够,则切换时模型的色差会很大,画面渲染效果会发生较大的改变,使得用户获取的视觉信息跳度过大,从而降低用户的视觉体验。
因此,相关技术中的模型处理方式,存在由于切换前后模型的精度差别过大导致的用户视觉体验差的问题。
发明内容
本申请提供了一种模型处理方法和装置、电子设备和存储介质,以至少解决相关技术中的模型切换方式存在由于切换前后模型的精度差别过大导致的用户视觉体验差的问题。
根据本申请实施例的一个方面,提供了一种模型处理方法,包括:在目标客户端上显示目标关卡的多个第一场景模型,其中,所述多个第一场景模型中的每个第一场景模型为一个场景物体的LOD模型;加载所述目标关卡待切换到的目标流关卡,其中,所述目标流关卡中包含多个第二场景模型,所述多个第二场景模型中的每个第二场景模型为所述多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型;控制所述目标客户端上显示的关卡切换到所述目标流关卡,其中,所述目标流关卡上显示有所述多个第二场景模型。
可选地,在所述在目标客户端上显示目标关卡的多个第一场景模型之前,所述方法还包括:在目标虚拟角色首次进入到所述目标关卡所属的目标事件场景的情况下,加载所述目标事件场景中位于目标可视范围内的多个关卡,其中,所述目标虚拟角色为通过所述目标客户端所控制的虚拟角色,所述目标可视范围为与所述目标虚拟角色对应的目标摄像机的可视范围;在与所述目标客户端上显示记载的所述多个关卡。
可选地,在所述加载所述目标关卡待切换到的目标流关卡之前,所述方法还包括:在检测到所述目标关卡与目标虚拟角色之间的距离由小于目标距离阈值转换为大于或者等于所述目标距离阈值的情况下,确定将所述目标关卡切换到所述目标流关卡,其中,所述目标虚拟角色为通过所述目标客户端所控制的虚拟角色。
可选地,在所述控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,所述方法还包括:在所述目标流关卡中的全部场景模型均已显示的情况下,卸载所述目标关卡中的全部场景模型。
可选地,在所述控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,所述方法还包括:在所述多个第二场景模型包含由多个第三场景模型烘焙得到的实例化模型的情况下,按照一个批次提交所述实例化模型,将所述实例化模型渲染到所述目标流关卡上进行显示,其中,按照一个批次提交的顶点数为一个所述第三场景模型的顶点数,所述多个第三场景模型为以下至少之一:草地,树林,所述多个第三场景模型的密度小于所述目标关卡中与所述多个第三场景模型匹配的多个匹配场景模型的密度。
可选地,在控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,该方法还包括:在多个第二场景模型包含由多个第四场景模型通过合并模型顶点、模型贴图和模型材质进行烘焙得到的第一目标场景模型的情况下,使用所述第一目标场景模型的模型顶点、模型贴图和模型材质,将所述第一目标场景模型渲染到所述目标流关卡上进行显示。
可选地,在所述控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,所述方法还包括:获取所述多个第二场景模型中的第二目标场景模型的目标颜色贴图,其中,所述目标颜色贴图的目标颜色通道中写入有目标材质属性;使用所述目标颜色贴图,将所述第二目标场景模型渲染到所述目标流关卡上进行显示。
可选地,在所述控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,所述方法还包括:获取所述多个第二场景模型中的第三目标场景模型的透明遮罩贴图;使用所述透明遮罩贴图,将所述第三目标场景模型渲染到所述目标流关卡上进行显示。
可选地,在所述控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,所述方法还包括:按照目标频率为所述目标流关卡生成地块阴影贴图,其中,所述地块阴影贴图的分辨率小于目标分辨率阈值;使用所述地块阴影贴图为所述目标流关卡渲染地块阴影,其中,所述地块阴影包含以下至少之一的场景物件的阴影:地形,模型,建筑。
根据本申请实施例的另一个方面,提供了一种模型处理装置,包括:第一显示单元,用于在目标客户端上显示目标关卡的多个第一场景模型,其中,所述多个第一场景模型中的每个第一场景模型为一个场景物体的LOD模型;第一加载单元,用于加载所述目标关卡待切换到的目标流关卡,其中,所述目标流关卡中包含多个第二场景模型,所述多个第二场景模型中的每个第二场景模型为所述多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型;控制单元,用于控制所述目标客户端上显示的关卡切换到所述目标流关卡,其中,所述目标流关卡上显示有所述多个第二场景模型。
可选地,所述装置还包括:第二加载单元,用于在所述在目标客户端上显示目标关卡的多个第一场景模型之前,在目标虚拟角色首次进入到所述目标关卡所属的目标事件场景的情况下,加载所述目标事件场景中位于目标可视范围内的多个关卡,其中,所述目标虚拟角色为通过所述目标客户端所控制的虚拟角色,所述目标可视范围为与所述目标虚拟角色对应的目标摄像机的可视范围;第二显示单元,用于在与所述目标客户端上显示记载的所述多个关卡。
可选地,所述装置还包括:确定单元,用于在所述加载所述目标关卡待切换到的目标流关卡之前,在检测到所述目标关卡与目标虚拟角色之间的距离由小于目标距离阈值转换为大于或者等于所述目标距离阈值的情况下,确定将所述目标关卡切换到所述目标流关卡,其中,所述目标虚拟角色为通过所述目标客户端所控制的虚拟角色。
可选地,所述装置还包括:卸载单元,用于在所述控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,在所述目标流关卡中的全部场景模型均已显示的情况下,卸载所述目标关卡中的全部场景模型。
可选地,所述装置还包括:第一渲染单元,用于在所述控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,在所述多个第二场景模型包含由多个第三场景模型烘焙得到的实例化模型的情况下,按照一个批次提交所述实例化模型,将所述实例化模型渲染到所述目标流关卡上进行显示,其中,按照一个批次提交的顶点数为一个所述第三场景模型的顶点数,所述多个第三场景模型为以下至少之一:草地,树林,所述多个第三场景模型的密度小于所述目标关卡中与所述多个第三场景模型匹配的多个匹配场景模型的密度。
可选地,所述装置还包括:第二渲染单元,用于在所述控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,在所述多个第二场景模型包含由多个第四场景模型通过合并模型顶点、模型贴图和模型材质进行烘焙得到的第一目标场景模型的情况下,使用所述第一目标场景模型的模型顶点、模型贴图和模型材质,将所述第一目标场景模型渲染到所述目标流关卡上进行显示。
可选地,所述装置还包括:第一获取单元,用于在所述控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,获取所述多个第二场景模型中的第二目标场景模型的目标颜色贴图,其中,所述目标颜色贴图的目标颜色通道中写入有目标材质属性;第三渲染单元,用于使用所述目标颜色贴图,将所述第二目标场景模型渲染到所述目标流关卡上进行显示。
可选地,所述装置还包括:第二获取单元,用于在所述控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,获取所述多个第二场景模型中的第三目标场景模型的透明遮罩贴图;第四渲染单元,用于使用所述透明遮罩贴图,将所述第三目标场景模型渲染到所述目标流关卡上进行显示。
可选地,所述装置还包括:生成单元,用于在所述控制所述目标客户端上显示的关卡切换到所述目标流关卡之后,按照目标频率为所述目标流关卡生成地块阴影贴图,其中,所述地块阴影贴图的分辨率小于目标分辨率阈值;第五渲染单元,用于使用所述地块阴影贴图为所述目标流关卡渲染地块阴影,其中,所述地块阴影包含以下至少之一的场景物件的阴影:地形,模型,建筑。
根据本申请实施例的又一个方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;其中,存储器,用于存储计算机程序;处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行上述任一实施例中的方法步骤。
根据本申请实施例的又一个方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一实施例中的方法步骤。
在本申请实施例中,采用将场景模型划分成不同的部分分别进行模型合并的方式,通过在目标客户端上显示目标关卡的多个第一场景模型,其中,多个第一场景模型中的每个第一场景模型为一个场景物体的LOD模型;加载目标关卡待切换到的目标流关卡,其中,目标流关卡中包含多个第二场景模型,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型;控制目标客户端上显示的关卡切换到目标流关卡,其中,目标流关卡上显示有多个第二场景模型,由于将场景模型划分成不同的部分分别进行模型合并,从而可以采用多种烘焙方式对模型进行烘焙,从而可以达到提高某些模型的精度(例如,使用烘焙效果比较好的方式进行烘焙)的目的,并且,由于将多个模型合并成一个模型,可以减少模型渲染的提交次数,在尽量保证模型精度的情况下,节省CPU(Central Processing Unit,中央处理器)和GPU(Graphics ProcessingUnit,图形处理器)的开销,达到减少模型切换前后渲染画面的差异、提高用户视觉体验的技术效果,进而解决了相关技术中的模型切换方式存在由于切换前后模型的精度差别过大导致的用户视觉体验差的问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是根据本申请实施例的一种可选的模型处理方法的硬件环境的示意图;
图2是根据本申请实施例的一种可选的模型处理方法的流程示意图;
图3是根据本申请实施例的一种可选的游戏显示界面的示意图;
图4是根据本申请实施例的一种可选的烘焙界面的示意图;
图5是根据本申请实施例的另一种可选的模型处理方法的流程示意图;
图6是根据本申请实施例的又一种可选的模型处理方法的流程示意图;
图7是根据本申请实施例的一种可选的帧率和性能对比的示意图;
图8是根据本申请实施例的一种可选的模型处理装置的结构框图;
图9是根据本申请实施例的另一种可选的模型处理装置的结构框图;
图10是根据本申请实施例的一种可选的电子设备的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本申请实施例的一个方面,提供了一种模型切换方法。可选地,在本实施例中,上述模型切换方法可以应用于如图1所示的由终端102和服务器104所构成的硬件环境中。如图1所示,服务器104通过网络与终端102进行连接,可用于为终端或终端上安装的客户端(例如,游戏客户端)提供服务(如游戏服务、应用服务等),可在服务器上或独立于服务器设置数据库,用于为服务器104提供数据存储服务。
上述网络包括但不限于:有线网络,无线网络,上述有线网络可以包括但不限于:广域网、城域网或局域网。终端102并不限定于PC(Personal Computer,个人计算机)、手机、平板电脑等。
本申请实施例的模型切换方法可以由终端102来执行,也可以由服务器104来执行,还可以是由终端102和服务器104共同执行。其中,终端102执行本申请实施例的模型切换方法也可以是由安装在其上的客户端(例如,目标游戏的客户端)来执行。
以由终端102来执行本实施例中的模型切换方法为例,图2是根据本申请实施例的一种可选的模型处理方法的流程示意图,如图2所示,该方法的流程可以包括以下步骤:
步骤S202,在目标客户端上显示目标关卡的多个第一场景模型,多个第一场景模型中的每个第一场景模型为一个场景物体的LOD模型。
本实施例中的模型切换方法可以应用于由多个关卡拼接而成的事件场景,例如,游戏场景,该游戏场景可以是目标游戏的游戏场景(例如,三维游戏场景)。本实施例中的目标事件场景以目标游戏的目标游戏场景为例进行说明,对于其他包含多个关卡的事件场景,本实施例中的模型处理方法同样适用。
目标游戏可以是单人游戏,也可以是多人游戏(例如,开放式大世界游戏);可以是对战游戏,也可以是非对战游戏(例如,经营类游戏);可以是端游,也可以是手游,本实施例中对于目标游戏的游戏类型不作限定。
例如,目标游戏可以是MMORPG(Massive或Massively Multiplayer Online Role-Playing Game,大型多人在线角色扮演游戏),或者,AR(Augmented Reality,增强现实)游戏,或者,VR(Virtual Reality,虚拟现实)游戏,或者其他类型的游戏。
目标用户(目标玩家)的终端设备上可以运行有目标游戏应用的目标客户端。该目标客户端可以与服务器进行通信连接,上述服务器为目标游戏的后台服务器。目标用户可以使用帐号和密码、动态密码、关联应用(第三方应用)登录等方式登录到其终端设备上运行的目标客户端,并通过操作目标客户端进入到目标游戏场景(目标游戏地图,例如,大世界)。
以大世界为例,一个大世界是由许多关卡拼接而成,不同的关卡上面有高低起伏的山脉,河流,建筑物,一个关卡的尺寸可以根据需要进行配置,例如,可以是128×128米的正方形(地块),一个正方形挨着另一个,一个大世界可以由许许多多这样的正方形拼接而成。
在目标游戏场景中,目标用户通过目标客户端所控制的虚拟角色为目标虚拟角色。目标游戏场景中可以包含有多个关卡,目标客户端上当前显示的关卡中可以包括目标关卡。对于目标关卡,在目标虚拟角色与目标关卡的距离较近时,可以在目标关卡上显示多个第一场景模型,每个第一场景模型对应于目标关卡中的第一个场景物体,是该物体的LOD模型(例如,多级LOD模型)。
LOD是指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
需要说明的是,目标关卡与目标虚拟角色的距离可以是:关卡与人物(例如,目标虚拟角色)之间的距离不是关卡内某一物体和人物之间的距离,而是关卡的地块中心点与人物之间的距离。
每个第一场景模型所对应的场景物件可以是不同的,不同的第一场景模型对应于场景物件的类型可以是相同的,也可以是不同的。场景物件可以包括但不限于以下至少之一:建筑,树木,草地。
例如,目标关卡中包含3个物件,当前显示的目标关卡上可以显示每个物件的LOD模型。
按照模型面数和细节数,同一物件的不同级LOD模型可以对应于不同的精度,面数和细节数越多,精度越高。根据物体模型的节点在场景所处的位置和重要度,目标客户端可以决定物体渲染的资源分配,也就是,渲染哪一级的LOD模型。
步骤S204,加载目标关卡待切换到的目标流关卡,目标流关卡中包含多个第二场景模型,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型。
由于每个模型都有自己的多级LOD,如果在场景中的场景模型采用多级LOD模型,当场景模型数量过多时,每个模型都有自己的不同LOD的简模和应对的贴图材质,需要单独渲染(渲染一个模型叫一个批次,如果场景中有1000个不同的模型,那么,就需要渲染1000个批次,都要按着一定的顺序依次单独渲染),无法保证效率,也无法减少内存占用。
在目标关卡距离目标人物(目标虚拟角色)较远时(例如,超过设定的距离阈值),其上的景色没有必要使用高精度的模型,为了保证渲染效率,减少内容占用,可以将其替换为低精度模型,而不会太影响整体效果。
在本实施例中,目标游戏场景中的各个关卡(具有目标尺寸的地块)可以采用流式加载的方案进行加载,从而可以实现高精度模型向低精度模型切换。对于各个关卡,可以为其预先烘焙好一个或多个流关卡,即,StreamingLevelLOD(LOD流送关卡)。LOD流送关卡(流关卡)类似于网格体LOD,可以根据流送距离设置,关卡可以替换为相应的流关卡。
流关卡(Streaming Level)是指:在游戏时异步加载和卸载关卡,可以降低内存使用率,创建无缝的世界场景。StreamingLevelLOD是指:流式加载LOD方案,通过预烘焙整个地图的模型合并模型材质贴图,并且加载好新的模型后会卸载原有模型。
然而,由于是以关卡为单位进行预烘焙,预烘焙的是整个关卡的模型,烘焙出的贴图精度不够,对某些精度要求高的模型(例如,标志性的建筑物,树木等)色差会很大。
可选地,在本实施例中,在流关卡烘焙时,可以将关卡中的场景模型划分成多个不同的部分,不同部分的场景模型可以场景不同的方式进行模型合并,分别烘焙成一个场景模型。对于一些精度需求较高的物体,可以通过对其进行特别烘焙来提高这些物体模型的精度。比如,场景中有几个建筑,有的建筑比较明显,属于地标建筑,可以使用烘焙效果比较好的方式进行烘焙。对于一些精度需求较低的物体,可以使用烘焙效果一般的方式进行烘焙。对于大量相同物体,可以采用Instance(实例化)的方式进行烘焙。
在烘焙各个场景模型之后,烘焙好的模型可以组成流光卡,或者,结合其他信息组成流关卡。烘焙好的流关卡可以保存在服务器中或者其他存储设备中,从而在游戏运行时可以被加载到运行目标游戏的客户端(例如,目标客户端)中。
需要说明的是,烘焙模型只是烘焙模型本身,并不记录模型的光影信息,光照是在渲染时通过材质实时计算的。对于模型烘焙,储存模型的网格数据是一方面,还可以包括:存储贴图数据,例如,有的模型渲染需要多张基础颜色贴图混合,那么可以直接计算出混合后的贴图。示例性地,对模型烘焙可以包括:获取模型的网格信息、材质和贴图等。
需要说明的是,流关卡的烘焙过程需要大量计算,为了提高游戏运行的流畅性,可以通过服务器预先进行场景或者流关卡烘焙。相对于目标游戏的运行过程而言,场景的烘焙过程可以作为离线准备过程,而不是在目标游戏运行时执行的。
对于目标流关卡,在目标虚拟角色与目标关卡的距离较远时,或者在其他关卡切换条件满足时,目标客户端可以确定将目标关卡切换到目标流关卡。目标客户端可以与服务器进行交互,从而加载目标流关卡,或者,直接加载本地保存的目标流关卡。
目标流关卡中可以包含多个第二场景模型。多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型。按照对应的场景物件不同和场景物件的重要程度,可以采用相同或者不同的烘焙方式对多个第一场景模型中的各个部分场景模型进行烘焙,得到各第二场景模型。
例如,目标关卡上显示的场景物体的数量为10个。在目标流关卡烘焙时,可以将4个场景物件进行模型合并,将其烘焙成目标流关卡中的一个场景模型,将3个场景物件进行模型合并,将其烘焙成目标流关卡中的一个场景模型,将剩余的3个场景物件进行模型合并,将其烘焙成目标流关卡中的一个场景模型。烘焙完成之后,得到的场景模型的数量为3个。
步骤S206,控制目标客户端上显示的关卡切换到目标流关卡,其中,目标流关卡上显示有多个第二场景模型。
对于加载的目标流关卡,目标客户端可以将其渲染到目标关卡上进行显示,也就是,控制目标客户端上显示的关卡切换到目标流关卡,目标流关卡上显示有多个第二场景模型。目标客户端可以采用从近到远的方式进行渲染,也可以采用其他方式进行渲染,渲染的方式由引擎本身渲染管线决定,本实施例中对此不作限定。
可选地,在本实施例中,游戏中的光需要是实时的而不是静态的,因此无法为模型烘焙光影。在渲染目标流关卡中的模型时,目标客户端可以使用颜色贴图、法线贴图、粗糙度金属度贴图等计算光照,从而使用得到光照渲染光影。
通过上述步骤S202至步骤S206,在目标客户端上显示目标关卡的多个第一场景模型,其中,多个第一场景模型中的每个第一场景模型为一个场景物体的LOD模型;加载目标关卡待切换到的目标流关卡,其中,目标流关卡中包含多个第二场景模型,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型;控制目标客户端上显示的关卡切换到目标流关卡,其中,目标流关卡上显示有多个第二场景模型,解决了相关技术中的模型切换方式存在由于切换前后模型的精度差别过大导致的用户视觉体验差的问题,减少了模型切换前后渲染画面的差异,提高了用户的视觉体验。
作为一种可选的实施例,在在目标客户端上显示目标关卡的多个第一场景模型之前,上述方法还包括:
S11,在目标虚拟角色首次进入到目标关卡所属的目标事件场景的情况下,加载目标事件场景中位于目标可视范围内的多个关卡,其中,目标虚拟角色为通过目标客户端所控制的虚拟角色,目标可视范围为与目标虚拟角色对应的目标摄像机的可视范围;
S12,在与目标客户端上显示记载的多个关卡。
为了提高场景的加载效率,在虚拟对象第一次进入目标游戏场景时,可以根据摄像机(与目标虚拟对象对应)的朝向计算当前摄像机能看到的范围(扇形范围),优先加载这个范围内的地块,达到更快进入到目标游戏的目的。
例如,目标客户端可以首先读取配置的人物视距,比如500米,那么人物的可视范围为一个半径500米、180度的扇形。通过遍历场景中的地块包围盒信息,计算每个地块的包围盒是否在这个扇形以内。
可选地,在本实施例中,在目标虚拟角色首次进入到目标游戏场景时,目标客户端可以加载目标事件场景中位于目标可视范围内的多个关卡,目标虚拟角色为通过目标客户端所控制的虚拟角色,该目标可视范围为与目标虚拟角色对应的目标摄像机的可视范围。目标客户端可以按照多个关卡中的各个关卡和目标虚拟角色的距离,确定各个关卡需要加载的流关卡。
在位于目标可视范围内的多个关卡加载完成之后,目标客户端上可以显示加载的多个关卡。
通过本实施例,通过摄像机的方向优先加载视野内的关卡,可以加快进入事件场景的速度,解决场景(地图)加载过慢的问题。
作为一种可选的实施例,在加载目标关卡待切换到的目标流关卡之前,上述方法还包括:
S21,在检测到目标关卡与目标虚拟角色之间的距离由小于目标距离阈值转换为大于或者等于目标距离阈值的情况下,确定将目标关卡切换到目标流关卡,目标虚拟角色为通过目标客户端所控制的虚拟角色。
如果目标关卡与目标虚拟角色(目标人物)之间的距离超过目标距离阈值,可以认为目标关卡中的场景模型没有必要使用高精度的模型,从而触发执行关卡切换。
目标客户端可以检测目标关卡与目标虚拟角色之间的距离,并在检测到目标关卡与目标虚拟角色之间的距离由小于目标距离阈值转换为大于或者等于目标距离阈值的情况下,确定需要执行关卡切换,将目标关卡切换到目标流关卡。上述检测操作可以是实时执行的,也可以是周期执行的,本实施例中对此不作限定。
需要说明的是,如果目标关卡与目标虚拟角色之间的距离由大于或者等于目标距离阈值转换为小于目标距离阈值,目标客户端可以将目标流关卡重新切换到目标关卡,切换的过程是上述过程的逆过程,本实施例中对此不作赘述。
还需要说明的是,如果目标关卡与目标虚拟角色之间的距离进一步增大,可以再次进行流关卡切换,由目标流关卡切换到另一个流关卡,该流关卡上的场景模型的模型精度可以低于目标流关卡上的场景模型的模型精度。
通过本实施例,按照关卡与人物的距离控制进行流关卡的切换,可以提高流关卡切换的灵活性。
作为一种可选的实施例,在控制目标客户端上显示的关卡切换到目标流关卡之后,上述方法还包括:
S31,在目标流关卡中的全部场景模型均已显示的情况下,卸载目标关卡中的全部场景模型。
在一些游戏引擎中可以部署有HLOD(Hierarchical LOD,分层细节级别)系统或者类似的系统,上述游戏引擎可以是UE4。HLOD系统通过合并模型、材质、贴图来减少新模型的内存,并且提升渲染效率。HLOD系统统可以使用单个经过合并的静态网格体Actor(静态网格物体是虚拟引擎中一种基本类型的可渲染几何体)替换远距离上的多个静态网格体Actor。通过上述方式,可以减少场景中需要渲染的Actor数量,从而通过降低每帧的绘制调用数量来提升性能。
如果仅采用HLOD系统,由于模型的不同LOD本质上还是一个模型(比如,一个模型有3级LOD,这个模型里就有3组顶点,在运行时通过判断从3组顶点中取一组使用),因此,无法通过流式加载卸载原有的模型减少内存。
在本实施例中,由于采用流式加载LOD的方式,可以通过流式加载新模型、卸载原有模型来减少模型对内存的占用。
当切换流关卡时,在异步加载好LOD关卡(目标流关卡)之后,目标客户端可以卸载目标流关卡之前在目标关卡上显示的全部场景模型。
可选地,在加载好目标流关卡之后,目标客户端可以先不卸载当前显示的关卡,而是通过渐变抖动(LOD Dither)的方式进行过渡,渐变抖动是指:同时渲染两个模型,一个渲染的像素越来越多,另一个渲染的像素越来越少来达到切换的过渡。
当过渡时间结束,FadeIn的关卡物体(例如,目标流关卡上的场景物体)全部显示出来以后,将FadeOut的关卡物体(例如,目标关卡上的场景)全部卸载掉。
通过本实施例,在加载好新的模型之后卸载原有模型,可以减少模型对内存的占用。
作为一种可选的实施例,在控制目标客户端上显示的关卡切换到目标流关卡之后,上述方法还包括:
S41,在多个第二场景模型包含由多个第三场景模型烘焙得到的实例化模型的情况下,按照一个批次提交实例化模型,将实例化模型渲染到目标流关卡上进行显示,其中,按照一个批次提交的顶点数为一个第三场景模型的顶点数,多个第三场景模型为以下至少之一:草地,树林,多个第三场景模型的密度小于目标关卡中与多个第三场景模型匹配的多个匹配场景模型的密度。
多个第二场景模型可以包含由多个第三场景模型烘焙得到的实例化模型,多个第三场景模型为以下至少之一:草地,树林。例如,目标关卡上的草地、树林等可以通过Instance(实例化)的方式烘焙到目标流关卡中。
Instance的方式是通过一个批次渲染大量的相同物体。如果只是把相同物体烘焙成一个模型,假如一个模型有100个顶点,一个instance(实例)里包含10个模型,那么烘焙后的模型就有1000个顶点。如果烘焙成instance,那么同样还是提交一个批次,但是只需要提交100个而不是1000个顶点的数据。
在渲染上述实例化模型时,目标客户端可以按照一个批次提交实例化模型,提交的顶点数为一个第三场景模型的顶点数,此外,还可以提交不同的第三场景模型的位置、状态、颜色等,从而在目标流关卡上显示实例化模型,可以减少CPU的提交次数。
可选地,在本实施例中,如果是由于与目标虚拟角色之间的距离增加导致的切换到目标流关卡,那么,可以通过调整烘焙后的特定物体的密度的方式来提高渲染效率。上述特定物体可以是草地、树林中的至少之一。
对于通过采Instance的方式所烘焙出的实例化模型(即,草地和/或树林),其对应的多个第三场景模型的密度小于目标关卡中与多个第三场景模型匹配的多个匹配场景模型的密度。
例如,每一种树、每一种草都可以调整烘焙后的密度。对于其他类型的物体模型,只要具备类似的物体特征,例如,形态重复、位置集中等,也可以采用类似的方式进行烘焙。
通过本实施例,将多个模型按照一个批次提交渲染,可以减少CPU的提交次数;通过降低草地、树木等的密度,可以提高渲染效率。
作为一种可选的实施例,在控制目标客户端上显示的关卡切换到目标流关卡之后,上述方法还包括:
S51,在多个第二场景模型包含由多个第四场景模型通过合并模型顶点、模型贴图和模型材质进行烘焙得到的第一目标场景模型的情况下,使用第一目标场景模型的模型顶点、模型贴图和模型材质,将第一目标场景模型渲染到目标流关卡上进行显示。
多个第二场景模型可以包含由多个第四场景模型通过合并模型顶点、模型贴图和模型材质进行烘焙得到的第一目标场景模型,即,第一目标场景模型是多个第四场景模型使用HLOD的方式或者类似方式进行烘焙得到的。
在烘焙多个第四场景模型时,服务器可以合并多个第四场景模型的模型资源,将多个第四场景模型烘焙到一个新物体,烘焙到的新物体为第一目标场景模型。模型资源是用于进行模型烘焙的资源,使用模型资源,可以烘焙出一个新物体。
第一目标场景模型可以认为是一个新物体,其具有对应的模型顶点、模型贴图和模型材质。可以使用第一目标场景模型的模型顶点、模型贴图和模型材质,将第一目标场景模型渲染到目标流关卡上进行显示。
例如,相关人员通过编辑器将模型1和模型2烘焙成了HLOD模型,即,模型3(烘焙好的模型),那么,就得到了一个新的资源。当关卡切换时,可以直接加载HLOD模型,并在渲染时可以直接使用,而不再依赖原有的模型。通过合并多个模型,可以提升渲染效果,同时,采用流关卡的方式,可以节约内存。
通过本实施例,通过HLOD的方式进行多个场景模型的烘焙,可以提高这些模型的模型精度,减少模型色差,提升用户的视觉体验。
作为一种可选的实施例,在控制目标客户端上显示的关卡切换到目标流关卡之后,上述方法还包括:
S61,获取多个第二场景模型中的第二目标场景模型的目标颜色贴图,其中,目标颜色贴图的目标颜色通道中写入有目标材质属性;
S62,使用目标颜色贴图,将第二目标场景模型渲染到目标流关卡上进行显示。
在进行模型烘焙时,可以通过合并贴图通道来增加GPU采样效率。一张颜色贴图有R(Red,红)G(Green,绿)B(Blue,蓝)A(Alpha,色彩)四个通道,在选择烘焙时,如果选择烘焙金属度、高光、粗糙度、透明度中的至少一个,可以把选择的属性写到RGBA四个通道中的至少一个通道里,合并成一张贴图。
对于多个第二场景模型中的第二目标场景模型,该第二目标场景模型可以具有采用此烘焙方式所得到的目标颜色贴图,目标颜色贴图的目标颜色通道中写入有目标材质属性。可续地,目标颜色通道为以下至少之一:R通道,G通道,B通道,A通道,目标材质属性包括以下至少之一:金属度,高光,粗糙度,透明度。
在获取到目标颜色贴图之后,目标客户端可以使用该目标颜色贴图将第二目标场景模型渲染到目标流关卡上进行显示,前述已经进行过描述的,在此不做赘述。
多张贴图进行采样时需要采样多次,通过本实施例,通过合并贴图到颜色通道,可以减少采样次数,对一张贴图采样可以获得多个数据,从而提高运行效率。
需要说明的是,除了目标颜色贴图以外,渲染第二目标场景模型还可以使用到其他贴图,例如,法线贴图等等,本实施例中对于渲染第二目标场景模型所使用的贴图不作限定。
作为一种可选的实施例,在控制目标客户端上显示的关卡切换到目标流关卡之后,上述方法还包括:
S71,获取多个第二场景模型中的第三目标场景模型的透明遮罩贴图;
S72,使用透明遮罩贴图,将第三目标场景模型渲染到目标流关卡上进行显示。
如果多个第二场景模型中的第三目标场景模型具有透明遮罩贴图,目标客户端可以获取第三目标场景模型的透明遮罩贴图,并使用透明遮罩贴图将第三目标场景模型渲染到目标流关卡上进行显示。
通过本实施例,通过使用透明遮罩贴图对模型进行渲染,可以保证能够渲染Mask类型的遮罩物体,提高遮罩物体渲染后的显示效果。
需要说明的是,除了透明遮罩贴图以外,渲染第三目标场景模型还可以使用到其他贴图,例如,颜色贴图,法线贴图等等,本实施例中对于渲染第三目标场景模型所使用的贴图不作限定。
作为一种可选的实施例,在控制目标客户端上显示的关卡切换到目标流关卡之后,上述方法还包括:
S81,按照目标频率为目标流关卡生成地块阴影贴图,其中,地块阴影贴图的分辨率小于目标分辨率阈值;
S82,使用地块阴影贴图为目标流关卡渲染地块阴影,其中,地块阴影包含以下至少之一的场景物件的阴影:地形,模型,建筑。
为了保证关卡显示的拟真程度,可以为关卡生成地块阴影贴图。例如,可以采用CSM(Cascaded Shadow Maps,级联阴影贴图)算法为目标流关卡生成实时阴影。随着用户的视距拉远,使用上述阴影生成方式会让生成实时阴影的性能开销成倍增加。
可选地,在本实施例中,可以为每个在视野中的远处LOD地块(流关卡中的地块)生成一块阴影贴图来渲染阴影,该阴影贴图的分辨率相对于正常的阴影渲染所需要生成的阴影贴图的分辨率更小。同时,还可以降低该地块的阴影更新频率来增加CPU性能。阴影更新频率可以是目标更新频率小于图像帧的渲染频率。
对于目标流关卡,目标客户端可以按照目标频率为目标流关卡生成地块阴影贴图,该地块阴影贴图的分辨率小于目标分辨率阈值,目标分辨率阈值可以是一个相对值,例如,按照CSM算法为目标流关卡所生成的实时阴影贴图的分辨率,也可以是一个固定值,即,一个固定的分辨率阈值,本实施例中对此不作限定。
在得到地块阴影贴图之后,目标客户端可以使用地块阴影贴图为目标流关卡渲染地块阴影,地块阴影包含以下至少之一的场景物件的阴影:地形,模型,建筑。
地块阴影是给每个烘焙出来的Level单独做的阴影,而不是全局阴影。地块上的地形、模型和建筑等都会计算阴影。由于距离场景人物过远,所以该阴影不需要每帧都更新,通过上述方式,远处的地块也有了阴影,并且降低了消耗。
通过本实施例,通过为关卡生成一块分辨率更小的阴影贴图,并降低该地块阴影更新频率,可以提高地块阴影的渲染效率,同时降低了渲染地块阴影的资源消耗。
需要说明的是,本实施例中以客户端执行上述模型处理方法为例进行说明,对于服务器和客户端共同执行的方式,本实施例中的模型处理方法同样适用。
根据本申请实施例的另一个方面,还提供了一种模型处理方法。可选地,在本实施例中,上述模型处理方法可以应用于如图1所示的由终端102和服务器104所构成的硬件环境中,已经进行过描述的,在此不做赘述。
本实施例中的模型处理方法可以由服务器104来执行,也可以由终端102来执行,还可以是由服务器104和终端102共同执行。执行本实施例中的模型处理方法的服务器与执行前述实施例中的模型处理方法的服务器可以是相同的服务器,也可以是不同的服务器。本实施例中对此不作限定。
以由服务器104来执行本实施例中的模型处理方法为例,图3是根据本申请实施例的另一种可选的模型处理方法的流程示意图,如图3所示,该方法的流程可以包括以下步骤:
步骤S302,获取目标事件场景的目标关卡中的多个第一场景模型,多个第一场景模型为目标关卡上待烘焙到目标流关卡中的LOD模型。
本实施例中的模型处理方法可以应用于前述多个关卡拼接而成事件场景。可选地,本实施例中的模型处理方法可以用于烘焙上述目标事件场景,例如,目标游戏场景。本实施例中以烘焙目标游戏场景为例进行说明。
服务器可以分别为目标游戏场景中的各个关卡烘焙多个流关卡。对于目标关卡,在进行目标流关卡烘焙时,服务器可以首先获取目标关卡中的多个第一场景模型,多个第一场景模型为目标关卡上待烘焙到目标流关卡中的LOD模型。
步骤S304,将多个第一场景模型烘焙成多个第二场景模型,得到目标流关卡,其中,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型。
多个第一场景模型可以划分为多个部分,按照对应的场景物件不同和场景物件的重要程度,可以采用相同或者不同的烘焙方式对多个第一场景模型中的各个部分场景模型进行烘焙,得到各第二场景模型。模型的烘焙过程与前述实施例中描述的类似,在此不做赘述。
比如,对于一些精度需求较高的物体,可以通过对其进行特别烘焙来提高这些物体模型的精度,对于一些精度需求较低的物体,可以使用烘焙效果一般的方式进行烘焙。对于大量相同物体,可以采用Instance(实例化)的方式进行烘焙。
可选地,在本实施例中,服务器可以遍历目标关卡中的场景模型,按照配置的烘焙条件,确定遍历到场景模型是否需要烘焙,如果不需要烘焙,则剔除该场景模型(例如,忽略该模型,将该模型标记为无需烘焙);如果需要烘焙且无需与其他模型合并烘焙,可以将其标记为待烘焙;如果需要烘焙且需要与其他模型合并烘焙,则可以按照标记确定需要合并烘焙的场景模型,将这些场景模型标记为待合并烘焙等。
需要说明的是,获取场景模型和烘焙获取的场景模型可以是顺序执行的,也可以是交替执行的,本实施例中对此不作限定。例如,可以在获取合并到一起烘焙的场景模型之后,直接对其进行烘焙;或者,也可以在获取到所有场景模型之后,再对各个模型进行烘焙,其中,对于需要进行合并烘焙的多个模型,可以将其作为一种整体进行烘焙。
通过上述步骤S302至步骤S304,获取目标事件场景的目标关卡中的多个第一场景模型,多个第一场景模型为目标关卡上待烘焙到目标流关卡中的LOD模型;将多个第一场景模型烘焙成多个第二场景模型,得到目标流关卡,其中,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型,解决了相关技术中的模型切换方式存在由于切换前后模型的精度差别过大导致的用户视觉体验差的问题,减少了模型切换前后渲染画面的差异,提高了用户的视觉体验。
作为一种可选的实施例,将多个第一场景模型烘焙成多个第二场景模型可以包括多种,例如,Instance方式,HLOD的方式,距离场采样。
作为一种可选的实施方式,将多个第一场景模型烘焙成多个第二场景模型包括:按照一个批次提交多个第一场景模型中的多个第三场景模型,将多个第三场景模型烘焙成一个实例化模型,其中,多个第三场景模型为以下至少之一:草地,树林,多个第二场景模型包括实例化模型,按照一个批次提交的顶点数为一个第三场景模型的顶点数。
服务器可以将树林、草地等大量相同物体(多个第三场景模型为相同的场景模型)通过Instance的方式烘焙进生成的Streaming Level中。前述实施例中已经进行过说明的,在此不做赘述。
通过本实施例,将树林、草地通过Instance的方式烘焙进生成的Streaming Level中,可以减少渲染时CPU的提交次数,提升渲染效率。
可选地,在本实施例中,获取目标事件场景的目标关卡中的多个第一场景模型包括:按照目标采样精度对与多个第三场景模型匹配的多个匹配场景模型进行随机采样,得到多个第三场景模型。
多个第三子场景模型可以是目标关卡上的多个匹配场景模型的部分,例如,可以是草地、树林的部分。为了增加渲染效率,可以调整目标关卡上的多个匹配场景模型烘焙后的密度,例如,可以按照目标采样精度对多个匹配场景模型进行随机采样,得到多个第三场景模型,多个第三场景模型可以是多个第一场景模型的一部分。
作为一种示例,可以通过定制采样精度来调整草地、树林等的密度。比如,一片草地有1000颗草,正常烘焙后还是1000颗草。在烘焙过程中可以通过随机值仅烘焙其中的10%、50%等,降低了烘焙后的草地的密度。树林与草地的密度调整方式是类似的。
通过本实施例,通过定制采样精度调整物件模型集合的密度,可以灵活控制烘焙后场景中的物件模型的密度,减少需要渲染的模型数量,提高渲染效率。
作为另一种可选的实施方式,将多个第一场景模型烘焙成多个第二场景模型包括:通过合并多个第一场景模型中的多个第四场景模型的模型顶点、模型贴图和模型材质,将多个第四场景模型烘焙成第一目标子模型,其中,多个第二场景模型包括第一目标子模型。
可选地,在本实施例中,获取目标事件场景的目标关卡中的多个第一场景模型包括:获取目标关卡上具有目标标记的场景模型,得到多个第四场景模型,其中,目标标记用于标记待合并为一个模型的场景模型,多个第一场景模型包括多个第四场景模型。
在进行烘焙时或者进行烘焙之前,可以通过TAG(标记)额外标记需要特别烘焙的物体,将其分成HLOD类型和其他类型(例如,可以包括不参与烘焙的类型)。
对于目标关卡,目标关卡上包含多个场景模型,可以通过目标标记来标记多个场景模型中需要特别烘焙的物体。服务器可以从多个场景模型中获取具有目标标记的场景模型,得到多个第四场景模型。目标标记可以用于标记待合并为一个模型的场景模型,如果有多组场景模型(多组HLOD物体)需要分别进行合并,可以采用不同的标记来标记各组场景模型。
可选地,在本实施例中,可以通过目标标记来标记HLOD物体。对于标记的HLOD物体,可以通过UE4的HLOD算法烘焙到一个新物体。此外,还可以通过自定义材质(自定义材质是通用基础材质)来增加需要的效果。
对于多个第四场景模型,可以通过合并模型资源的方式进行模型合并。模型资源可以包括多种,例如,模型顶点信息,模型贴图,模型材质。多个第四场景模型通过HLOD的方式进行烘焙可以是:分别合并多个第四场景模型的顶点(模型顶点信息)、贴图(模型贴图)和材质(模型材质),得到一个模型(目标模型顶点信息)、一个贴图(目标模型贴图)和一个材质(目标模型材质)。通过合并模型、材质和贴图,可以有效减少新模型的内存,并且提升渲染效率。
例如,通过HLOD标记了10个模型,可以将它们的顶点模型信息组合到一起,组成一个新的模型;模型有10张贴图,把10张贴图缩小放到一张新的大贴图里,这样就变成了一个模型、一个贴图、一个材质,就可以把原来CPU 10个批次的渲染节省到一个批次。
需要说明的是,一个材质包含若干个贴图(例如,高光贴图,反射贴图,颜色贴图,法线贴图,粗糙度金属度贴图等),模型的材质描述了用什么样的方式进行模型渲染,模型的贴图描述了用什么样的颜色或者参数进行模型渲染。
可选地,服务器还可以优化合并后模型的uv分配,来解决合并后的贴图在临界线采样存在Mask(遮罩)不准确的问题。例如,如果贴图里有Mask通道,那么uv在采样时容易采样到临界线上的贴图像素,导致本来不该显示的像素被显示出来。可以增加uv采样的限制,例如,增加额外的临界线判断,来解决上述问题。
作为又一种可选的实施方式,将多个第一场景模型烘焙成多个第二场景模型包括:通过对多个第一场景模型中的多个第五场景模型进行距离场采样,将多个第五场景模型烘焙成目标流关卡中的一个场景模型。
多个第五场景模型可以是目标关卡中的非标志性建筑,无需着重烘焙。对于多个第五场景模型,服务器可以采用距离场采样算法进行烘焙。
需要说明的是,采用距离场采样算法进行烘焙,烘焙得到的场景模型可以仅包含了模型表面的信息(采样仅是对模型表面的采样),其模型精度低于最低精度的LOD模型的模型精度,而合并模型顶点、贴图和材质的方式进行模型合并,可以保留模型的顶点、贴图等信息(不只是表面的信息,也可以包含内部信息),其模型精度可以与最低精度的LOD模型相当。
可选地,在本实施例中,也可以通过对多个第四场景模型进行距离场采样,得到第一目标子模型,其中,多个第四场景模型的采样精度高于多个第五场景模型的采样精度。
为了提高某些模型的精度,还可以设置高精度的采样参数,以使烘焙出来的物体更加接近原来的模型。对于多个第四场景模型,多个第四场景模型也可以采用距离场采样的方式进行烘焙,其采样精度高于多个第五场景模型的采样精度。
例如,非透明遮罩的物体可以通过UE4的Streaming Level LOD的距离场采样算法烘焙。UE4本身的烘焙采样算法主要是通过空间采样提取模型表面的顶点信息。
通过本实施例,对不同部分的场景模型可以采用不同的烘焙方式进行模型烘焙,可以提高模型烘焙的灵活性,降低渲染消耗,提高某些模型的精度,提高用户的视觉体验。
作为一种可选的实施例,将多个第一场景模型烘焙成多个第二场景模型包括:在将多个第一场景模型中的多个第六场景模型进行模型合并得到第二目标场景模型的过程中,将第二目标场景模型的目标材质属性写入到第二目标场景模型的目标颜色通道,得到第二目标场景模型的目标颜色贴图,其中,多个第二场景模型包括第二目标场景模型。
多张贴图进行采样时需要采样多次,为了减少采样次数,可以在进行模型烘焙的过程中,可以将模型合并得到的场景模型的材质属性合并到颜色通道。
对于多个第一场景模型中的多个第六场景模型,在将多个第六场景模型进行模型合并得到第二目标场景模型的过程中,可以将第二目标场景模型的目标材质属性写入到第二目标场景模型的目标颜色通道,得到第二目标场景模型的目标颜色贴图。
上述目标材质属性可以为金属度、高光、粗糙度、透明度的至少一个,上述目标颜色通道可以是目标颜色贴图的RGBA四个通道中的至少一个。
通过本实施例,通过合并贴图到颜色通道,可以减少采样次数,对一张贴图采样可以获得多个数据,可以提高运行效率。
需要说明的是,对于上述将材质贴图到颜色通道的方式,可以使用与各个部分的场景模型的烘焙过程中,对于一些不适宜的场景模型,也可以不合并贴图到颜色通道,本实施例中对此不作限定。
作为一种可选的实施例,将多个第一场景模型烘焙成多个第二场景模型包括:在将多个第一场景模型中的多个第七场景模型进行模型合并得到第三目标场景模型的过程中,按照多个第七场景模型的透明遮罩贴图烘焙出第三目标场景模型的透明遮罩贴图。
在对第三目标场景模型进行烘焙时,如果多个第七场景模型具有透明遮罩贴图,则可以按照多个第七场景模型的透明遮罩贴图烘焙出第三目标场景模型的透明遮罩贴图,可以导出透明通道,从而支持透明材质。
通过本实施例,通过导出模型的透明通道,可以保证能够烘焙Mask类型的遮罩物体(例如,树木),提高遮罩物体烘焙后的显示效果。
作为一种可选的实施例,获取目标事件场景的目标关卡中的多个第一场景模型包括:确定与目标流关卡对应的包围盒尺寸阈值,其中,包围盒尺寸阈值为允许烘焙的场景模型的尺寸阈值;剔除目标关卡上包围盒尺寸小于包围盒尺寸阈值的场景模型。
在获取目多个第一场景模型时,可以通过遍历的方式剔除一些无需渲染的物体。可选地,在烘焙的过程中,可以根据不同距离剔除不需要烘焙进LOD地形的小物件,即,包围盒过小的小物件。
例如,可以预先配置切换LOD的距离(流送距离),比如,距离人物超过200米时,切换到当前烘焙的流关卡。那么在烘焙时,可以读取配置的200米这个数值,剔除掉在200米以外不需要烘焙的、包围盒过小的模型。
剔除掉的包围盒可以随着距离增加越来越大,例如,一个流关卡配置的切换距离为200米,一个流关卡配置的切换距离为400米,那么,与400米对应的流关卡中剔除掉的包围盒的尺寸大于与200米对应的流关卡中剔除掉的包围盒的尺寸。
对于目标流关卡,服务器可以确定与目标流关卡对应的包围盒尺寸阈值,包围盒尺寸阈值与目标流关卡的流送距离匹配,是允许烘焙的场景模型的尺寸阈值。按照包围盒尺寸阈值,剔除目标关卡上包围盒尺寸小于包围盒尺寸阈值的场景模型。
剔除场景模型的方式可以是删除该场景模型,也可以是在遍历到该场景模型时,忽略该场景模型,将该场景模型标记为不需要烘焙的模型,剔除场景模型的方式可以根据需要进行配置,本实施例中对此不作限定。
例如,如图4所示,在游戏场景中,地块A中的物件B的包围盒较小,人物C与地块A之间的距离较近时,会在地块A上渲染出物件B(此时,地块A上显示的流关卡中烘焙有物件B的模型);如果人物C与地块A之间的距离较远时,不会在地块A上渲染出物件B(此时,地块A上显示的流关卡中没有烘焙物件B的模型)。
作为一种可选的实施例,获取目标事件场景的目标关卡中的多个第一场景模型包括:剔除目标关卡上具有隐藏属性的场景模型。
为了避免烘焙出不需要的模型,场景中的隐藏物体可以不进行烘焙。例如,在遍历到具有隐藏属性的场景模型时,可以剔除该场景模型,不进行烘焙。
例如,在烘焙的过程中,可以对场景模型进行判断,如果当前模型在场景中的属性是隐藏的,则可以跳过这个模型。
通过本实施例,通过剔除关卡上包围盒过小的小物件或者隐藏物体,可以减少烘焙出的模型数量,从而提高渲染效率。
例如,在进行场景烘焙或者关卡烘焙时,可以采用如图5所示的烘焙界面配置烘焙过程中所使用的参数,可以包括以下参数:
Relative Distance(相对距离,指与目标人物的相对距离);
Simplification Details(简化细节),包括:Create Package Per Asset(为每个资源创建包),Static Mesh Details Percentage(静态网格细节百分比),FoliageDensity(树木密度),Grass Density(草地密度),Bake Foliage to Instance(烘焙树木到实例),Bake Grass to Instance(烘焙草地到实例),Only Bake Landscape(仅烘焙地块),Override Spatial Sampling Distance(覆盖空间采样距离);
Static Mesh Material Setting(静态网格材质设置),包括:Landscape ExportLOD(地块输出LOD);
Landscape Material Setting(地块材质配置),包括:Bake Foliage toLandscape(将树木烘焙到地块上),Bake All Static Mesh to Landscape(将所有静态网格烘焙到地块上),Bake Grass to Landscape(将草地烘焙到地块上)。
下面结合可选示例对本申请实施例中的模型处理方法进行解释说明。对于游戏场景,结合使用Streaming Level LOD和HLOD,针对流式加载关卡的方式做LOD,保证切换LOD时,在加载好新的模型之后,旧的模型资源会被卸载回收。
如图6所示,本示例中的模型处理方法的流程可以包括以下步骤:
步骤S602,为游戏场景中的各个关卡烘焙对应的流关卡。
对于游戏场景中的各个关卡,可以预先为其烘焙流关卡。在烘焙一个流关卡时,可以通过TAG额外标记需要特别烘焙的物体,将其分成HLOD类型以及其他类型。标记的HLOD物体可以通过UE4的HLOD算法被烘焙到一个新物体。
此外,还可以对流关卡中的物体执行以下操作:对于非透明遮罩的物体,通过距离场采样算法烘焙;根据距离剔除包围盒过小的小物件(不需要烘焙的模型);通定制树林、草地的采样精度调整其烘焙后的密度,并通过Instance的方式烘焙进生成的StreamingLevel中,以此来增加渲染效率;通过合并贴图通道,增加GPU采样效率;导出透明通道,从而可以支持透明材质。
步骤S604,在角色第一次进入游戏场景时,通过角色摄像机的朝向计算当前摄像机能看到的范围,优先加载这个范围内的地块。
步骤S606,在游戏运行的过程中,为每个在视野中的远处地块生成一块小分辨率的阴影贴图,并降低该地块的阴影更新频率。
步骤S608,在角色位置发生移动时,按照关卡的流送距离控制切换在各个关卡上显示的流关卡。
如果角色位置发生移动,角色与各个关卡的距离也会发生变化。如果与某些关卡的距离超过配置的距离阈值,则会将切换这些关卡上显示的流关卡,并在新的模型加载完成之后,卸载原始模型。
图7为采用本示例中的模型处理方法所得到的帧率、以及性能提升结果的示意,其中,各个指标的含义分别为:Frame,渲染每一帧花费的时间;Game,游戏线程每一帧花费的时间;Draw,Draw Call花费的时间,CPU负责渲染的部分;GPU,渲染线程花费的时间;RHIT,Render hardware interface time,硬件接口渲染时间;DynRes,动态分辨率。
通过本示例,可以节约内存,提升渲染性能、帧率,提升渲染效果,以及提供高度可定制化的模型,满足多样的需求。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM(Read-Only Memory,只读存储器)/RAM(Random Access Memory,随机存取存储器)、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
根据本申请实施例的又一个方面,还提供了一种用于实施上述模型处理方法的模型处理装置。图8是根据本申请实施例的一种可选的模型处理装置的结构框图,如图8所示,该装置可以包括:
第一显示单元802,用于在目标客户端上显示目标关卡的多个第一场景模型,其中,多个第一场景模型中的每个第一场景模型为一个场景物体的多细节层次LOD模型;
第一加载单元804,与第一显示单元802相连,用于加载目标关卡待切换到的目标流关卡,其中,目标流关卡中包含多个第二场景模型,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型;
控制单元806,与第一加载单元804相连,用于控制目标客户端上显示的关卡切换到目标流关卡,其中,目标流关卡上显示有多个第二场景模型。
需要说明的是,该实施例中的第一显示单元802可以用于执行上述步骤S202,该实施例中的第一加载单元804可以用于执行上述步骤S204,该实施例中的控制单元806可以用于执行上述步骤S206。
通过上述模块,在目标客户端上显示目标关卡的多个第一场景模型,其中,多个第一场景模型中的每个第一场景模型为一个场景物体的多细节层次LOD模型;加载目标关卡待切换到的目标流关卡,其中,目标流关卡中包含多个第二场景模型,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型;控制目标客户端上显示的关卡切换到目标流关卡,其中,目标流关卡上显示有多个第二场景模型,解决了相关技术中的模型切换方式存在由于切换前后模型的精度差别过大导致的用户视觉体验差的问题,减少了模型渲染时模型的色差,提高了画面渲染效果。
作为一种可选的实施例,上述装置还包括:
第二加载单元,用于在在目标客户端上显示目标关卡的多个第一场景模型之前,在目标虚拟角色首次进入到目标关卡所属的目标事件场景的情况下,加载目标事件场景中位于目标可视范围内的多个关卡,其中,目标虚拟角色为通过目标客户端所控制的虚拟角色,目标可视范围为与目标虚拟角色对应的目标摄像机的可视范围;
第二显示单元,用于在与目标客户端上显示记载的多个关卡。
作为一种可选的实施例,上述装置还包括:
确定单元,用于在加载目标关卡待切换到的目标流关卡之前,在检测到目标关卡与目标虚拟角色之间的距离由小于目标距离阈值转换为大于或者等于目标距离阈值的情况下,确定将目标关卡切换到目标流关卡,其中,目标虚拟角色为通过目标客户端所控制的虚拟角色。
作为一种可选的实施例,上述装置还包括:
卸载单元,用于在控制目标客户端上显示的关卡切换到目标流关卡之后,在目标流关卡中的全部场景模型均已显示的情况下,卸载目标关卡中的全部场景模型。
作为一种可选的实施例,上述装置还包括:
第一渲染单元,用于在控制目标客户端上显示的关卡切换到目标流关卡之后,在多个第二场景模型包含由多个第三场景模型烘焙得到的实例化模型的情况下,按照一个批次提交实例化模型,将实例化模型渲染到目标流关卡上进行显示,其中,按照一个批次提交的顶点数为一个第三场景模型的顶点数,多个第三场景模型为以下至少之一:草地,树林,多个第三场景模型的密度小于目标关卡中与多个第三场景模型匹配的多个匹配场景模型的密度。
作为一种可选的实施例,上述装置还包括:
第二渲染单元,用于在控制目标客户端上显示的关卡切换到目标流关卡之后,在多个第二场景模型包含由多个第四场景模型通过合并模型顶点、模型贴图和模型材质进行烘焙得到的第一目标场景模型的情况下,使用第一目标场景模型的模型顶点、模型贴图和模型材质,将第一目标场景模型渲染到目标流关卡上进行显示。
作为一种可选的实施例,上述装置还包括:
第一获取单元,用于在控制目标客户端上显示的关卡切换到目标流关卡之后,获取多个第二场景模型中的第二目标场景模型的目标颜色贴图,其中,目标颜色贴图的目标颜色通道中写入有目标材质属性;
第三渲染单元,用于使用目标颜色贴图,将第二目标场景模型渲染到目标流关卡上进行显示。
作为一种可选的实施例,上述装置还包括:
第二获取单元,用于在控制目标客户端上显示的关卡切换到目标流关卡之后,获取多个第二场景模型中的第三目标场景模型的透明遮罩贴图;
第四渲染单元,用于使用透明遮罩贴图,将第三目标场景模型渲染到目标流关卡上进行显示。
作为一种可选的实施例,上述装置还包括:
生成单元,用于在控制目标客户端上显示的关卡切换到目标流关卡之后,按照目标频率为目标流关卡生成地块阴影贴图,其中,地块阴影贴图的分辨率小于目标分辨率阈值;
第五渲染单元,用于使用地块阴影贴图为目标流关卡渲染地块阴影,其中,地块阴影包含以下至少之一的场景物件的阴影:地形,模型,建筑。
根据本申请实施例的又一个方面,提供了一种用于实施上述模型处理方法的模型处理装置。图9是根据本申请实施例的另一种可选的模型处理装置的结构框图,如图9所示,该装置可以包括:
第三获取单元902,用于获取目标事件场景的目标关卡中的多个第一场景模型,多个第一场景模型为目标关卡上待烘焙到目标流关卡中的LOD模型;
烘焙单元904,与第三获取单元902相连,用于将多个第一场景模型烘焙成多个第二场景模型,得到目标流关卡,其中,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型。
需要说明的是,该实施例中的第三获取单元902可以用于执行上述步骤S302,该实施例中的烘焙单元904可以用于执行上述步骤S304。
通过上述模块,获取目标事件场景的目标关卡中的多个第一场景模型,多个第一场景模型为目标关卡上待烘焙到目标流关卡中的LOD模型,将多个第一场景模型烘焙成多个第二场景模型,得到目标流关卡,其中,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型,解决了相关技术中的模型切换方式存在由于切换前后模型的精度差别过大导致的用户视觉体验差的问题,减少了模型切换前后渲染画面的差异,提高了用户的视觉体验。
作为一种可选的实施例,烘焙单元904包括以下至少之一:
第一烘焙模块,用于按照一个批次提交多个第一场景模型中的多个第三场景模型,将多个第三场景模型烘焙成一个实例化模型,其中,多个第三场景模型为以下至少之一:草地,树林,多个第二场景模型包括实例化模型,按照一个批次提交的顶点数为一个第三场景模型的顶点数;
第二烘焙模块,用于通过合并多个第一场景模型中的多个第四场景模型的模型顶点、模型贴图和模型材质,将多个第四场景模型烘焙成第一目标子模型,其中,多个第二场景模型包括第一目标子模型;
第三烘焙模块,用于通过对多个第一场景模型中的多个第五场景模型进行距离场采样,将多个第五场景模型烘焙成目标流关卡中的一个场景模型。
作为一种可选的实施例,烘焙单元904包括:
第四烘焙模块,用于在将多个第一场景模型中的多个第六场景模型进行模型合并得到第二目标场景模型的过程中,将第二目标场景模型的目标材质属性写入到第二目标场景模型的目标颜色通道,得到第二目标场景模型的目标颜色贴图,其中,多个第二场景模型包括第二目标场景模型。
作为一种可选的实施例,烘焙单元904包括:
第五烘焙模块,用于在将多个第一场景模型中的多个第七场景模型进行模型合并得到第三目标场景模型的过程中,按照多个第七场景模型的透明遮罩贴图烘焙出第三目标场景模型的透明遮罩贴图。
作为一种可选的实施例,第三获取单元902包括:
确定模块,用于确定与目标流关卡对应的包围盒尺寸阈值,其中,包围盒尺寸阈值为允许烘焙的场景模型的尺寸阈值;
第一剔除模块,用于剔除目标关卡上包围盒尺寸小于包围盒尺寸阈值的场景模型。
作为一种可选的实施例,第三获取单元902包括:
第二剔除模块,用于剔除目标关卡上具有隐藏属性的场景模型。
此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。
根据本申请实施例的又一个方面,还提供了一种用于实施上述模型处理方法的电子设备,该电子设备可以是服务器、终端、或者其组合。
图10是根据本申请实施例的一种可选的电子设备的结构框图,如图10所示,包括处理器1002、通信接口1004、存储器1006和通信总线1008,其中,处理器1002、通信接口1004和存储器1006通过通信总线1008完成相互间的通信,其中,
存储器1006,用于存储计算机程序;
可选地,处理器1002,用于执行存储器1006上所存放的计算机程序时,实现如下步骤:
S1,在目标客户端上显示目标关卡的多个第一场景模型,其中,多个第一场景模型中的每个第一场景模型为一个场景物体的LOD模型;
S2,加载目标关卡待切换到的目标流关卡,其中,目标流关卡中包含多个第二场景模型,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型;
S3,控制目标客户端上显示的关卡切换到目标流关卡,其中,目标流关卡上显示有多个第二场景模型。
处理器1002,用于执行存储器1006上所存放的计算机程序时,实现如下步骤:
S1,获取目标事件场景的目标关卡中的多个第一场景模型,多个第一场景模型为目标关卡上待烘焙到目标流关卡中的LOD模型;
S2,将多个第一场景模型烘焙成多个第二场景模型,得到目标流关卡,其中,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型。
可选地,在本实施例中,上述的通信总线可以是PCI(Peripheral ComponentInterconnect,外设部件互连标准)总线、或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括RAM,也可以包括非易失性存储器(non-volatile memory),例如,至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。
作为一种可选的示例,上述存储器1006中可以但不限于包括上述模型处理装置中的第一显示单元802、第一加载单元804以及控制单元806。此外,还可以包括但不限于上述模型处理装置中的其他模块,本示例中不再赘述。
作为另一种可选的示例,上述存储器1006中可以但不限于包括上述模型处理装置中的第三获取单元902以及烘焙单元904。此外,还可以包括但不限于上述模型处理装置中的其他模块,本示例中不再赘述。
上述处理器可以是通用处理器,可以包含但不限于:CPU、NP(Network Processor,网络处理器)等;还可以是DSP(Digital Signal Processing,数字信号处理器)、ASIC(Application Specific Integrated Circuit,专用集成电路)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
本领域普通技术人员可以理解,图10所示的结构仅为示意,实施上述模型处理方法的设备可以是终端设备,该终端设备可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图10其并不对上述电子装置的结构造成限定。例如,终端设备还可包括比图10中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图10所示的不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、ROM、RAM、磁盘或光盘等。
根据本申请实施例的又一个方面,还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行本申请实施例中上述任一项模型处理方法的程序代码。
可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
S1,在目标客户端上显示目标关卡的多个第一场景模型,其中,多个第一场景模型中的每个第一场景模型为一个场景物体的LOD模型;
S2,加载目标关卡待切换到的目标流关卡,其中,目标流关卡中包含多个第二场景模型,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型;
S3,控制目标客户端上显示的关卡切换到目标流关卡,其中,目标流关卡上显示有多个第二场景模型。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
S1,获取目标事件场景的目标关卡中的多个第一场景模型,多个第一场景模型为目标关卡上待烘焙到目标流关卡中的LOD模型;
S2,将多个第一场景模型烘焙成多个第二场景模型,得到目标流关卡,其中,多个第二场景模型中的每个第二场景模型为多个第一场景模型中的部分场景模型进行模型合并所得到的场景模型。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例中对此不再赘述。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、ROM、RAM、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例中所提供的方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
- 模型处理方法、模型处理装置、电子设备及存储介质
- 网络模型的处理方法及装置、电子设备和存储介质