1.本说明书实施例涉及计算机技术领域,特别涉及一种对象处理方法。
背景技术:
2.随着互联网技术以及游戏技术的不断发展,游戏厂商在为玩家提供游戏服务的过程中,为了保证游戏服务的真实有趣,需要在游戏场景中模拟现实场景;但是现有技术中,由于模拟技术存在物理模拟能力较弱、不精准等问题,会导致游戏场景中进行移动的对象,与现实情况产生较大差异,从而导致移动对象的真实度较低,玩家体验较差等问题。
技术实现要素:
3.有鉴于此,本说明书实施例提供了一种对象处理方法。本说明书一个或者多个实施例同时涉及一种对象处理装置,一种计算设备,一种计算机可读存储介质,一种计算机程序,以解决现有技术中存在的技术缺陷。
4.根据本说明书实施例的第一方面,提供了一种对象处理方法,包括:
5.确定初始移动对象在目标区域进行移动的当前位置,并根据所述当前位置从所述目标区域中确定所述初始移动对象进行移动的目标位置;
6.根据所述目标位置的地形数据以及所述初始移动对象进行移动的当前移动数据,确定动作调整数据;
7.根据所述动作调整数据对所述初始移动对象的当前移动动作进行调整,获得目标移动对象。
8.根据本说明书实施例的第二方面,提供了一种对象处理装置,包括:
9.位置确定模块,被配置为确定初始移动对象在目标区域进行移动的当前位置,并根据所述当前位置从所述目标区域中确定所述初始移动对象进行移动的目标位置;
10.数据确定模块,被配置为根据所述目标位置的地形数据以及所述初始移动对象进行移动的当前移动数据,确定动作调整数据;
11.动作调整模块,被配置为根据所述动作调整数据对所述初始移动对象的当前移动动作进行调整,获得目标移动对象。
12.根据本说明书实施例的第三方面,提供了一种计算设备,包括:
13.存储器和处理器;
14.所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现所述对象处理方法的步骤。
15.根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现所述对象处理方法的步骤。
16.根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行所述对象处理方法的步骤。
17.本说明书提供的对象处理方法,包括:确定初始移动对象在目标区域进行移动的
当前位置,并根据所述当前位置从所述目标区域中确定所述初始移动对象进行移动的目标位置;根据所述目标位置的地形数据以及所述初始移动对象进行移动的当前移动数据,确定动作调整数据;根据所述动作调整数据对所述初始移动对象的当前移动动作进行调整,获得目标移动对象。
18.具体的,该方法通过初始移动对象在目标区域进行移动的当前移动数据,以及该初始移动对象在目标区域中需要移动至的目标位置的地形数据,确定出针对该初始移动对象的动作调整数据,并基于该动作调整数据对该初始移动对象的当前移动动作进行调整,从而获得更为真实的目标移动对象,从而提高游戏的真实度以及游戏玩家的游戏体验。
附图说明
19.图1是本说明书一个实施例提供的一种对象处理方法的应用场景示意图;
20.图2是本说明书一个实施例提供的一种对象处理方法的流程图;
21.图3是本说明书一个实施例提供的一种对象处理方法中目标区域的示意图;
22.图4是本说明书一个实施例提供的一种对象处理方法的处理过程流程图;
23.图5是本说明书一个实施例提供的现有树叶模拟的示意图;
24.图6是本说明书一个实施例提供的一种对象处理方法中进行树叶模拟的示意图;
25.图7是本说明书一个实施例提供的一种对象处理装置的结构示意图;
26.图8是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
27.在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
28.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
29.应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
30.首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
31.mask:一种游戏贴图。
32.visualeffectgraph:一种粒子特效编辑组件,用于进行粒子特效渲染。
33.shuriken:一种进行生成粒子的粒子系统,可以用于制造烟、蒸汽、火和其他气氛效果。
34.customdata:visualeffectgraph配套的临时数据存储方案。
35.offset:预设的数值偏移量。
36.随着互联网技术以及游戏技术的不断发展,游戏厂商在为玩家提供游戏服务的过程中,为了保证游戏服务的真实有趣,需要在游戏场景中模拟现实场景;但是现有技术中,由于模拟技术存在物理模拟能力较弱、不精准等问题,会导致游戏场景中进行移动的对象,与现实场景中的情况产生较大差异,例如,现有的shuriken粒子系统所支持的粒子的数量太少,无法满足尺寸较大场景所需的数量级。并且,现有的visualeffectgraph的物理模拟能力较弱,该物理模拟能力在时间、空间的粒度都很大。因此可能会造成模拟物体与真实物体存在较大差距的问题,例如,所模拟的叶片一直颤抖、叶片穿模掉落在地面之下、叶片浮在地面不能贴地等问题,针对上述问题,需要提供一种能够适应大量粒子,且不依赖时间粒度的物理模拟系统
37.基于此,在本说明书中,提供了一种对象处理方法,本说明书同时涉及一种对象处理装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,在下面的实施例中逐一进行详细说明。
38.图1示出了根据本说明书一个实施例提供的一种对象处理方法的应用场景示意图,以图1内容为例,该初始移动对象可以为游戏场景中飘落的树叶,该目标移动对象可以为被调整过移动动作的树叶,目标区域可以为游戏场景中树叶所飘落的区域。该树叶在游戏场景内从上至下逐渐飘落至地面,在此过程中,为了保证树叶模拟的真实性,避免树叶穿模、不能贴地等问题,本说明书提供的对象处理方法,会确定该树叶在游戏场景内进行移动时的当前位置,并根据该当前位置从游戏场景中确定该树叶需要飘落至的目标位置。然后,确定该目标位置的地形数据以及该树叶进行移动的当前移动数据,确定针对该树叶飘落动作进行调整的动作调整数据。最后基于该动作调整参数对该树叶的当前飘落动作进行调整,从而获得一个与地面贴合并且不会穿模的树叶。
39.图2示出了根据本说明书一个实施例提供的一种对象处理方法的流程图,具体包括以下步骤。
40.步骤202:确定初始移动对象在目标区域进行移动的当前位置,并根据所述当前位置从所述目标区域中确定所述初始移动对象进行移动的目标位置。
41.其中,该目标区域可以理解为该初始移动对象进行移动的区域;在对象处理方法应用在游戏业务的情况下,该目标区域可以为游戏中的游戏地图;或者该目标区域可以为游戏地图中的特定区域。在对象处理方法应用于虚拟现实业务的情况下,该目标区域可以为模拟真实物理场景的虚拟现实场景。其中,该目标区域可以为二维区域,例如,二维游戏中的二维游戏场景;或者该目标区域可以为三维区域,例如三维游戏中的三维游戏场景,本说明书对此不作具体限制。
42.该初始移动对象可以理解为在目标区域内进行移动的对象,例如,该初始移动对象可以为游戏场景中移动的游戏模型,包括但不限于人物模型、动物模型或者物体模型等。或者该初始移动对象可以理解为该游戏场景中所模拟的粒子,包括但不限于树叶粒子,雪花粒子等等,本说明书对此不作具体限制。或者,该初始移动对象可以为模拟真实物体在虚拟现实场景中移动的虚拟物体。例如,虚拟人物,虚拟动物等。需要说明书的是,在目标区域进行移动可以理解为在目标区域中进行奔跑、下降、飘落、行走等移动方式,本说明书对此不作具体限制。
43.当前位置可以理解为当前坐标位置,即该初始移动对象在目标区域内的当前坐标位置;该坐标位置可以为二维坐标,也可以为三维坐标。目标位置可以理解为该初始移动对象需要移动至的目标坐标位置;例如,汽车模型前进的终点位置,树叶飘落至地面上的落点位置等;该目标位置可以为二维坐标,也可以为三维坐标。
44.具体的,在本说明书提供的一实施例中,所述确定初始移动对象在目标区域进行移动的当前位置,并根据所述当前位置从所述目标区域中确定所述初始移动对象进行移动的目标位置,包括:
45.获取初始移动对象在目标区域进行移动的当前状态数据;
46.在确定所述当前状态数据满足动作调整条件的情况下,确定所述初始移动对象在所述目标区域进行移动的当前位置,并根据所述当前位置从所述目标区域中确定所述初始移动对象进行移动的目标位置。
47.其中,当前状态数据可以理解为表征该初始移动对象当前处于何种状态的信息;例如,初始移动对象为树叶,那么当树叶与地面落点之间的高度差值大于0.5米,则确定该树叶为浮空状态;当树叶与地面落点之间的高度差值小于等于0.5米且大于0.1厘米,或者当树叶与地面落点之间的高度差值小于预设落叶长度(如3厘米)的情况下,则确定该树叶为近地状态;当树叶与地面落点之间的高度差值小于等于0.1厘米,则确定该树叶为贴地状态。需要说明的是,本说明书提供的对象处理方法,为了便于确定该初始移动对象的当前状态数据,提供了用于存储当前状态数据的状态存储单元。例如,该状态存储单元可以为customdata,通过使用customdata存储树叶的当前状态数据(包括但不限于浮空、近地、落地、交互等),便于快速获取该当前状态数据。需要说明的是,在实际应用中,落地叶片旋转贴地过程中,当叶片处于浮空状态时,叶片获得随机的重力加速度,从而实现“随机翻飞”的效果,也即是,该叶片在浮空状态下根据随机角度进行翻转,并根据随机的重力参数下落。
48.并且,需要说明的是,当树叶状态为浮空或近地时:树叶速度的x轴、z轴分量不变,但是,叶片速度的y轴分量因为预设重力参数,呈现加速度状态,垂直向下过渡,从而达到下降的效果。当叶片状态为浮空时:叶片当前速度y分量向下,且距离地面距离小于一片树叶的预计长度(如3厘米)时,叶片进入近地状态。当叶片处于近地状态,且叶片距离地面高度小于地面临界(如0.01厘米)时,将其状态更新为贴地,将其高度设置为地面高度,并停止移动。
49.当叶片从浮空状态切换到近地状态的瞬间,触发针对落叶移动角度的调整操作。也即是说,落叶与地面的高度过近时,例如树叶与地面落点之间的高度差值小于等于0.5米并大于0.1厘米,将树叶从浮空状态更改为近地状态;同时,确定树叶落点位置的地形数据,计算树叶与地面贴合的最佳角度(即动作调整数据),并基于该最佳角度,以旋转的方式对树叶的当前形态进行调整,从而在树叶落在地面时与地形贴合。
50.动作调整条件可以理解为表征该初始移动对象可以进行动作调整的条件。例如,在当前状态数据为近地状态的情况下,则确定满足该动作调整条件。
51.具体的,本说明书提供的对象处理方法,在执行确定初始移动对象在目标区域进行移动的当前位置,直至获得目标移动对象等操作之前,需要获取该初始移动对象在目标区域内进行移动的当前状态信息,例如,该当前状态信息可以为树叶粒子的浮空状态、近地状态等。然后,在确定该当前状态数据满足动作调整条件的情况下,执行确定初始移动对象
在目标区域进行移动的当前位置,并根据当前位置从目标区域中确定初始移动对象进行移动的目标位置,直至获得目标移动对象。从而达到在初始移动对象的当前状态数据满足动作调整条件时,对该初始移动对象进行处理,在避免妨碍初始移动对象的正常移动动作的同时,节省计算机的计算资源。
52.以对象处理方法在对树叶飘落动作进行调整的场景为例,该初始移动对象为初始树叶粒子,需要说明的是,该树叶粒子是基于visualeffectgraph制作,该visualeffectgraph可以支持百万级大量粒子。并且,每个树叶粒子可以存在对应的控制单元,树叶粒子在游戏地图中进行飘落的过程中,会读取当前地图的地形高度图,并将其映射成世界空间位置;将该世界空间位置与树叶自身高度位置进行比较,从而区分出树叶粒子的当前状态信息,包括但不限于浮空、近地、落地、交互等。基于此,在树叶粒子的当前下落动作进行调整之前,需要确定获取该树叶粒子的当前状态信息,在确定该当前状态信息为近地状态的情况下,为了保证树叶在下落时能够贴合地面,触发针对树叶粒子的动作调整,从而获得调整后贴合地面的树叶粒子。
53.进一步的,在本说明书提供的实施例中,为了提高对象处理方法的适用性,还可以实时的基于该初始移动对象的当前高度,与所述目标位置的地面高度之间的高度差值,确定是否对该初始移动对象的当前移动动作进行调整,从而避免存储当前状态数据所消耗的计算机资源,具体的,所述确定所述当前状态数据满足动作调整条件,包括:
54.确定所述初始移动对象在所述目标区域进行移动的当前高度,与所述目标位置的地面高度之间的第一高度差值;
55.在所述第一高度差值满足第一预设差值范围的情况下,确定所述当前状态数据满足动作调整条件。
56.其中,第一预设差值范围可以理解为一个数值范围,该第一预设差值范围可以根据实际应用场景进行设置,本说明书对此不作具体设置,例如,小于等于0.5米且大于0.1厘米的数值范围。
57.沿用上例,树叶粒子在游戏地图中进行飘落的过程中,会读取当前地图的地形高度图,并将其映射成世界空间位置;然后计算世界空间位置与树叶自身高度位置之间的高度差,在确定该高度差小于等于0.5米且大于0.1厘米的情况下,确定该当前状态数据满足动作调整条件。
58.步骤204:根据所述目标位置的地形数据以及所述初始移动对象进行移动的当前移动数据,确定动作调整数据。
59.其中,该地形数据可以理解为表征目标位置的地形情况的数据,包括但不限于表征目标位置地形方向的数据、表征目标位置地形角度的地形角度数据。例如,该地形数据可以为法线方向数据。
60.当前移动数据可以理解为表征该初始移动对象当前移动情况的数据,该当前移动数据可以为当前移动角度数据。
61.动作调整数据可以理解为对该初始移动对象的当前移动动作进行调整的数据,例如,动作调整角度数据。
62.具体的,在本说明书提供的一实施例中,所述地形数据为地形角度数据,所述当前移动数据为当前移动角度数据;
63.相应的,所述根据所述目标位置的地形数据以及所述初始移动对象进行移动的当前移动数据,确定动作调整数据,包括:
64.确定所述目标位置的所述地形角度数据,以及所述初始移动对象进行移动的所述当前移动角度数据;
65.基于所述地形角度数据以及所述当前移动角度数据,确定动作调整角度数据。
66.其中,该地形角度数据可以理解为表征目标位置对应的地形角度的数据,例如,法线方向。在实际应用中,本说明书提供的对象处理方法,确定目标位置的地形角度数据的步骤,包括,确定目标区域对应的区域地形数据,并从该区域地形数据中确定目标位置对应的地形角度数据。其中,该区域地形数据可以为法线贴图,该地形角度数据可以为法线方向。例如,在实际应用中,本说明书提供的对象处理方法,可以获取初始移动对象在当前位置向地面投影的坐标位置,也即是目标位置;用这个坐标采样场景地形图的法线贴图,从而获取对应位置的法线方向。该地形角度数据可以包含目标位置在x轴、y轴以及z轴上的角度数据。
67.当前移动角度数据可以理解为该初始移动对象当前所移动的角度数据,例如,该当前移动角度可以为水平角度。该当前移动角度数据可以包含初始移动对象在x轴、y轴以及z轴上的角度数据。
68.动作调整角度数据可以理解为针对该初始移动对象的当前移动动作角度进行调整的数据,该动作调整角度数据可以包含初始移动对象在x轴、y轴以及z轴上需要调整的角度数据。
69.具体的,本说明书提供的对象处理方法为了保证初始移动对象在移动过程中的真实性,会对该初始移动对象的移动角度进行调整,从而保证该初始移动对象的移动过程符合真实物理定律,基于此,需要确定目标位置的地形角度数据,以及初始移动对象进行移动的当前移动角度数据;然后基于该地形角度数据以及当前移动角度数据,计算出针对该初始移动对象的动作调整角度数据。
70.沿用上例,通过获取树叶粒子在当前位置向地面投影的坐标,用这个坐标采样地形图的法线贴图,从而获取目标位置对应的法线方向。然后根据法线方向与正y轴方向的关系,推断出叶片从初始角度(即水平角度)转换到贴地角度所必须做出的角度调整参数。
71.进一步的,在本说明书提供的一实施例中,在计算该动作调整角度数据的过程中,可以通过地形角度数据与当前移动角度数据之间的旋转度数确定,从而便于后续基于该动作调整角度对初始移动对象的当前移动动作进行调整,获得真实的、符合物理定律的目标移动对象。具体的,所述基于所述地形角度数据以及所述当前移动角度数据,确定动作调整角度数据,包括:
72.确定所述地形角度数据与所述当前移动角度数据之间的旋转度数,基于所述旋转度数确定动作调整角度数据。
73.其中,该旋转度数可以理解为初始移动对象需要旋转的角度参数。
74.沿用上例,在获取目标位置对应的法线方向以及树叶的水平角度之后,通过计算法线方向以及水平角度之间的旋转度数,从而确定该树叶需要偏转的角度。
75.在本说明书提供的一实施例中,为了保证对初始移动对象的当前移动动作进行调整过程中的真实性和精细度,本说明书提供的对象处理方法,会基于多个坐标轴角度的对
比,更为精准的确定初始移动对象在多个坐标轴上的偏转角度,具体的,所述确定所述地形角度数据与所述当前移动角度数据之间的旋转度数,基于所述旋转度数确定动作调整角度数据,包括:
76.根据所述当前移动角度数据,确定第一坐标轴平面以及第二坐标轴平面;
77.确定所述地形角度数据在所述第一坐标轴平面的第一分量数据,以及在所述第二坐标轴平面的第二分量数据;
78.基于所述第一分量数据以及第一坐标轴计算第一坐标轴旋转度数,并基于所述第二分量数据以及第二坐标轴计算第二坐标轴旋转度数;
79.获取所述初始移动对象对应的预设第三坐标轴旋转度数;
80.将所述第一坐标轴旋转度数、所述第二坐标轴旋转度数以及所述预设第三坐标轴旋转度数,确定为所述初始移动对象的旋转度数。
81.其中,该第一坐标轴可以理解为游戏场景中的横轴,也即是x轴;地形第一坐标轴角度可以理解为目标位置的法线方向与x轴之间的角度。对象第一坐标轴角度可以理解为初始移动对象(如树叶粒子)的当前角度与x轴之间的角度。
82.第二坐标轴可以理解为游戏场景中的竖轴,也即是z轴;地形第二坐标轴角度可以理解为目标位置的法线方向与z轴之间的角度。对象第二坐标轴角度可以理解为初始移动对象(如树叶粒子)的当前角度与z轴之间的角度。
83.第三坐标轴可以理解为游戏场景中的纵轴,也即是y轴;预设第三坐标轴角度值可以理解为预先设定的一个围绕y轴旋转的随机度数。通过设置该随机度数可以达到树叶粒子旋转落地的效果,提高树叶粒子的真实性。
84.沿用上例,当前移动角度数据为树叶在x轴、z轴、y轴的向量;第一坐标轴为x轴;第二坐标轴为z轴;第一坐标轴平面为x轴平面,第二坐标轴平面为z轴平面;基于此,根据地形法线方向与正y轴方向的关系,计算将树叶平行于y轴的向量旋转到与地形法线平行时,其绕x轴和绕z轴旋转分别所需要的旋转量。
85.具体的做法是,首先计算单位长度的法线在x轴平面以及z轴平面的投影。由于需要投影的平面是水平平面,投影过程可以简略为直接取用原向量的x轴分量(即第一分量数据)和z轴分量(即第二分量数据)。由于所引用的法线向量是单位长度,其在x轴上的分量,正好等于其需要绕z轴旋转的角度的sin值。同理,单位法线向量投影的z轴分量的长度也正好等于其需要绕x轴旋转角度的sin值。通过计算这两个分量的asin(sin函数的反函数)即可获得叶片所需的绕x轴旋转度数(即第一坐标轴旋转度数)和绕z轴旋转度数(即第二坐标轴旋转度数)。然后叶片的贴地角度确定时,会获取一个围绕y轴旋转的随机度数(即预设第三坐标轴旋转度数)。将上述得到的围绕x轴旋转的角度、围绕z轴旋转的角度、围绕y轴旋转的随机度数等旋转分量,合并成一个vector3,这个vector3即是叶片按照yxz顺序旋转的欧拉角度,其中,按照yxz顺序旋转是指,按照先转y轴,第二转x轴,最后转z轴的方式旋转最后得到的欧拉角度。
86.需要说明的是,由于粒子引擎默认的欧拉角度是按照zxy顺序的欧拉角度,因此需要将上述中得到的、按照yxz顺序的欧拉角度转换成四元数,然后再换算为按照zxy顺序的欧拉角度。
87.步骤206:根据所述动作调整数据对所述初始移动对象的当前移动动作进行调整,
获得目标移动对象。
88.当前移动动作可以理解为该初始移动对象当前在目标区域内进行移动的动作,包括但不限于下落动作,奔跑动作,行走动作等。
89.该目标移动对象可以理解为移动动作被调整的对象。
90.具体地,所述根据所述动作调整数据对所述初始移动对象的当前移动动作进行调整,包括:
91.基于所述第一坐标轴旋转度数,对所述初始移动对象在第一坐标轴的当前移动动作进行调整;
92.基于所述第二坐标轴旋转度数,对所述初始移动对象在第二坐标轴的当前移动动作进行调整;
93.基于所述预设第三坐标轴旋转度数,对所述初始移动对象在第三坐标轴的当前移动动作进行调整。
94.沿用上例,在获得针对落叶的移动角度进行选择的欧拉角度之后,根据落叶必须围绕x轴的旋转角度,对落叶沿着x轴进行旋转;根据落叶必须围绕z轴的旋转角度,对落叶沿着z轴进行旋转,根据落叶必须围绕y轴的旋转角度,对落叶沿着y轴进行旋转,从而获得与地面角度贴合的树叶。
95.进一步的,所述初始移动对象为初始下落物体,所述当前移动动作为当前下落动作,所述目标移动对象为目标下落物体;
96.相应的,所述根据所述动作调整数据对所述初始移动对象的当前移动动作进行调整,获得目标移动对象,包括:
97.根据所述动作调整数据对所述初始下落物体的当前下落动作进行调整,获得目标下落物体。
98.其中,该初始下落物体可以理解为目标区域中进行下落的物体,例如,游戏模型,树叶粒子、雪花粒子,或者需要下落的虚拟现实物体(如虚拟树叶、虚拟雨滴)等等;该目标下落物体可以理解为更改过下落动作的物体。例如,更改过下落角度从而与地面贴合的树叶粒子。
99.沿用上例,在获得针对落叶的移动角度进行选择的欧拉角度之后,根据欧拉角度对树叶的移动动作角度就那些调整,从而获得与地面角度贴合的树叶,从而提高游戏场景的真实性,提高游戏玩家的体验。
100.需要进一步说的是,本说明书提供的对象处理方法是将生成的粒子(如落叶粒子、雪花粒子)按照随机位置或指定位置的方式,将其散落在游戏场景的地面。而在将粒子散落在地面的过程中,需要对粒子的位置进行初始化,以粒子为落叶粒子为例,可以在游戏地图中划出一块矩形区域作为散落区域,也即是目标区域,树叶会落在该矩形区域中。超出矩形区域的树叶可以不显示。具体的,设置一块矩形区域(如长方形)。参见图3,图3是本说明书一个实施例提供的一种对象处理方法中目标区域的示意图;这块矩形区域需要能在地形模型上存在投影。针对按照随机位置进行散落的方式,可以将确定矩形区域中心点的位置分别长宽,得到四个坐标位置,这四个点分别是矩形区域的四个角。通过用四个角的坐标设置叶片生成区域的最大值和最小值,然后生成随机位置。每个叶片都用不同的随机值,从而实现随机散落。针对按照指定位置进行散落的方式,也称为格点生成方式,可以将矩形区域中
设置的网格的行数h和列数c,用粒子的编号i进行计算。用编号i值分别对行数h和列数c进行求商d和求余r的操作(只取整数部分);然后,将d(i)/h[小数]的结果从0-1的区间重映射到矩形的宽度范围,将r(1)/c的结果从0-1的区间重映射到矩形的长度范围,这个结果即是格点生成方式所求得的叶片位置。但是,该格点生成方式通过格点生成的粒子间距均等,在开发过程中,格点生成方案可以更容易控制粒子所在位置,便于在特殊地形上进行调试。
[0101]
此外,本说明书提供的对象处理方法,还可以在指定的范围内生成粒子,也即是,根据实际应用的需要,在地图中划出一块不规则的区域,粒子会落在该区域中,超出区域的粒子可以不显示)。具体的,使用一张和地图同等大小的mask图设置叶片的生成范围,在地形图上需要铺树叶的区域勾勒出区域,并填充白色;剩下的区域留黑。之后将会用树叶的坐标在xz平面的投影采样mask图片,然后根据采集到像素的亮度,决定树叶粒子是否保留。白色区域的树叶被保留,黑色区域的树叶则不显示。
[0102]
在本说明书提供的一实施例中,当目标移动对象与地面的高度过近时,为了避免穿模的情况发生,会停止移动该目标移动对象,具体的,所述根据所述动作调整数据对所述初始移动对象的当前移动动作进行调整,获得目标移动对象之后,还包括:
[0103]
确定所述目标移动对象在所述目标区域进行移动的当前高度,在确定所述当前高度满足预设停止条件的情况下,停止所述目标移动对象在所述目标区域进行移动。
[0104]
其中,预设停止条件可以理解为表征该初始移动对象可以停止移动的条件。
[0105]
沿用上例,树叶粒子在游戏地图中进行飘落的过程中,会读取当前地图的地形高度图,并将其映射成世界空间位置;然后计算世界空间位置与树叶自身高度位置之间的高度差;在该高度差值满足预设停止条件的情况下,则停止该树叶粒子进行移动,保存与地面贴合的状态。
[0106]
进一步地,所述确定所述当前高度满足预设停止条件,包括:
[0107]
确定所述目标移动对象在所述目标区域进行移动的当前高度,与所述目标区域的地面高度之间的高度差值;
[0108]
在所述第二高度差值满足第二预设差值范围的情况下,确定所述当前高度满足预设停止条件。
[0109]
沿用上例,树叶粒子在游戏地图中进行飘落的过程中,会读取当前地图的地形高度图,并将其映射成世界空间位置;然后计算世界空间位置与树叶自身高度位置之间的高度差,树叶粒子距离地面高度差值小于地面临界(如0.01厘米)时,将其状态更新为贴地,将其高度设置为地面高度,并停止移动,从而避免穿模的问题发生。
[0110]
在本说明书提供的一实施例中,在目标移动对象停止移动后,当目标区域中的其他对象与目标移动对象进行交互时,例如触碰、踢飞等交互操作,则会触发目标移动对象再次移动。例如,在叶片踢飞效果交互方案中,会绑定visualeffectgraph系统外的一个transform(即交互对象),作为可以与树叶产生交互的主角,当叶子为贴地状态时,当模型(游戏主角)距离叶子的距离,达到预设距离差值的情况下,根据主角的移动方向和随机设置的强度数值,为叶子确定一个位移速度,从而达到踢飞叶子的效果,使叶子状态变为浮空,从而使游戏场景更加真实。具体的,所述停止所述目标移动对象在所述目标区域进行移动之后,还包括:
[0111]
确定移动触发对象在所述目标区域进行移动的当前位置,与所述目标移动对象在
所述目标区域的当前位置之间的距离差值,其中,所述移动触发对象触发所述目标移动对象进行移动;
[0112]
在所述距离差值满足预设移动触发条件的情况下,基于所述移动触发对象的当前移动状态,确定所述目标移动对象的对象移动数据;
[0113]
基于所述对象移动数据,在所述目标区域内移动所述目标移动对象。
[0114]
其中,移动触发对象可以理解为用于触发该目标移动对象再次进行移动的对象,该移动触发对象可以为目标区域内进行移动的模型,例如,游戏角色,游戏动物等。
[0115]
该对象移动数据可以理解为该目标移动对象再次进行移动所需要的数据,包括但不限于移动方向数据和对象移速数据等。
[0116]
该预设移动触发条件可以根据实际应用场景进行设置,例如,当该距离差值小于预设阈值的情况下,则确定该距离差值满足预设移动触发条件。
[0117]
移动触发对象的当前移动状态可以理解为移动触发对象的移动方向、移动速度等数据。
[0118]
沿用上例,在实际应用中,树叶粒子的控制单元会挂载一个主角对象,并且传入主角的位置信息。然后根据预先设置的响应半径参数,当树叶粒子的位置与主角位置之间的距离差小于响应半径,那么叶片将受到影响,然后根据游戏主角自身的移动方向、移动速度等数据,计算获得该树叶的移动数据,从而基于该移动数据将树叶按照特定速度向特定方向移动,实现踢飞效果,提高游戏场景的真实度和玩家的游戏体验。需要说明的是,该距离差值是树叶粒子用自身位置转换到世界参考系,并与主角位置相减获得,这个差值的模即是叶片与主角的距离。
[0119]
进一步地,所述基于所述移动触发对象的当前移动状态,确定所述目标移动对象的对象移动数据,包括:
[0120]
确定所述移动触发对象与所述目标移动对象之间的移动方向数据;
[0121]
基于所述移动方向数据以及预设移速计算参数,计算所述目标移动对象的对象移速数据;
[0122]
将所述移动方向数据以及所述对象移速数据,确定为所述目标移动数据的对象移动数据。
[0123]
其中,移动方向数据可以理解为从移动触发对象的当前位置指向该目标移动对象的一个方向向量。该预设移速计算参数可以理解为一个随机的动量参数,用于计算对象移速数据。
[0124]
沿用上例,在叶片处于贴地状态,且距离主角中心位置小于响应半径的情况下,会触发踢飞树叶的效果:实现该效果需要确定针对该树叶的位移速度和位移方向。而确定位移方向的方式可以为,设置一个方向向量,该方向向量从主角位置指向叶片当前位置,保留这个方向向量的x轴、z轴分量,并设置一个向上的、强度随机的y轴分量。然后,将这个方向向量进行归一化处理,然后与一个随机动量参数相乘,从而得到一个积向量,将该积向量设置为叶片的位移速度。同时将叶片状态更改为浮空状态。后续能够按照位移速度和位移方向将树叶进行移动。
[0125]
在本说明书提供的一实施例中,为了保证目标移动对象与目标位置的地形贴合,更加具有真实性,因此确定该动作调整数据,以及根据动作调整数据对初始移动对象的当
前移动动作进行调整的操作是不断在进行的。因此,可以获得至少两个动作调整数据;基于此,根据所述目标位置的地形数据以及所述初始移动对象进行移动的当前移动数据,确定动作调整数据,包括:
[0126]
将至少两个动作调整数据进行加权平均,获得目标动作调整数据,并基于该目标动作调整数据对初始移动对象的当前移动动作进行调整,获得目标移动数据。
[0127]
沿用上例,对至少两个动作调整数据进行加权平均的过程中,需要重置叶片的年龄为0秒,并根据叶片当前高度与目标位置之间的高度差值,估算其在近地状态的存续时长。然后计算叶片年龄除以上述存续时间的结果。用这个结果(也即是比例)作为权重,将树叶的当前旋转欧拉角度、历史获得的欧拉角度等多个欧拉角度进行加权平均计算。最后,将加权平均后的结果作为最终角度赋予树叶。
[0128]
在实际应用中,还可以在确定树叶处于贴地状态时,读取叶片对应地面位置的法线方向,重新计算z轴、x轴和y轴的欧拉角度,将其直接赋值到树叶,从而获得与地面贴合的树叶。
[0129]
本说明书提供的对象处理方法,通过初始移动对象在目标区域进行移动的当前移动数据,以及该初始移动对象在目标区域中需要移动至的目标位置的地形数据,确定出针对该初始移动对象的动作调整数据,并基于该动作调整数据对该初始移动对象的当前移动动作进行调整,从而获得更为真实的目标移动对象,从而提高游戏的真实度以及游戏玩家的游戏体验。
[0130]
下述结合附图4,以本说明书提供的对象处理方法在可交互的场景落叶特效的应用为例,对所述对象处理方法进行进一步说明。其中,图4示出了本说明书一个实施例提供的一种对象处理方法的处理过程流程图,具体包括以下步骤。
[0131]
步骤402:生成树叶粒子,并确定该树叶粒子的飘落区域。
[0132]
其中,该树叶粒子可以为上述初始移动对象,该飘落区域可以为上述目标区域。
[0133]
需要说明的是,在落地区域较大的情况下,为了节省性能消耗,可以将落地区域切分成多个小块区域,并设置小块区域在地形的相对位置,供脚本开关部分粒子。
[0134]
具体的,本说明书提供的对象处理方法,能够生成树叶粒子,并对叶片位置进行初始化,从而让树叶粒子在游戏地图中设定的矩形飘落区域内散落。该位置初始化方式包括随机位置以及指定位置,具体参见上述实施例中对应的内容。
[0135]
此外,还可以在指定的范围生成叶片,也即是,通过读取一张mask图,决定叶子生成的范围,具体参见上述实施例中对应的内容。
[0136]
需要说明的是,本说明书提供的对象处理方法,会根据树叶粒子的当前状态决定树叶的表现,比如,粒子为浮空状态时,会随机旋转翻飞,并获得重力加速度;粒子为近地状态时,不再翻飞,角度逐渐向根据地形法线算出的欧拉角旋转;粒子落地时(即处于贴地状态时),运动速度和角速度归零。粒子为交互状态时,获得一个y轴向上,x轴、z轴平面向外的动量。
[0137]
步骤404:在确定树叶粒子的当前状态为近地状态的情况下,确定落叶粒子的落点位置。
[0138]
其中,该落点位置为上述实施例中的目标位置。
[0139]
具体的,通过树叶粒子的控制单元读取地形高度图,并将其映射成世界空间位置,
将地形高度与树叶自身高度比较并区分状态;在确定树叶为近地状态时,获取叶片在当前位置向地面投影的坐标,即落点位置。
[0140]
步骤406:确定落叶粒子的落点位置对应的法线方向。
[0141]
具体的,树叶粒子的控制单元用落点位置的坐标采样地形图的法线贴图,基于读取的地形法线图,获取对应落点位置的法线方向。
[0142]
步骤408:基于法线方向与落叶粒子的当前角度,计算落叶粒子的欧拉角度。
[0143]
具体的,根据法线方向与正y轴方向的关系,推断出叶片从初始角度转换到贴地角度,所必须做出的围绕x轴旋转的角度,与围绕z轴旋转的角度;获取一个预设的围绕y轴旋转的随机度数。将三者作为树叶粒子自身贴地时应有的欧拉角度。
[0144]
步骤410:基于欧拉角度达到对落叶粒子的下落动作角度进行旋转调整的目的。
[0145]
具体的,上述欧拉角需要按照先围绕y轴旋转,再围绕x轴旋转,最后按照z轴旋转的顺序,经历3次旋转,才能使叶片贴地,其他旋转顺序将导致最终的旋转角不符合计算预期。但visualeffectgraph中支持的旋转顺序并非yxz,而是zxy。需要将步骤408的结果yxz欧拉角转换成四元数,然后从四元数转换回zxy旋转顺序的另一个欧拉角,以求叶片旋转后达到目标贴地状态。该结果欧拉角设置为叶片的最终角度即可达到对落叶粒子的下落动作角度进行旋转调整的目的。
[0146]
步骤412:在确定树叶粒子的当前状态为贴地状态的情况下,停止树叶粒子的移动。
[0147]
步骤414:当前确定游戏主角与贴地状态下的落叶粒子之间的距离,小于响应半径的情况下,计算该落叶粒子的位移方向和位移速度。
[0148]
步骤416:按照位移方向和位移速度,将树叶粒子进行移动。
[0149]
基于上述步骤,可以避免现有visualeffectgraph的物理模拟能力较弱,时间、空间的粒度都很大等问题,具体参见图5,图5是本说明书一个实施例提供的现有树叶模拟的示意图,根据图5可知,现有技术在进行树叶模拟的过程中,会造成的诸如叶片穿模掉落、不能贴地等问题。本说明书提供的对象处理方法,则提供了一种适应大量粒子模拟,且不依赖时间粒度的物理模拟系统;参见图6,图6是本说明书一个实施例提供的一种对象处理方法中进行树叶模拟的示意图。基于图6可知,本说明书提供的对象处理方法,克服了上述叶片穿模掉落、不能贴地等问题,提高了物理模拟的真实性和玩家的游戏体验。
[0150]
与上述方法实施例相对应,本说明书还提供了对象处理装置实施例,图7示出了本说明书一个实施例提供的一种对象处理装置的结构示意图。如图7所示,该装置包括:
[0151]
位置确定模块702,被配置为确定初始移动对象在目标区域进行移动的当前位置,并根据所述当前位置从所述目标区域中确定所述初始移动对象进行移动的目标位置;
[0152]
数据确定模块704,被配置为根据所述目标位置的地形数据以及所述初始移动对象进行移动的当前移动数据,确定动作调整数据;
[0153]
动作调整模块706,被配置为根据所述动作调整数据对所述初始移动对象的当前移动动作进行调整,获得目标移动对象。
[0154]
可选地,所述地形数据为地形角度数据,所述当前移动数据为当前移动角度数据;
[0155]
相应的,所述数据确定模块704,还被配置为:
[0156]
确定所述目标位置的所述地形角度数据,以及所述初始移动对象进行移动的所述
当前移动角度数据;
[0157]
基于所述地形角度数据以及所述当前移动角度数据,确定动作调整角度数据。
[0158]
可选地,所述数据确定模块704,还被配置为:
[0159]
确定所述地形角度数据与所述当前移动角度数据之间的旋转度数,基于所述旋转度数确定动作调整角度数据。
[0160]
可选地,所述数据确定模块704,还被配置为:
[0161]
根据所述当前移动角度数据,确定第一坐标轴平面以及第二坐标轴平面;
[0162]
确定所述地形角度数据在所述第一坐标轴平面的第一分量数据,以及在所述第二坐标轴平面的第二分量数据;
[0163]
基于所述第一分量数据以及第一坐标轴计算第一坐标轴旋转度数,并基于所述第二分量数据以及第二坐标轴计算第二坐标轴旋转度数;
[0164]
获取所述初始移动对象对应的预设第三坐标轴旋转度数;
[0165]
将所述第一坐标轴旋转度数、所述第二坐标轴旋转度数以及所述预设第三坐标轴旋转度数,确定为所述初始移动对象的旋转度数。
[0166]
可选地,所述动作调整模块706,还被配置为:
[0167]
基于所述第一坐标轴旋转度数,对所述初始移动对象在第一坐标轴的当前移动动作进行调整;
[0168]
基于所述第二坐标轴旋转度数,对所述初始移动对象在第二坐标轴的当前移动动作进行调整;
[0169]
基于所述预设第三坐标轴旋转度数,对所述初始移动对象在第三坐标轴的当前移动动作进行调整。
[0170]
可选地,所述初始移动对象为初始下落物体,所述当前移动动作为当前下落动作,所述目标移动对象为目标下落物体;
[0171]
相应的,所述动作调整模块706,还被配置为:
[0172]
根据所述动作调整数据对所述初始下落物体的当前下落动作进行调整,获得目标下落物体。
[0173]
可选地,所述位置确定模块702,还被配置为:
[0174]
获取初始移动对象在目标区域进行移动的当前状态数据;
[0175]
在确定所述当前状态数据满足动作调整条件的情况下,确定所述初始移动对象在所述目标区域进行移动的当前位置,并根据所述当前位置从所述目标区域中确定所述初始移动对象进行移动的目标位置。
[0176]
可选地,所述位置确定模块702,还被配置为:
[0177]
确定所述初始移动对象在所述目标区域进行移动的当前高度,与所述目标位置的地面高度之间的第一高度差值;
[0178]
在所述第一高度差值满足第一预设差值范围的情况下,确定所述当前状态数据满足动作调整条件。
[0179]
可选地,所述对象处理装置,还包括停止移动模块,被配置为:
[0180]
确定所述目标移动对象在所述目标区域进行移动的当前高度,在确定所述当前高度满足预设停止条件的情况下,停止所述目标移动对象在所述目标区域进行移动。
[0181]
可选地,所述停止移动模块,还被配置为:
[0182]
确定所述目标移动对象在所述目标区域进行移动的当前高度,与所述目标区域的地面高度之间的高度差值;
[0183]
在所述第二高度差值满足第二预设差值范围的情况下,确定所述当前高度满足预设停止条件。
[0184]
可选地,所述对象处理装置,还包括触发移动模块,被配置为:
[0185]
确定移动触发对象在所述目标区域进行移动的当前位置,与所述目标移动对象在所述目标区域的当前位置之间的距离差值,其中,所述移动触发对象触发所述目标移动对象进行移动;
[0186]
在所述距离差值满足预设移动触发条件的情况下,基于所述移动触发对象的当前移动状态,确定所述目标移动对象的对象移动数据;
[0187]
基于所述对象移动数据,在所述目标区域内移动所述目标移动对象。
[0188]
可选地,所述触发移动模块,还被配置为:
[0189]
确定所述移动触发对象与所述目标移动对象之间的移动方向数据;
[0190]
基于所述移动方向数据以及预设移速计算参数,计算所述目标移动对象的对象移速数据;
[0191]
将所述移动方向数据以及所述对象移速数据,确定为所述目标移动数据的对象移动数据。
[0192]
本说明书提供的对象处理装置,通过初始移动对象在目标区域进行移动的当前移动数据,以及该初始移动对象在目标区域中需要移动至的目标位置的地形数据,确定出针对该初始移动对象的动作调整数据,并基于该动作调整数据对该初始移动对象的当前移动动作进行调整,从而获得更为真实的目标移动对象,从而提高游戏的真实度以及游戏玩家的游戏体验。
[0193]
上述为本实施例的一种对象处理装置的示意性方案。需要说明的是,该对象处理装置的技术方案与上述的对象处理方法的技术方案属于同一构思,对象处理装置的技术方案未详细描述的细节内容,均可以参见上述对象处理方法的技术方案的描述。
[0194]
图8示出了根据本说明书一个实施例提供的一种计算设备800的结构框图。该计算设备800的部件包括但不限于存储器810和处理器820。处理器820与存储器810通过总线830相连接,数据库850用于保存数据。
[0195]
计算设备800还包括接入设备840,接入设备840使得计算设备800能够经由一个或多个网络860通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备840可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
[0196]
在本说明书的一个实施例中,计算设备800的上述部件以及图8中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图8所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
[0197]
计算设备800可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备800还可以是移动式或静止式的服务器。
[0198]
其中,处理器820用于执行如下计算机可执行指令,该计算机可执行指令被处理器820执行时实现上述对象处理方法的步骤。
[0199]
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的对象处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述对象处理方法的技术方案的描述。
[0200]
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述对象处理方法的步骤。
[0201]
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的对象处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述对象处理方法的技术方案的描述。
[0202]
本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述对象处理方法的步骤。
[0203]
上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的对象处理方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述对象处理方法的技术方案的描述。
[0204]
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0205]
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0206]
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
[0207]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0208]
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。