首页 > 运动玩具 专利正文
虚拟对象的运动方法、装置、设备、存储介质及程序产品与流程

时间:2022-02-24 阅读: 作者:专利查询

虚拟对象的运动方法、装置、设备、存储介质及程序产品与流程

1.本技术涉及计算机应用领域中的渲染技术,尤其涉及一种虚拟对象的运动方法、装置、设备、存储介质及程序产品。


背景技术:

2.美术位移文件是指虚拟场景中的虚拟对象进行位移更新的数据源;在虚拟场景中,通常通过动态获得的移动目的地和移动缩放距离,并结合美术位移文件渲染虚拟对象的运动。然而,虚拟对象在结合美术位移文件进行运动时,一次位移更新的跨度较大,通过扫掠检测来确定的更新位置的有效性较低;比如,在虚拟对象运动至更新位置的过程中,常常存在虚拟对象跨越了不可跨越的虚拟障碍物的情况,导致虚拟对象的运动效果较差。


技术实现要素:

3.本技术实施例提供一种虚拟对象的运动方法、装置、设备、计算机可读存储介质及计算机程序产品,能够提升虚拟对象的运动效果。
4.本技术实施例的技术方案是这样实现的:
5.本技术实施例提供一种虚拟对象的运动方法,包括:
6.获取运动起始时间对应的运动起始位置和运动结束时间;
7.对所述运动起始时间和所述运动结束时间之间的偏移量进行切分,得到m个子偏移量,其中,m为大于1的正整数;
8.基于所述运动起始位置和第1个所述子偏移量确定第1个初始位置,并对第1个所述初始位置进行扫掠检测,得到第1个子位置;
9.通过迭代i执行以下处理,其中,2≤i≤m,且i为单调递增的整数变量:
10.基于第i-1个所述子位置和第i个所述子偏移量确定第i个所述初始位置,并对第i个所述初始位置进行扫掠检测,确定第i个所述子位置;
11.基于迭代i获得的m个所述子位置确定虚拟对象的运动轨迹,并基于所述运动轨迹控制所述虚拟对象在所述运动起始时间和所述运动结束时间之间进行运动。
12.本技术实施例提供一种虚拟对象的运动装置,包括:
13.信息获取模块,用于获取运动起始时间对应的运动起始位置和运动结束时间;
14.位移切分模块,用于对所述运动起始时间和所述运动结束时间之间的偏移量进行切分,得到m个子偏移量,其中,m为大于1的正整数;
15.扫掠检测模块,用于基于所述运动起始位置和第1个所述子偏移量确定第1个初始位置,并对第1个所述初始位置进行扫掠检测,得到第1个子位置;
16.检测迭代模块,用于通过迭代i执行以下处理,其中,2≤i≤m,且i为单调递增的整数变量:基于第i-1个所述子位置和第i个所述子偏移量确定第i个所述初始位置,并对第i个所述初始位置进行扫掠检测,确定第i个所述子位置;
17.对象运动模块,用于基于迭代i获得的m个所述子位置确定虚拟对象的运动轨迹,
并基于所述运动轨迹控制所述虚拟对象在所述运动起始时间和所述运动结束时间之间进行运动。
18.在本技术实施例中,所述信息获取模块,还用于获取上次位移更新时间和目标时间;基于指定帧,对所述上次位移更新时间和所述目标时间之间的时间段进行切分,得到n个子时间段对应的n个开始时间和n个结束时间,其中,n为大于1的正整数;将第j个所述开始时间确定为所述运动起始时间,其中,1≤j≤n,且j为单调递增的整数变量;将第j个所述结束时间确定为所述运动结束时间;将第j个所述开始时间对应的位置,确定为所述运动起始位置。
19.在本技术实施例中,所述扫掠检测包括边缘检测和碰撞检测中的至少一种,其中,所述边缘检测用于确定虚拟对象在虚拟运动面上的位置是否是所述虚拟运动面的边缘处的位置,所述碰撞检测用于确定更新至的位置过程中是否包括虚拟障碍物。
20.在本技术实施例中,当所述扫掠检测包括所述边缘检测时,所述扫掠检测模块,还用于基于第i-1个所述子位置对第i个所述初始位置进行贴地检测,得到第i个初始贴地位置;在限制高度内,当第i个所述初始贴地位置的检测射线与所述虚拟运动面相交时,将第i个所述初始贴地位置确定为第i个所述子位置;在所述限制高度内,当第i个所述初始贴地位置的检测射线与所述虚拟运动面不相交时,基于第i-1个所述子位置对第i个所述初始贴地位置进行拉回处理,得到第i个所述子位置。
21.在本技术实施例中,所述扫掠检测模块,还用于确定第i个所述初始贴地位置对应的第i个边缘检测起点;在第i个所述边缘检测起点的高度对应的平面上,获取第i个边缘检测起点与第i-1个所述子位置之间的边缘线,并获取所述边缘线与虚拟运动体之间的交点位置,得到边缘点位置;组合贴地检测的起始高度和所述边缘点位置,得到贴地检测新起点;基于所述贴地检测新起点和指定高度对第i个所述初始贴地位置进行拉回处理,确定第i个所述子位置。
22.在本技术实施例中,所述扫掠检测模块,还用于基于第i-1个所述子位置对第i个所述初始贴地位置进行拉回处理,得到包括第i-1个所述子位置的第i个所述子位置。
23.在本技术实施例中,所述扫掠检测模块,还用于获取第i个运动方向;当i小于m时,在第i+1个所述运动方向与第i个所述运动方向之间的方向差小于指定方向时,将第i个所述子位置确定为第i+1个所述子位置。
24.在本技术实施例中,当所述扫掠检测包括所述碰撞检测时,所述扫掠检测模块,还用于基于第i-1个所述子位置和第i个所述初始位置进行碰撞检测,得到碰撞检测结果;当所述碰撞检测结果为第i-1个所述子位置和第i个所述初始位置之间不包括所述虚拟障碍物时,将第i个所述初始位置确定为到第i个所述子位置;当所述碰撞检测结果为第i-1个所述子位置和第i个所述初始位置之间包括所述虚拟障碍物时,基于第i-1个所述子位置对第i个所述初始位置进行拉回处理,得到第i个所述子位置。
25.在本技术实施例中,所述扫掠检测模块,还用于当位移切分步长小于指定步长时,基于第i-1个所述子位置对第i个所述初始位置进行拉回处理,得到包括第i-1个所述子位置的第i个所述子位置;当所述位移切分步长大于等于所述指定步长时,基于第i-1个所述子位置确定所述虚拟障碍物对应的拉回位置,并将所述拉回位置确定为第i个所述子位置。
26.在本技术实施例中,所述信息获取模块,还用于将所述上次位移更新时间确定为
所述运动起始时间;将所述上次位移更新时间对应的位置确定为所述运动起始位置;将所述目标时间确定为所述运动结束时间。
27.在本技术实施例中,所述位移切分模块,还用于基于所述虚拟对象的尺寸,确定位移切分步长;基于所述位移切分步长,对所述运动起始时间和所述运动结束时间之间的偏移量进行切分,得到m个所述子偏移量。
28.本技术实施例提供一种虚拟对象的运动设备,包括:
29.存储器,用于存储可执行指令;
30.处理器,用于执行所述存储器中存储的可执行指令时,实现本技术实施例提供的虚拟对象的运动方法。
31.本技术实施例提供一种计算机可读存储介质,存储有可执行指令,所述可执行指令用于被处理器执行时,实现本技术实施例提供的虚拟对象的运动方法。
32.本技术实施例提供一种计算机程序产品,包括计算机程序或指令,所述计算机程序或指令被处理器执行时,实现本技术实施例提供的虚拟对象的运动方法。
33.本技术实施例至少具有以下有益效果:在运动起始时间和运动结束时间之间控制虚拟对象进行运动时,所获得的运动轨迹中的每个子位置,均是通过对更新位移的偏移量进行切分,并对每个切分的子偏移量所确定出的初始位置进行扫掠检测获得的;如此,实现了细粒度的扫掠检测,通过位移切分降低了地形对更新的位置的有效性的影响,使得每个子位置的有效性较高;从而能够提升虚拟对象的运动效果。
附图说明
34.图1是本技术实施例提供的一种示例性的虚拟对象更新位移的示意图;
35.图2是本技术实施例提供的虚拟对象的运动系统的架构示意图;
36.图3是本技术实施例提供的图2中的服务器的组成结构示意图;
37.图4是本技术实施例提供的虚拟对象的运动方法的流程示意图一;
38.图5是本技术实施例提供的时间切法的流程示意图;
39.图6是本技术实施例提供的虚拟对象的运动方法的流程示意图二;
40.图7是本技术实施例提供的虚拟对象的运动方法的流程示意图三;
41.图8是本技术实施例提供的一种示例性的虚拟对象的运动方法的流程示意图;
42.图9是本技术实施例提供的一种示例性的确定美术位移当前状态的流程示意图;
43.图10是本技术实施例提供的一种示例性的贴地计算的示意图;
44.图11是本技术实施例提供的一种示例性的贴地检测的示意图;
45.图12是本技术实施例提供的一种示例性的碰撞检测的示意图。
具体实施方式
46.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术作进一步地详细描述,所描述的实施例不应视为对本技术的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。
47.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突
的情况下相互结合。
48.除非另有定义,本技术实施例所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本技术实施例中所使用的术语只是为了描述本技术实施例的目的,不是旨在限制本技术。
49.对本技术实施例进行进一步详细说明之前,对本技术实施例中涉及的名词和术语进行说明,本技术实施例中涉及的名词和术语适用于如下的解释。
50.1)虚拟场景:利用设备输出的区别于现实世界的场景,通过裸眼或设备的辅助能够形成对虚拟场景的视觉感知;例如,通过显示屏幕输出的二维影像,通过立体投影、虚拟现实和增强现实技术等立体显示技术来输出的三维影像;此外,还可以通过各种可能的硬件形成听觉感知、触觉感知、嗅觉感知和运动感知等各种模拟现实世界的感知。
51.还需要说明的是,应用程序在终端设备上运行时显示(或提供)的虚拟场景,可以是对真实世界的仿真环境,也可以是半仿真半虚构的虚拟环境,还可以是纯虚构的虚拟环境。虚拟场景可以是二维虚拟场景、2.5维虚拟场景或者三维虚拟场景中的任意一种,本技术实施例对虚拟场景的维度不加以限定。例如,虚拟场景可以包括天空、陆地、海洋等,该陆地可以包括沙漠、城市和建筑等环境元素,虚拟对象可以在用户或ai的控制下,在该虚拟场景中进行移动或执行其他操作(如攻击操作)。
52.2)客户端:电子设备中运行的用于提供各种服务的应用程序;例如,游戏客户端和视频播放客户端等。
53.3)虚拟对象:虚拟场景中可以进行交互的各种人和物的形象,或在虚拟场景中的可活动对象。该可活动对象可以是虚拟人物、虚拟动物和动漫人物等,比如,在虚拟场景中显示的人物、动物、植物、油桶、墙壁、石块和建筑等。该虚拟对象可以是该虚拟场景中的一个虚拟的用于代表用户的虚拟形象。虚拟场景中可以包括多个虚拟对象,每个虚拟对象在虚拟场景中具有自身的形状和体积,占据虚拟场景中的一部分空间。在本技术实施例中,涉及的虚拟对象能够运动的虚拟对象。
54.4)美术位移文件:是基于根骨骼位置和朝向变化确定虚拟对象运动的数据源;美术位移文件中包括虚拟对象运动的多帧数据,其中,每帧数据包括虚拟对象的根骨骼相对于坐标原点的位置偏移等信息,还包括了位移过程中是否进行碰撞检测和贴地检测的信息,以及最大爬坡角度等。
55.一般来说,当虚拟场景中的虚拟对象进行运行时,每次位移更新的过程通常是基于上次更新时间和当前时间确定对应的偏移量,并基于确定的偏移量确定新位置,接着对新位置进行贴地处理,得到更新后的位置。然而,所获得的更新后的位置相对于虚拟运动面过于突出,即为超出了虚拟运动面的边缘;因此,在渲染虚拟对象的运动的过程中,常常存在不能在虚拟运动面的边缘及时停止的情况,导致确定的新位置的准确性和有效性较低。
56.示例性地,参见图1,图1是本技术实施例提供的一种示例性的虚拟对象更新位移的示意图;如图1所示,虚拟对象1-1在虚拟运动面上运动;当虚拟对象1-1从位置1-2处开始更新位移时,确定的新位置可能为位置1-3,此时,虚拟对象1-1完成位移更新之后,将会在位置1-3处卡住。而当虚拟对象1-1从位置1-2处开始更新位移时,确定的新位置可能为位置1-4,此时,虚拟对象1-1完成更新时,在位置1-4处处于浮空的状态,导致虚拟对象1-1下落。所以,虚拟对象在更新位移的过程中,所确定的新位置的准确性和有效性较低,导致渲染出
的虚拟对象的运动效果较差。
57.基于此,本技术实施例提供一种虚拟对象的运动方法、装置、设备、计算机可读存储介质及计算机程序产品,能够提升渲染出的虚拟对象的运动效果。下面说明本技术实施例提供的虚拟对象的运动设备(以下简称为运动设备)的示例性应用,本技术实施例提供的运动设备可以实施为智能手机、智能手表、笔记本电脑、平板电脑、台式计算机、智能电视、机顶盒、智能车载设备、便携式音乐播放器、个人数字助理、专用消息设备、便携式游戏设备和智能音箱等各种类型的终端,也可以实施为服务器。下面,将说明设备实施为服务器时的示例性应用。
58.参见图2,图2是本技术实施例提供的虚拟对象的运动系统的架构示意图;如图2所示,为支撑一个虚拟对象的运动应用,在虚拟对象的运动系统100中,终端400(示例性示出了终端400-1和终端400-2)通过网络300连接服务器200(称为运动设备),网络300可以是广域网或者局域网,又或者是二者的组合。另外,该虚拟对象的运动系统100中还包括数据库500,用于向服务器200提供数据支持;并且,图1中示出的为数据库500独立于服务器200的一种情况,此外,数据库500还可以集成在服务器200中,本技术实施例对此不作限定。
59.终端400,用于通过网络300接收服务器200发送的运动轨迹,并基于运动轨迹控制虚拟对象在运动起始时间和运动结束时间之间进行运动。
60.服务器200,用于获取运动起始时间对应的运动起始位置和运动结束时间;对运动起始时间和运动结束时间之间的偏移量进行切分,得到m个子偏移量,其中,m为大于1的正整数;基于运动起始位置和第1个子偏移量确定第1个初始位置,并对第1个初始位置进行扫掠检测,得到第1个子位置;通过迭代i执行以下处理,其中,2≤i≤m,且i为单调递增的整数变量:基于第i-1个子位置和第i个子偏移量确定第i个初始位置,并对第i个初始位置进行扫掠检测,确定第i个子位置;基于迭代i获得的m个子位置确定虚拟对象的运动轨迹,并通过网络300向终端400发送运动轨迹。
61.在一些实施例中,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(cdn,content delivery network)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端400可以是智能手机、智能手表、笔记本电脑、平板电脑、台式计算机、智能电视、机顶盒、智能车载设备、便携式音乐播放器、个人数字助理、专用消息设备、便携式游戏设备和智能音箱等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本技术实施例中不作限制。
62.参见图3,图3是本技术实施例提供的图2中的服务器的组成结构示意图,图3所示的服务器200包括:至少一个处理器210、存储器250和至少一个网络接口220。服务器200中的各个组件通过总线系统240耦合在一起。可理解,总线系统240用于实现这些组件之间的连接通信。总线系统240除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图3中将各种总线都标为总线系统240。
63.处理器210可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(dsp,digital signal processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理
器等。
64.在一些实施例中,服务器200还包括用户接口230;其中,用户接口230包括使得能够呈现媒体内容的一个或多个输出装置231,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口230还包括一个或多个输入装置232,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
65.存储器250可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器250可选地包括在物理位置上远离处理器210的一个或多个存储设备。
66.存储器250包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(rom,read only memory),易失性存储器可以是随机存取存储器(ram,random access memory)。本技术实施例描述的存储器250旨在包括任意适合类型的存储器。
67.在一些实施例中,存储器250能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
68.操作系统251,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
69.网络通信模块252,用于经由一个或多个(有线或无线)网络接口220到达其他计算机设备,示例性的网络接口220包括:蓝牙、无线相容性认证(wi-fi)和通用串行总线(usb,universal serial bus)等;
70.呈现模块253,用于经由一个或多个与用户接口230相关联的输出装置231(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
71.输入处理模块254,用于对一个或多个来自一个或多个输入装置232之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
72.在本技术的一些实施例中,本技术实施例提供的虚拟对象的运动装置可以采用软件方式实现,图3示出了存储在存储器250中的虚拟对象的运动装置255,其可以是程序和插件等形式的软件,包括以下软件模块:信息获取模块2551、位移切分模块2552、扫掠检测模块2553、检测迭代模块2554和对象运动模块2555,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
73.在一些实施例中,本技术实施例提供的虚拟对象的运动装置可以采用硬件方式实现,作为示例,本技术实施例提供的虚拟对象的运动装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本技术实施例提供的虚拟对象的运动方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(asic,application specific integrated circuit)、dsp、可编程逻辑器件(pld,programmable logic device)、复杂可编程逻辑器件(cpld,complex programmable logic device)、现场可编程门阵列(fpga,field-programmable gate array)或其他电子元件。
74.在一些实施例中,终端或服务器可以通过运行计算机程序来实现本技术实施例提供的虚拟对象的运动方法。举例来说,计算机程序可以是操作系统中的原生程序或软件模块;可以是本地(native)应用程序(app,application),即需要在操作系统中安装才能运行
的程序,如游戏app、直播app或者即时通信app;也可以是小程序,即只需要下载到浏览器环境中就可以运行的程序;还可以是能够嵌入至任意app中的小程序。总而言之,上述计算机程序可以是任意形式的应用程序、模块或插件。
75.下面,将结合本技术实施例提供的运动设备的示例性应用和实施,说明本技术实施例提供的虚拟对象的运动方法;这里,虚拟对象的运动方法的执行主体为运动设备。
76.参见图4,图4是本技术实施例提供的虚拟对象的运动方法的流程示意图一,将结合图4示出的步骤进行说明。
77.s401、获取运动起始时间对应的运动起始位置和运动结束时间。
78.在本技术实施例中,当运动设备对虚拟场景中的虚拟对象的运动位移进行更新时,获取当前位移更新的起止时间,也就获得了运动起始时间和运动结束时间;其中,运动起始时间对应的虚拟对象的运动状态中,包括了虚拟对象在运动起始时间对应的运动起始位置。
79.需要说明的是,运动起始时间和运动结束时间,可以是虚拟对象进行一次位移更新的起止时间,还可以是通过切分虚拟对象进行一次位移更新的起止时间获得的起止时间,等等,本技术实施例对此不作限定。虚拟对象是指虚拟场景中能够移动的对象,比如,虚拟人物、虚拟动物和虚拟道具,等等。运动起始位置为虚拟对象在运动起始时间的位置。
80.s402、对运动起始时间和运动结束时间之间的偏移量进行切分,得到m个子偏移量。
81.在本技术实施例中,运动设备基于获得的运动起始时间和运动结束时间,从预设的动画文件(比如,美术文件)中获取对应的偏移量,并对获得的运动起始时间和运动结束时间之间的偏移量进行切分,来获得多个子偏移量;其中,所获得的多个子偏移量即为m个子偏移量,m为大于1的正整数,比如,2,5,等等。
82.需要说明的是,运动设备对偏移量进行切分时,可以是按预设步长进行均匀切分,该预设步长可以是固定不变的,也可以是基于相关信息设置的(即为可变的),以及该相关信息可以是虚拟对象的尺寸,也可以是虚拟运动面的平整度,等等,本技术实施例对此不作限定;其中,虚拟运动面为虚拟场景中用于承载虚拟对象的运动的对象,比如,地面,水面,屋顶面,墙顶面,等等。另外,预设的动画文件是运动设备对虚拟对象进行位移更新的数据源,包括每帧数据对应的位置偏移信息;并且,运动起始时间和运动终止时间分别与预设的动画文件中的帧时间对应,这里,运动起始时间和运动终止时间之间包括至少一个帧时间。
83.s403、基于运动起始位置和第1个子偏移量确定第1个初始位置,并对第1个初始位置进行扫掠检测,得到第1个子位置。
84.在本技术实施例中,运动设备获得了m个子偏移量之后,由于m个子偏移量是基于时间的先后顺序的子偏移量序列,因此,不同的子偏移量用于确定运动起始时间与运动结束时间之间的不同的运动位置,即为子位置;且第1个子位置的获取是基于运动起始位置和第1个子偏移量的计算结果确定出来的。这里,运动设备先基于运动起始位置和第1个子偏移量进行位置的计算,得到计算结果,即为第1个初始位置;由于第1个初始位置对应在虚拟运动面上的位置并不一定能够承载得住虚拟对象,也就是说,第1个初始位置可能是导致虚拟对象进入异常状态(比如,卡住、浮空下掉、翻越了不可翻越的虚拟障碍物等)的位置;因此,运动设备通过扫掠检测对第1个初始位置的有效性进行确定,并获得一个有效的第1个
子位置。
85.需要说明的是,扫掠检测是指检测位置的有效性的处理;其中,位置的有效性是指一个位置导致虚拟对象进入异常状态的结果,当有效性为有效时,该位置处的虚拟对象不会进入异常状态;而当有效性为无效时,该位置处的虚拟对象进入异常状态。
86.在本技术实施例中,运动设备通过迭代i执行s404,以获取第1个子位置后的其他子位置;其中,2≤i≤m,且i为单调递增的整数变量,并且,i的迭代步长为1,以及,i为偏移量的顺序。
87.s404、基于第i-1个子位置和第i个子偏移量确定第i个初始位置,并对第i个初始位置进行扫掠检测,确定第i个子位置。
88.在本技术实施例中,当2≤i≤m时,每个子位置(即为第i个子位置)的获取是基于前一个子位置(即为第i-1个子位置)和每个子位置对应的偏移量(即为第i个子偏移量)的计算结果确定出来的。这里,运动设备先基于第i-1个子位置和第i个子偏移量进行位置的计算,得到计算结果,即为第i个初始位置;由于第i个初始位置对应在虚拟运动面上的位置并不一定能够承载得住虚拟对象,也就是说,第i个初始位置可能是导致虚拟对象进入异常状态的位置;因此,运动设备通过扫掠检测对第i个初始位置的有效性进行确定,并获得一个有效的第i个子位置。
89.需要说明的是,s403中描述的为运动设备获取第1个子位置的过程,s404中描述的为运动设备获得第2个子位置至第m个子位置的过程;s403和s404所不同的是,s403中,第1个子位置的获取是依据运动起始位置和第1个子偏移量确定并扫掠检测出的;s404中,第2个子位置至第m个子位置中的每个子位置是依据前一个子位置和第i个子偏移量确定并扫掠检测出的。
90.s405、基于迭代i获得的m个子位置确定虚拟对象的运动轨迹,并基于运动轨迹控件虚拟对象在运动起始时间和运动结束时间之间进行运动。
91.在本技术实施例中,运动设备通过s403获取第1个子位置,并通过s404的迭代获得第2个子位置至第m个子位置;从而,在完成i的迭代时,运动设备也就获得了m个子位置,即为第1个子位置至第m个子位置。这里,运动设备获得的m个子位置即为虚拟对象在运动起始时间和运动结束时间之间的时间段对应的运动轨迹,从而,基于该运动轨迹就能够渲染出虚拟对象在运动起始时间和运动结束时间之间的运动。
92.需要说明的是,当运动设备实施为服务器(比如,图2中的服务器200)时,将虚拟对象在运动起始时间和运动结束时间之间运动轨迹发送至渲染设备(比如,图2中的终端400),以在渲染设备上基于运动轨迹渲染虚拟对象在运动起始时间和运动结束时间之间的运动。
93.可以理解的是,在运动起始时间和运动结束时间之间控制虚拟对象进行运动时,所获得的运动轨迹中的每个子位置,均是通过对更新位移的偏移量进行切分,并对每个切分的子偏移量所确定出的初始位置进行扫掠检测获得的,如此,实现了细粒度的扫掠检测,通过位移切分降低了地形对更新位置的有效性的影响,使得每个子位置的有效性较高;从而能够提升渲染出的虚拟对象的运动效果。
94.参见图5,图5是本技术实施例提供的时间切法的流程示意图;如图5所示,在本技术实施例中,图4中的s401可通过s4011至s4015实现;也就是说,运动设备获取运动起始时
间对应的运动起始位置和运动结束时间,包括s4011至s4015,下面对各步骤分别进行说明。
95.s4011、获取上次位移更新时间和目标时间。
96.在本技术实施例中,当运动设备对虚拟对象进行位移更新时,从位移更新请求中能够获取到上次运动时间和截止时间对应的逻辑帧时间;其中,上次位移更新时间为上一逻辑帧时间,目标时间为当前逻辑帧时间;从而,运动设备获得的位移更新请求用于请求虚拟对象在上次位移更新时间和目标时间之间的运动信息。
97.示例性地,位移更新请求为请求获取虚拟人物在2秒内向前翻滚2米的运动数据时,虚拟人物即为虚拟对象,上次运动时间和截止时间之间的时长即为2秒;如果帧率为0.5秒/帧,当上次位移更新时间为0.5秒时,目标时间为1秒。
98.s4012、基于指定帧,对上次位移更新时间和目标时间之间的时间段进行切分,得到n个子时间段对应的n个开始时间和n个结束时间。
99.在本技术实施例中,运动设备基于预设的动画文件中的帧时间间隔,确定上次位移更新时间和目标时间之间的时间段的时间切分单位。
100.需要说明的是,指定帧即基于预设的动画文件中的帧时间间隔确定的时间切分单位,比如为,1个帧时间间隔,2个帧时间间隔,等等。这里,运动设备采用指定帧对上次位移更新时间和目标时间之间的时间段进行切分时,会切分出n个子时间段,并且,n个子时间段中的每个子时间段包括1个开始时间和1个结束时间,从而,n个子时间段对应的n个开始时间和n个结束时间;其中,n为大于1的正整数。
101.示例性地,当上次位移更新时间为0.5秒,目标时间为1秒时,对应的时间段为0.5秒;此时,如果指定帧为1帧时间间隔,为0.03秒;则能够获得16个子时间段,即n为16。
102.s4013、将第j个开始时间确定为运动起始时间。
103.s4014、将第j个结束时间确定为运动结束时间。
104.s4015、将第j个开始时间对应的位置,确定为运动起始位置。
105.需要说明的是,运动设备针对每个子时间段对虚拟对象进行位移更新;从而,运动设备遍历n个子时间段,针对每个遍历到的子时间段,这里称为第j个子时间段,获取第j个子时间段对应的第j个开始时间和第j个结束时间,并将第j个开始时间确定为运动起始时间,将第j个结束时间确定为运动结束时间,以及将第j个开始时间对应的位置,确定为运动起始位置,以通过s401至s405描述的过程确定每个子时间段对应的运动轨迹;从而,运动设备能够获得n个运动轨迹,以基于n个运动轨迹渲染虚拟对象在上次位移更新时间和目标时间之间的运动。其中,1≤j≤n,且j为单调递增的整数变量,并且,j的迭代步长为1,以及,j为子时间段的顺序。
106.可以理解的是,由于运动设备获取到的上次位移更新时间和目标时间之间的时间段是对虚拟对象的运动进行渲染时的帧时间,而不同的运动设备对应不同的渲染性能,从而,不同的运动设备的进行渲染时的帧率不同,故,运动设备获得的上次位移更新时间和目标时间之间的时间段是不同的;比如,低帧率时,时间段可能为0.5秒,高帧率时,时间段可能为0.03秒;因此,基于不同的时间段确定出的运动位置也不同,低帧率的情况下可能一次位移更新就完成了整个美术位移,如此,性能较差的客户端a看一个玩家c(即为虚拟对象)翻滚过了一个障碍物,但性能较好的客户端b看玩家c无法翻越过障碍物,而实际上玩家c是无法翻越过障碍物的,最终导致客户端a上渲染出玩家c被拉扯的效果,虚拟对象的运动效
果较差。这里,通过基于指定帧对时间段进行时间切分,即使获得的时间段不同,由于时间切分单位都是指定帧,因此,位移更新的过程是一致的,从而,能够提升不同运动设备对应的n的运动轨迹的一致性,提升虚拟对象的运动效果。
107.在本技术实施例中,s4011之后还可以包括直接将上次位移更新时间和目标时间,确定为运动设备确定虚拟对象的运动的起止时间的过程;也就是说,运动设备获取上次位移更新时间和目标时间之后,该虚拟对象的运动方法还包括:运动设备将上次位移更新时间确定为运动起始时间;将上次位移更新时间对应的位置确定为运动起始位置;将目标时间确定为运动结束时间。
108.需要说明的是,运动设备可以通过对获得的上次位移更新时间和目标时间之间的时间段进行时间切分,并把切分出的一个子时间段对应的起止时间作为确定虚拟对象的运动轨迹的起止时间;还可以直接将获得的上次位移更新时间和目标时间作为确定虚拟对象的运动轨迹的起止时间;本技术实施例对此不作限定。
109.在本技术实施例中,扫掠检测包括边缘检测和碰撞检测中的至少一种,其中,边缘检测用于确定虚拟对象在虚拟运动面上的位置是否是虚拟运动面的边缘处的位置,碰撞检测用于确定更新的位置过程中是否包括虚拟障碍物。
110.可以理解的是,运动设备通过对初始位置进行边缘检测,能够及时在虚拟运动面的边缘处停止;通过对初始位置进行碰撞检测,能够及时在虚拟障碍物处停止;如此,虚拟对象的运动是正常的,不会出现翻越无法翻越的地形的异常情况;从而,能够提升虚拟对象的运动的准确性。
111.在本技术实施例中,当扫掠检测包括边缘检测时,参见图6,图6是本技术实施例提供的虚拟对象的运动方法的流程示意图二;如图6所示,图4中的s404可通过s4041至s4043实现;也就是说,运动设备对第i个初始位置进行扫掠检测,确定第i个子位置,包括s4041至s4043,下面对各步骤分别进行说明。
112.s4041、基于第i-1个子位置对第i个初始位置进行贴地检测,得到第i个初始贴地位置。
113.在本技术实施例中,运动设备对第i个初始位置进行贴地检测,以在虚拟运动面上获得与第i个初始位置对应的位置;这里,将获得的与第i个初始位置对应的虚拟运动面上的位置称为第i个初始贴地位置。
114.s4042、在限制高度内,当第i个初始贴地位置的检测射线与虚拟运动面相交时,将第i个初始贴地位置确定为第i个子位置。
115.需要说明的是,由于第i个初始贴地位置可能是在虚拟运动面的边缘的位置,因此,运动设备继续对第i个初始贴地位置进行检测,以确定第i个初始贴地位置是否是虚拟运动面的边缘处的位置。这里,由于预设的动画文件中包括最大爬坡角度,因此,运动设备能够基于该最大爬坡角度确定出限制高度;或者,预设的动画文件中包括限制高度。接着,运动设备判断限制高度内,基于第i个初始贴地位置所确定的检测射线是否与虚拟运动面相交;当运动设备确定在限制高度内第i个初始贴地位置的检测射线与虚拟运动面相交时,表明第i个初始贴地位置不是虚拟运动面的边缘处的位置,从而,此时,第i个初始贴地位置即为虚拟对象对应于第i个子偏移量的第i个子位置。
116.还需要说明的是,第i个初始贴地位置的检测射线可以是以虚拟对象的中心或中
心等其他节点向虚拟运动面作垂直射线获得的。
117.s4043、在限制高度内,当第i个初始贴地位置的检测射线与虚拟运动面不相交时,基于第i-1个子位置对第i个初始贴地位置进行拉回处理,得到第i个子位置。
118.需要说明的是,当运动设备确定在限制高度内第i个初始贴地位置的检测射线与虚拟运动面不相交时,表明第i个初始贴地位置是虚拟运动面的边缘处的位置,此次子偏移量的更新将使得虚拟对象的位置超出虚拟运动面的边缘;从而,此时,运动设备将第i个初始贴地位置向第i-1个子位置进行拉回处理,也就获得了虚拟对象对应于第i个子偏移量的第i个子位置。
119.需要说明的是,s4032和s4033是两个并列的处理步骤,当执行s4032时不再执行s4033,当执行s4033时不再执行s4032。
120.可以理解的是,运动设备通过对第i个初始贴地位置进行边缘检测,并在确定第i个初始贴地位置是虚拟运动面的边缘处的位置时,将第i个初始贴地位置向第i-1个子位置进行拉回处理,以获得位于虚拟运动面上的位置,使得虚拟对象在运动时能够在虚拟运动面的边缘及时停止,因此,能够提升虚拟对象运动的效果。
121.在本技术实施例中,s4043中运动设备基于第i-1个子位置对第i个初始贴地位置进行拉回处理,得到第i个子位置,包括s40431至s40434(图中未示出),下面对各步骤分别进行说明。
122.s40431、确定第i个初始贴地位置对应的第i个边缘检测起点。
123.在本技术实施例中,运动设备在确定第i个初始贴地位置为虚拟运动面的边缘处的位置时,以第i个初始贴地位置的中心向垂直于虚拟运动面的方向偏移至最低点,也就获得了第i个边缘检测起点。
124.s40432、在第i个边缘检测起点的高度对应的平面上,获取第i个边缘检测起点与第i-1个子位置之间的边缘线,并获取边缘线与虚拟运动体之间的交点位置,得到边缘点位置。
125.在本技术实施例中,运动设备以第i个边缘检测起点为起点,以平行于虚拟运动面的平面方向上,向第i-1个子位置作射线,也就获得了第i个边缘检测起点与第i-1个子位置之间的边缘线;其中,在离第i个初始贴地位置的最近处,确定边缘线与虚拟运动体之间的交点位置,也就获得了边缘点位置。
126.s40433、组合贴地检测的起始高度和边缘点位置,得到贴地检测新起点。
127.需要说明的是,运动设备获得的边缘点位置不一定是虚拟运动体上承载虚拟对象的有效位置,从而,运动设备将s4041中进行贴地检测的起始位置的高度(即为起始高度)作为边缘点位置的高度,也就获得了贴地检测新起点。
128.s40434、基于贴地检测新起点和指定高度对第i个初始贴地位置进行拉回处理,确定第i个子位置。
129.在本技术实施例中,运动设备基于贴地检测新起点和指定高度,确定贴地检测新终点,将贴地检测新起点与贴地检测新终点之间与虚拟运动面的接触位置确定为第i个子位置,实现对第i个初始贴地位置向第i-1个子位置的拉回处理。
130.可以理解的是,运动设备通过获取第i个初始贴地位置对应的边缘点位置,对第i个初始贴地位置实现了最小化的拉回处理,提升了获得了第i个子位置的准确度,进而能够
提升虚拟对象的运动效果。
131.在本技术实施例中,s4043中运动设备基于第i-1个子位置对第i个初始贴地位置进行拉回处理,得到第i个子位置,包括s40435(图中未示出),下面对该步骤进行说明。
132.s40435、基于第i-1个子位置对第i个初始贴地位置进行拉回处理,得到包括第i-1个子位置的第i个子位置。
133.需要说明的是,运动设备可以通过确定边缘点位置的方式对第i个初始贴地位置进行拉回处理,还可以直接将第i-1个子位置确定为第i个子位置,以实现对第i个初始贴地位置的拉回处理,本技术实施例对此不作限定。
134.在本技术实施例中,当位移切分步长大于等于指定步长时,可以通过确定边缘点位置的方式对第i个初始贴地位置进行拉回处理;而当位移切分步长小于指定步长时,可以直接将第i-1个子位置确定为第i个子位置,以实现对第i个初始贴地位置的拉回处理。当然,
135.在本技术实施例中,s4043中运动设备基于第i-1个子位置对第i个初始贴地位置进行拉回处理,得到第i个子位置之后,该虚拟对象的运动方法还包括s4044和s4045(图中未示出)。
136.s4044、获取第i个运动方向。
137.需要说明的是,运动设备获得的第i个运动方向是指第i个子位置对应的运动方向。
138.s4045、当i小于m,且第i+1个运动方向与第i个运动方向之间的方向差小于指定方向时,将第i个子位置确定为第i+1个子位置。
139.需要说明的是,当i等于m时,表明第i个子偏移量是最后一个子偏移量,此时,运动设备不再继续确定虚拟对象的后续运动的位置;而当i小于m时,表明第i个子偏移量不是最后一个子偏移量,此时,由于运动设备在确定第i个子位置时已经确定到达了虚拟运动面的边缘,如果此时第i+1个运动方向与第i个运动方向之间的方向差小于指定方向,则运动设备将第i个子位置确定为第i+1个子位置。其中,第i+1个运动方向与第i个运动方向之间的方向差小于指定方向,表明虚拟对象后续运动的方向未变;从而,即使i小于m,而如果方向差大于等于指定方向,仍然基于后续的子偏移量确定对应的子位置。
140.在本技术实施例中,当运动结束时间不是目标时间时,当i等于m,且第i+1个运动方向与第i个运动方向之间的方向差小于指定方向时,运动设备也可以将第i个子位置确定为虚拟对象的后续运动的位置。
141.可以理解的是,通过对第i个运动方向和第i+1个运动方向之间的方向差进行大小的判断,并确定虚拟对象达到虚拟运动面的边缘且后续的运动方向不变时,将当前确定的子位置确定为虚拟对象后续运动的子位置,能够降低运动设备确定虚拟对象后续运动的位置的资源消耗。
142.在本技术实施例中,当扫掠检测包括碰撞检测时,参见图7,图7是本技术实施例提供的虚拟对象的运动方法的流程示意图三;如图7所示,图4中的s404可通过s4046至s4048实现;也就是说,运动设备对第i个初始位置进行扫掠检测,确定第i个子位置,包括s4046至s4048,下面对各步骤分别进行说明。
143.s4046、基于第i-1个子位置和第i个初始位置进行碰撞检测,得到碰撞检测结果。
144.需要说明的是,运动设备在第i-1个子位置和第i个初始位置之间进行碰撞检测,也就获得了碰撞检测结果;其中,碰撞检测结果是在第i-1个子位置和第i个初始位置之间是否存在虚拟障碍物的结果。
145.s4047、当碰撞检测结果为第i-1个子位置和第i个初始位置之间不包括虚拟障碍物时,将第i个初始位置确定为第i个子位置。
146.需要说明的是,当碰撞检测结果为第i-1个子位置和第i个初始位置之间不包括虚拟障碍物时,表明虚拟对象能够从第i-1个子位置运动至第i个初始位置,此时,运动设备将第i个初始位置确定为第i个子位置。
147.s4048、当碰撞检测结果为第i-1个子位置和第i个初始位置之间包括虚拟障碍物时,基于第i-1个子位置对第i个初始位置进行拉回处理,得到第i个子位置。
148.需要说明的是,当碰撞检测结果为第i-1个子位置和第i个初始位置之间包括虚拟障碍物时,表明虚拟对象无法从第i-1个子位置通过翻越障碍物运动至第i个初始位置,此时,运动设备将第i个初始位置向第i-1个子位置做拉回处理,以获得第i个子位置。
149.可以理解的是,运动设备通过进行碰撞检测,并在确定第i-1个子位置和第i个初始位置之间包括虚拟障碍物时,基于第i-1个子位置对第i个初始位置进行拉回处理,使得所获得的第i个子位置的有效性较高,从而能够提升虚拟对象的运动效果。
150.在本技术实施例中,s4048中运动设备基于第i-1个子位置对第i个初始位置进行拉回处理,得到第i个子位置,包括s40481和s40482(图中未示出),下面对各步骤分别进行说明。
151.s40481、当位移切分步长小于指定步长时,基于第i-1个子位置对第i个初始位置进行拉回处理,得到包括第i-1个子位置的第i个子位置。
152.s40482、当位移切分步长大于等于指定步长时,基于第i-1个子位置确定虚拟障碍物对应的拉回位置,并将拉回位置确定为第i个子位置。
153.需要说明的是,运动设备可以将第i-1个子位置作为第i个子位置,以实现基于第i-1个子位置对第i个初始位置进行的拉回处理;还可以将虚拟障碍物处的位置(比如,虚拟障碍物处离第i-1个子位置最近的位置)作为第i个子位置,以实现基于第i-1个子位置对第i个初始位置进行的拉回处理;又可以将第i-1个子位置与第i个初始位置之间的任一位置确定为第i个子位置,以实现基于第i-1个子位置对第i个初始位置进行的拉回处理;等等,本技术实施例对此不作限定。
154.在本技术实施例中,当位移切分步长小于指定步长时,运动设备可以将第i-1个子位置作为第i个子位置;而当位移切分步长大于等于指定步长时,将虚拟障碍物处的位置作为第i个子位置。
155.在本技术实施例中,运动设备在进行扫掠检测时,可以先进行边缘检测再进行碰撞检测。
156.在本技术实施例中,s403中的扫掠检测与s4041至s4043、以及s4046至s4048描述的过程类似,所不同的是处理对象不同,s403的处理对象是第1个初始位置,s404的处理对象是第i个初始位置。
157.在本技术实施例中,s402可通过s4021和s4022(图中未示出)实现;也就是说,运动设备对运动起始时间和运动结束时间之间的偏移量进行切分,得到m个子偏移量,包括
s4021和s4022,下面对各步骤分别进行说明。
158.s4021、基于虚拟对象的尺寸,确定位移切分步长。
159.s4022、基于位移切分步长,对运动起始时间和运动结束时间之间的偏移量进行切分,得到m个子偏移量。
160.需要说明的是,运动设备确定的用于切分偏移量的位移切分步长可以是基于虚拟对象的尺寸确定的,比如,虚拟对象的外接圆半径,虚拟对象在虚拟运动面上的长度的一半,等等。
161.下面,将说明本技术实施例在一个实际的应用场景中的示例性应用。该示例性应用描述了虚拟人物(称为虚拟对象)在2秒内完成2米翻滚的运动过程。
162.参见图8,图8是本技术实施例提供的一种示例性的虚拟对象的运动方法的流程示意图;如图8所示,该示例性的虚拟对象的运动方法包括s801至s804,并且,该示例性的虚拟对象的运动方法的执行主体是服务器(称为运动设备),下面结合图8对各步骤分别进行说明。
163.s801、获取美术位移初始状态(称为上次位移更新状态)。
164.s802、获取当前渲染帧时间(delta time,称为目标时间)。
165.需要说明的是,上层调用时能够获取到美术位移初始状态和实际渲染的逻辑帧,其中,实际渲染的逻辑帧即为当前渲染帧时间。
166.s803、基于美术位移初始状态、当前渲染帧时间和美术位移文件(称为预设的动画文件),确定美术位移当前状态。
167.需要说明的是,服务器基于美术位移文件中的帧时间对当前渲染帧时间对应的时间段进行时间切分,得到多个固定时间片(称为n个子时间段);并从美术位移文件中获取每个固定时间片对应的偏移量,基于固定步长(称为位移切分步长)对偏移量进行切分,得到m个子偏移量;通过遍历m个子偏移量,对每个子偏移量确定出的新位置(初始位置)进行扫掠检测,以获得最终新位置(子位置),从而得到m个最终新位置。这里,虚拟人物在当前渲染帧时间内的一个子时间段中,基于m个最终新位置进行翻滚运动,并最终到达目标时间对应的最终新位置处,也就确定出了美术位移当前状态。
168.s804、判断当前渲染帧时间是否到达最大时长;如果是则结束;如果否则将美术位移当前状态确定为美术位移初始状态继续执行s802。
169.需要说明的是,最大时长时翻滚的用时时长:2秒。
170.下面,对s803对应的处理过程进行详细说明。
171.参见图9,图9是本技术实施例提供的一种示例性的确定美术位移当前状态的流程示意图;如图9所示,该示例性的确定美术位移当前状态的流程包括s901至s904,并且,该示例性的确定美术位移当前状态的流程的执行主体是服务器,下面结合图9示出的步骤分别进行说明。
172.s901、基于美术位移文件中的t帧(称为指定帧)对当前渲染帧时间对应的时间段进行切分,得到目标帧数(即为n)。
173.s902、将当前帧推进t帧。
174.s903、将美术位移更新至当前帧。
175.需要说明的是,服务器在将美术位移更新至当前帧时,对t帧(即为固定时间片)对
应的美术位移偏移量按照扫掠体半径(即为固定步长)进行切分,并对切分出的每个子偏移量确定的新位置进行贴地计算(称为边缘检测,包括贴地检测和边缘拉回)和碰撞检测(贴地计算和碰撞检测统称为扫掠检测),来判断新位置的合法性;其中碰撞检测指的是一次美术位移迭代(或遍历)中老位置(称为运动起始位置,或第i-1个子位置)到新位置之间的胶囊体扫掠,而贴地计算是指通过地形边缘检测来先碰撞检测一步确定新位置的有效性。
176.示例性地,参见图10,图10是本技术实施例提供的一种示例性的贴地计算的示意图;如图10所示,该示例性的贴地计算的过程包括s1001至s1004,下面结合图10示出的步骤进行说明。
177.s1001、针对球体(即为虚拟人物)的老位置10-1,基于固定步长确定新位置,并基于美术位移文件中配置的最大爬坡角度确定球体扫掠的起点10-2和终点,进而基于起点10-2和终点之间的球体的扫掠检测确定限制高度内的球体扫掠碰撞点,从而确定球体的位置10-3(称为初始贴地位置)。
178.s1002、在位置10-3处向下用射线10-4检测是否有满足限制高度的球体落脚点,如果有则说明球体继续移动后不会遇到地形边缘;如果没有则说明球体在此次美术位移迭代中的位置超出了地形边缘,需要进行位置拉回(即为边缘拉回,又称为拉回处理)。
179.需要说明的是,如果每次美术位移迭代的步长(即为固定步长)比较小(即小于指定步长)的话,在位置10-3处向下用射线10-4检测没有满足限制高度的球体落脚点的时候,服务器可以将新位置无效化,即可以不进行拉回处理。
180.s1003、以位置10-3处球体的中心点向下偏移胶囊体半径后作为起点10-5(称为边缘检测起点),并以球体的老位置10-1作为终点(与起点10-5同高度),进行射线(称为边缘线)检测10-6,找到边缘点10-7(称为边缘点位置)。
181.s1004、由于有地势差的地形边缘处,边缘点不一定是有效的球体落脚点;从而将边缘点的2维坐标与起点10-2的高度组合得到再次球体扫掠的起点10-8,基于起点10-8和限制高度再次进行球体扫掠,得到的扫掠结果即为有效的球体位置(称为子位置)。
182.需要说明的是,服务器可以记录此次美术位移迭代的运动方向,在下次美术位移迭代中如果运动方向与此次美术位移迭代的运动方向接近(即为方向差小于指定方向),由于此次球体的运动已到达地形边缘,因此则跳过扫掠检测,将此次美术位移迭代的位置确定为下次美术位移迭代的最终新位置;从而,在边缘地形处的重复位移不会消耗额外的性能。
183.其中,贴地检测的过程参见图11,图11是本技术实施例提供的一种示例性的贴地检测的示意图;如图11所示,胶囊体初始位于老位置11-1处,基于一次美术位移迭代的偏移量确定新位置,并基于最大爬坡角度11-2对应的限制高度11-3确定胶囊体扫掠的起始位置11-4和终止位置11-5;从而,能够确定贴地计算的扫掠方向11-6,基于通过扫掠方向11-6,在起始位置11-4和终止位置11-5之间进行胶囊体扫掠检测,确定的贴地后的位置即为胶囊体扫掠碰撞点11-7(称为初始贴地位置)。
184.参见图12,图12是本技术实施例提供的一种示例性的碰撞检测的示意图;如图12所示,基于胶囊体的老位置12-1和新位置12-2,确定碰撞检测的扫掠方向12-3;基于扫掠方向12-3,在老位置12-1和新位置12-2之间进行胶囊体的扫掠检测,确定老位置12-1和新位置12-2之间的碰撞属性。这里,当老位置12-1和新位置12-2之间存在虚拟障碍物时,可以将
虚拟障碍物之前的位置(虚拟障碍物离老位置12-1最近的位置)确定为最终新位置,也可以将老位置12-1确定为最终新位置。
185.s904、判断当前帧的帧数是否小于目标帧数;是则继续执行s902,否则表明已完成当前渲染帧时间对应的美术位移的更新,结束处理流程。
186.需要说明的是,服务器在美术位移更新的上层调用和美术位移更新中插入两层循环,即对上层传入的逻辑帧进行时间切分和对每个切分的固定时间片对应的美术位移的偏移量进行位移切分。这里,第一层的时间切分,能够消除帧率对运算结果的影响;也就是说,虽然不同客户端的帧率不同,但均是基于相同美术位移文件中的t帧(比如,可以选择每秒30帧作为切分时间的单位,即为0.03秒)进行的时间切分;其中,如果完成固定时间片的迭代后对应的时间小于美术位移文件对应的整体时长,那么无法塞满一个固定时间片的剩余时间不做处理,留到下次上层调用中再做处理。第二层的位移切分,能够消除地形带来的影响(即为一次迭代的美术位移太长时可能存在跨越非法障碍物的问题),其中,可以选择胶囊体半径作为位移切分的固定步长。
187.可以理解的是,本技术实施例提供的虚拟对象的运动方法,通过对逻辑帧进行时间切分,解决了不同硬件环境下美术位移计算的不一致性问题,保证了在不同设备下的美术位移计算结果都能保持相同。以及通过对每个切分的固定时间片对应的美术位移的偏移量进行位移切分,并对每个子偏移量确定出的初始位置进行扫掠检测,实现对地形边缘处的位置拉回、以及对虚拟障碍物出的位置的拉回,确保了美术位移更新过程中虚拟人物不会超出地形边缘,也不会翻越无法翻越的虚拟障碍物,并且在边缘地形处的重复位移不会消耗额外的性能。
188.下面继续说明本技术实施例提供的虚拟对象的运动装置255的实施为软件模块的示例性结构,在一些实施例中,如图3所示,存储在存储器250的虚拟对象的运动装置255中的软件模块可以包括:
189.信息获取模块2551,用于获取运动起始时间对应的运动起始位置和运动结束时间;
190.位移切分模块2552,用于对所述运动起始时间和所述运动结束时间之间的偏移量进行切分,得到m个子偏移量,其中,m为大于1的正整数;
191.扫掠检测模块2553,用于基于所述运动起始位置和第1个所述子偏移量确定第1个初始位置,并对第1个所述初始位置进行扫掠检测,得到第1个子位置;
192.检测迭代模块2554,用于通过迭代i执行以下处理,其中,2≤i≤m,且i为单调递增的整数变量:基于第i-1个所述子位置和第i个所述子偏移量确定第i个所述初始位置,并对第i个所述初始位置进行扫掠检测,确定第i个所述子位置;
193.对象运动模块2555,用于基于迭代i获得的m个所述子位置确定虚拟对象的运动轨迹,并基于所述运动轨迹控制所述虚拟对象在所述运动起始时间和所述运动结束时间之间进行运动。
194.在本技术实施例中,所述信息获取模块2551,还用于获取上次位移更新时间和目标时间;基于指定帧,对所述上次位移更新时间和所述目标时间之间的时间段进行切分,得到n个子时间段对应的n个开始时间和n个结束时间,其中,n为大于1的正整数;将第j个所述开始时间确定为所述运动起始时间,其中,1≤j≤n,且j为单调递增的整数变量;将第j个所
述结束时间确定为所述运动结束时间;将第j个所述开始时间对应的位置,确定为所述运动起始位置。
195.在本技术实施例中,所述扫掠检测包括边缘检测和碰撞检测中的至少一种,其中,所述边缘检测用于确定虚拟对象在虚拟运动面上的位置是否是所述虚拟运动面的边缘处的位置,所述碰撞检测用于确定更新至的位置过程中是否包括虚拟障碍物。
196.在本技术实施例中,当所述扫掠检测包括所述边缘检测时,所述扫掠检测模块2553,还用于基于第i-1个所述子位置对第i个所述初始位置进行贴地检测,得到第i个初始贴地位置;在限制高度内,当第i个所述初始贴地位置的检测射线与所述虚拟运动面相交时,将第i个所述初始贴地位置确定为第i个所述子位置;在所述限制高度内,当第i个所述初始贴地位置的检测射线与所述虚拟运动面不相交时,基于第i-1个所述子位置对第i个所述初始贴地位置进行拉回处理,得到第i个所述子位置。
197.在本技术实施例中,所述扫掠检测模块2553,还用于确定第i个所述初始贴地位置对应的第i个边缘检测起点;在第i个所述边缘检测起点的高度对应的平面上,获取第i个边缘检测起点与第i-1个所述子位置之间的边缘线,并获取所述边缘线与虚拟运动体之间的交点位置,得到边缘点位置;组合贴地检测的起始高度和所述边缘点位置,得到贴地检测新起点;基于所述贴地检测新起点和指定高度对第i个所述初始贴地位置进行拉回处理,确定第i个所述子位置。
198.在本技术实施例中,所述扫掠检测模块2553,还用于基于第i-1个所述子位置对第i个所述初始贴地位置进行拉回处理,得到包括第i-1个所述子位置的第i个所述子位置。
199.在本技术实施例中,所述扫掠检测模块2553,还用于获取第i个运动方向;当i小于m时,在第i+1个所述运动方向与第i个所述运动方向之间的方向差小于指定方向时,将第i个所述子位置确定为第i+1个所述子位置。
200.在本技术实施例中,当所述扫掠检测包括所述碰撞检测时,所述扫掠检测模块2553,还用于基于第i-1个所述子位置和第i个所述初始位置进行碰撞检测,得到碰撞检测结果;当所述碰撞检测结果为第i-1个所述子位置和第i个所述初始位置之间不包括所述虚拟障碍物时,将第i个所述初始位置确定为到第i个所述子位置;当所述碰撞检测结果为第i-1个所述子位置和第i个所述初始位置之间包括所述虚拟障碍物时,基于第i-1个所述子位置对第i个所述初始位置进行拉回处理,得到第i个所述子位置。
201.在本技术实施例中,所述扫掠检测模块2553,还用于当位移切分步长小于指定步长时,基于第i-1个所述子位置对第i个所述初始位置进行拉回处理,得到包括第i-1个所述子位置的第i个所述子位置;当所述位移切分步长大于等于所述指定步长时,基于第i-1个所述子位置确定所述虚拟障碍物对应的拉回位置,并将所述拉回位置确定为第i个所述子位置。
202.在本技术实施例中,所述信息获取模块2551,还用于将所述上次位移更新时间确定为所述运动起始时间;将所述上次位移更新时间对应的位置确定为所述运动起始位置;将所述目标时间确定为所述运动结束时间。
203.在本技术实施例中,所述位移切分模块2552,还用于基于所述虚拟对象的尺寸,确定位移切分步长;基于所述位移切分步长,对所述运动起始时间和所述运动结束时间之间的偏移量进行切分,得到m个所述子偏移量。
204.本技术实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备(称为运动设备)的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本技术实施例上述的虚拟对象的运动方法。
205.本技术实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本技术实施例提供的虚拟对象的运动方法,例如,如图4示出的虚拟对象的运动方法。
206.在本技术的一些实施例中,计算机可读存储介质可以是fram、rom、prom、eprom、eeprom、闪存、磁表面存储器、光盘、或cd-rom等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
207.在本技术的一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
208.作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(html,hyper text markup language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
209.作为示例,可执行指令可被部署为在一个计算机设备上执行(此时,这一个计算机设备即运动设备),或者在位于一个地点的多个计算机设备上执行(此时,位于一个地点的多个计算机设备即运动设备),又或者,在分布在多个地点且通过通信网络互连的多个计算机设备上执行(此时,分布在多个地点且通过通信网络互连的多个计算机设备即运动设备)。
210.综上所述,通过本技术实施例,在运动起始时间和运动结束时间之间控制虚拟对象进行运动时,所获得的运动轨迹中的每个子位置,均是通过对更新位移的偏移量进行切分,并对每个切分的子偏移量所确定出的初始位置进行扫掠检测获得的,如此,实现了细粒度的扫掠检测,通过位移切分降低了地形对更新位置的有效性的影响,使得每个子位置的有效性较高;从而能够提升渲染出的虚拟对象的运动效果。
211.以上所述,仅为本技术的实施例而已,并非用于限定本技术的保护范围。凡在本技术的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本技术的保护范围之内。