CN116208623B - 信息同步方法、装置、引擎服务器及存储介质 - Google Patents

信息同步方法、装置、引擎服务器及存储介质 Download PDF

Info

Publication number
CN116208623B
CN116208623B CN202310490284.6A CN202310490284A CN116208623B CN 116208623 B CN116208623 B CN 116208623B CN 202310490284 A CN202310490284 A CN 202310490284A CN 116208623 B CN116208623 B CN 116208623B
Authority
CN
China
Prior art keywords
information
pose information
virtual object
attribute
serialization
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202310490284.6A
Other languages
English (en)
Other versions
CN116208623A (zh
Inventor
陈枫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202310490284.6A priority Critical patent/CN116208623B/zh
Publication of CN116208623A publication Critical patent/CN116208623A/zh
Application granted granted Critical
Publication of CN116208623B publication Critical patent/CN116208623B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/04Protocols for data compression, e.g. ROHC
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本申请实施例公开了一种信息同步方法、装置、引擎服务器及存储介质,其中方法包括:获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息,确定针对绝对位姿信息采用的序列化机制,所述序列化机制具有如下特性:采用所述序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关;基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息,并采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流,以将所述属性同步数据流传输给相应的客户端。本申请实施例可以减少位姿同步的数据量,从而有效降低带宽成本,提升位姿信息的同步效率。

Description

信息同步方法、装置、引擎服务器及存储介质
技术领域
本申请涉及互联网技术领域,具体涉及通信技术领域,尤其涉及一种信息同步方法、装置、引擎服务器及存储介质。
背景技术
目前,在虚拟场景的显示过程中,虚拟场景对应的引擎服务器和客户端之间会高频地同步虚拟场景中的虚拟对象(Actor)的相关信息。其中,在同步的信息中,虚拟对象的位姿信息占据了较大的比重,其所需的带宽占总带宽的一半左右,甚至更多。研究表明,现有的引擎服务器在信息同步时,是直接将虚拟对象的绝对位姿信息进行序列化处理,从而将绝对位姿信息的序列化结果同步给客户端的,这样的同步方式需消耗大量的带宽,导致同步效率较低。
发明内容
本申请实施例提供了一种信息同步方法、装置、引擎服务器及存储介质,可减少位姿同步的数据量,从而有效降低带宽成本,提升位姿信息的同步效率。
一方面,本申请实施例提供了一种信息同步方法,所述方法包括:
获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息,绝对位姿信息是指未基于参照物所确定出的位姿信息,且位姿信息需通过序列化的方式同步给客户端;
确定针对绝对位姿信息采用的序列化机制,所述序列化机制具有如下特性:采用所述序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关;
基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息;其中,获取到的相对位姿信息用于反映所述虚拟对象在当前时刻的绝对位姿信息与所述虚拟对象在前一时刻的绝对位姿信息之间的差异;
采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流,以将所述属性同步数据流传输给相应的客户端。
另一方面,本申请实施例提供了一种信息同步装置,所述装置包括:
获取单元,用于获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息,绝对位姿信息是指未基于参照物所确定出的位姿信息,且位姿信息需通过序列化的方式同步给客户端;
所述获取单元,还用于确定针对绝对位姿信息采用的序列化机制,所述序列化机制具有如下特性:采用所述序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关;
所述获取单元,还用于基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息;其中,获取到的相对位姿信息用于反映所述虚拟对象在当前时刻的绝对位姿信息与所述虚拟对象在前一时刻的绝对位姿信息之间的差异;
同步单元,用于采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流,以将所述属性同步数据流传输给相应的客户端。
再一方面,本申请实施例提供了一种引擎服务器,所述引擎服务器包括输入接口和输出接口,所述引擎服务器还包括:
处理器,适于实现一条或多条指令;以及,
计算机存储介质,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由所述处理器加载并执行如下步骤:
获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息,绝对位姿信息是指未基于参照物所确定出的位姿信息,且位姿信息需通过序列化的方式同步给客户端;
确定针对绝对位姿信息采用的序列化机制,所述序列化机制具有如下特性:采用所述序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关;
基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息;其中,获取到的相对位姿信息用于反映所述虚拟对象在当前时刻的绝对位姿信息与所述虚拟对象在前一时刻的绝对位姿信息之间的差异;
采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流,以将所述属性同步数据流传输给相应的客户端。
再一方面,本申请实施例提供了一种计算机存储介质,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由处理器加载并执行上述提及的信息同步方法。
再一方面,本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机程序;所述计算机程序被处理器执行时,实现上述所提及的信息同步方法。
本申请实施例可通过对绝对位姿信息所采用的序列化机制进行特性分析,获知序列化机制具有如下特性:采用序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关。从而在获取到虚拟场景中的虚拟对象在当前时刻的绝对位姿信息之后,可通过考虑该序列化机制的特性,获取虚拟对象在当前时刻的相对位姿信息。由于获取到的相对位姿信息用于反映虚拟对象在当前时刻的绝对位姿信息与虚拟对象在前一时刻的绝对位姿信息之间的差异,因此相对位姿信息的数值会比绝对位姿信息的数值小很多,尤其是在相邻两个时刻的绝对位姿信息之间的差异较小时,相对位姿信息的数值可以是一个很小的数值;那么,相对于序列化绝对位姿而言,通过采用序列化机制将相对位姿信息写入属性同步数据流,可以有效减少位姿同步的数据量,从而有效降低带宽成本,提升位姿信息的同步效率。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本申请实施例提供的一种引擎服务器和客户端进行通信的示意图;
图1b是本申请实施例提供的一种序列化机制的序列化格式的示意图;
图1c是本申请实施例提供的一种对虚拟对象的绝对位置和相对位置进行序列化处理所得到的序列化结果的示意图;
图1d是本申请实施例提供的另一种序列化机制的序列化格式的示意图;
图2是本申请实施例提供的一种信息同步方法的流程示意图;
图3是本申请实施例提供的一种引擎服务器获取相对位姿信息时所采用的处理逻辑的示意图;
图4是本申请另一实施例提供的一种信息同步方法的流程示意图;
图5a是本申请实施例提供的一种序列化数据格式的示意图;
图5b是本申请实施例提供的一种历史位姿信息数组的示意图;
图5c是本申请实施例提供的一种引擎服务器和客户端之间的位姿信息同步情况的示意图;
图5d是本申请实施例提供的一种在游戏场景中运用信息同步方法所涉及的处理过程的示意图;
图5e是本申请实施例提供的一种同步相对位姿信息所涉及的处理逻辑的示意图;
图6a是本申请实施例提供的一种测试用例的示意图;
图6b是本申请实施例提供的一种测试结果的示意图;
图6c是本申请实施例提供的另一种测试结果的示意图;
图6d是本申请另一实施例提供的一种测试用例的示意图;
图6e是本申请另一实施例提供的一种测试结果的示意图;
图6f是本申请再一实施例提供的一种测试用例的示意图;
图6g是本申请实施例提供的一种绝对位姿信息对应的统计结果的示意图;
图6h是本申请实施例提供的一种相对位姿信息对应的统计结果的示意图;
图6i是本申请实施例提供的另一种绝对位姿信息对应的统计结果的示意图;
图6j是本申请实施例提供的另一种相对位姿信息对应的统计结果的示意图;
图6k是本申请另一实施例提供的一种统计结果的示意图;
图6l是本申请另一实施例提供的另一种统计结果的示意图;
图7是本申请实施例提供的一种信息同步装置的结构示意图;
图8是本申请实施例提供的一种引擎服务器的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
在本申请实施例中,涉及AI(Artificial Intelligence,人工智能)技术。所谓的AI技术是指:利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统的技术。换句话说,AI是计算机科学的一个综合技术;其主要通过了解智能的实质,生产出一种新的能以人类智能相似的方式做出反应的智能机器,使得智能机器具有感知、推理与决策等多种功能。相应的,AI技术是一门综合学科,涉及领域广泛,其一般可包括程序处理引擎、专用AI芯片,云计算、分布式存储、大数据技术,操作/交互系统以及机电一体化等技术,其既有硬件层面的技术,也有软件层面的技术。
具体的,本申请实施例主要涉及AI技术中的程序处理引擎,所谓的程序处理引擎是指可用于开发应用程序并在应用程序中显示虚拟场景的引擎。例如,当应用程序是图像显示程序时,程序处理引擎可以是图形引擎;又如,当应用程序是游戏程序时,程序处理引擎可以是游戏引擎,如虚幻引擎(Unreal Engine,UE),该虚幻引擎存在多个版本,如UE4(Unreal Engine 4,虚幻引擎的第4个版本),UE5(Unreal Engine 5,虚幻引擎的第5个版本)等。程序处理引擎的服务器可简称引擎服务器,当程序处理引擎是虚幻引擎这一游戏引擎时,引擎服务器可以是UE DS(UE Dedicated Server,UE的专用服务器)。UE DS可用于同步实时性较高的游戏(如FPS(First Person Shooter,第一人称射击)游戏)中的相关信息,且UE DS的默认网络同步帧率是30赫兹(即每秒同步30次),这也是很多线上运营的游戏所采用的默认帧率,竞技类对战游戏甚至采用更高的同步频率,例如通常是60赫兹,甚至是120赫兹。
引擎服务器可提供一个或多个Actor Channel(用于和客户端建立通信连接,以进行信息同步管理的通信通道),并基于各个Actor Channel和相应客户端进行通信,如图1a所示。并且,在引擎服务器采用的属性同步机制中,每个客户端对应的通信通道(或称为连接)会以一定频率收集虚拟场景中的虚拟对象(Actor)发生变化的属性列表,并在引擎服务器对该属性列表进行序列化后,将其同步给客户端。属性列表中可包括Actor的多个属性(如移动属性、样式属性、尺寸属性等),以及Actor在每个属性下的属性信息;在属性同步时,用于同步Actor在移动属性下的属性信息的带宽占据了总带宽的一半左右,甚至更多。其中,Actor在移动属性下的属性信息可以是FRepMovement(一种结构体信息);FRepMovement中用于同步的信息主要包括:绝对位姿信息、角速度、朝向信息以及物理模拟相关的一些标记值。此处提及的绝对位姿信息是指未基于参照物所确定出的位姿信息,位姿信息可包括线性速度(简称速度)和位置信息(简称位置);相应的,绝对位姿信息可包括:绝对速度以及绝对位置;另外,此处提及的朝向信息可包括如下旋转角度:Pitch(俯仰角)、Yaw(偏航角)以及Roll(翻滚角)等。进一步的,FRepMovement中用于同步的各个信息的定义可如下所示:
/绝对速度/
UPROPERTY(Transient)
FVector LinearVelocity;
/角速度/
UPROPERTY(Transient)
FVector AngularVelocity;
/绝对位置/
UPROPERTY(Transient)
FVector Location;
/朝向信息/
UPROPERTY(Transient)
FRotator Rotation;
/虚拟对象是否处在物理模拟中/
UPROPERTY(Transient)
unit8 bRepPhysics:1;
在上述定义中,UPROPERTY是一种宏,其可用于将变量公开到编辑器或蓝图,且其允许变量被复制、被序列化,并可从蓝图中进行访问;Transient可用于指示相应的信息是瞬态的,FVector是一种基于三维向量结构体的序列化机制,FRotator是一种基于旋转角度的序列化机制;LinearVelocity、AngularVelocity、Location以及Rotation均为存储信息的字段。基于此,上述代码中的“FVector LinearVelocity”的含义为:采用FVector对LinearVelocity字段中的绝对速度进行序列化;“FVector AngularVelocity”的含义为:采用FVector这一序列化机制对AngularVelocity字段中的角速度进行序列化;“FVectorLocation”的含义为:采用FVector这一序列化机制对Location字段中的绝对位置进行序列化;“FRotator Rotation”的含义为:采用FRotator这一序列化机制对Rotation字段中的朝向信息进行序列化;“unit8 bRepPhysics:1”的含义为:当虚拟对象处于物理模拟中时,bRepPhysics这一标记的取值为1。
由于同步Actor在移动属性下的属性信息所需的数据量,取决于序列化后所得到的数据的实际大小,而基于上述定义可知,针对虚拟对象在移动属性下的属性信息的序列化操作,主要涉及FVector和FRotator这两个序列化机制。因此,本申请实施例对这两个序列化机制进行了特性分析,从而根据分析出的各序列化机制的特性,对Actor在移动属性下的属性信息的同步方式进行了改进,具体如下:
(1)FVector的序列化格式可以参见图1b所示,其具体可包括如下字段:
Bits字段,用于存储一个数值,存储的数值用于指示X,Y和Z中的绝对值中的最大值所需的比特数,或者程序处理引擎所设定的最大比特数,在默认的厘米精度时,程序处理引擎(如UE)设定的最大比特数可以为24-1=23。X,Y和Z均表示转化为整数的坐标值,其单位为厘米,也可以根据不同的精度要求加以放大,图1b是以Bits字段占用的比特数为5为例进行说明的。
Bias+X字段,用于存储对X执行Bias操作所得到的结果,该Bias+X字段占用的比特数为Bits+2。
Bias+Y字段,用于存储对Y执行Bias操作所得到的结果,该Bias+Y字段占用的比特数为Bits+2。
Bias+Z字段,用于存储对Z执行Bias操作所得到的结果,该Bias+Z字段占用的比特数为Bits+2。
需要说明的是,上述提及的Bias操作可表示为1<<(Bits + 1),其具体可以是一种可将相应数值的二进制中的每位向左移动(Bits + 1)位并在末位补0的操作。另外,Bits表示X,Y和Z中的绝对值中的最大值所需的比特数,其具体公式如下:
Figure SMS_1
。这里MaxBits是额外设定的最大比特数,Clamp是一种将/>
Figure SMS_2
的值映射至1到MaxBits之间的函数,/>
Figure SMS_3
表示对/>
Figure SMS_4
执行向上取整的操作,例如/>
Figure SMS_5
的值为3.1,则
Figure SMS_6
的值为4。
由前述可知:虚拟对象的绝对位置对应于FRepMovement中的Location字段,其是采用FVector进行序列化的;针对绝对位置而言,FVector可主要包含X,Y,Z这三个浮点数字段。并且,从图1b所示的FVector所采用的序列化格式可以看出,在采用FVector对绝对位置进行序列化时,坐标值的绝对值或者说离原点的远近会影响序列化后所得到的数据的数据长度:
1)假设x为1000米以上,例如x=217=131072厘米,并且x的绝对值比y和z的绝对值大,那么对绝对位置进行序列化后所得到的数据的数据长度为62个比特(5 + 19 + 19 +19 = 62)。
2)假设x为10米左右,例如x=210=1024厘米,并且x的绝对值比y和z的绝对值大,那么对绝对位置进行序列化后所得到的数据的数据长度为41个比特(5 + 12 + 12 + 12 =41)。
3)假设x为1米左右,例如x=27=128厘米,并且x的绝对值比y和z的绝对值大,那么对绝对位置进行序列化后所得到的数据的数据长度为32个比特(5 + 9 + 9 + 9 = 32)。
基于此,本申请实施例考虑到相对位置(即相邻两个时刻所采集到的绝对位置之间的差值)的数值,通常比绝对位置的数值小,所以本申请实施例针对位置信息提出了如下构想:在同步位置信息时,可将绝对位置的同步改为相对位置的同步,使得对相对位置进行序列化所得到的数据所需的比特数,比对绝对位置进行序列化所得到的数据所需的比特数少很多,从而实现在不影响移动同步体验的情况下,通过算法的优化极大地降低位置同步的数据量,从而有效地降低了带宽成本。进一步的,为了证明此构想的可行性,本申请实施例还如下测试:
例如,Actor为游戏角色这样的对象,其以普通的速度移动,例如6米/秒,而引擎服务器同步位置的频率为30赫兹,那么Actor在每一帧画面中的位置变化距离在20厘米左右(水平面)。例如采用圆圈表示Actor,那么参见图1c所示:Actor在游戏画面中,从(1000,0,0)移动到(1024,0,0),即移动后的绝对位置为(1024,0,0),相对位置为(24,0,0)。那么,按照上述提及的FVector中的各字段的描述,可根据绝对位置进行如下计算:
Figure SMS_7
,5+(10+2)+(10+2)+(10+2)=41;以及根据相对位置进行如下计算:
Figure SMS_8
,5+(4+2)+(4+2)+(4+2)=23。可见,序列化绝对位置(1024,0,0)所得到的数据需要41个比特,而序列化相对位置(24,0,0)所得到的数据仅需要23个比特。
再如,Actor为汽车这样的物体,其移动速度为120公里/小时,而引擎服务器同步位置的频率为30赫兹,那么Actor在每一帧画面中的位置变化约为111厘米。由于
Figure SMS_9
,因此可计算5+(6+2)+(6+2)+(6+2)=29,即序列化相对位置所得到的数据仅需29个比特。也就是说,此情况下使用相对位置进行同步,其数据仅需29个比特。
综上所述,如果按照本申请实施例所提出的同步相对位置的构想,可以有效减小对位置进行序列化后所得到数据的数据长度,而数据长度与数据量成正相关,因此可知:如果同步相对位置,可以在同步过程中使用较少的数据,其与绝对位置的数值大小无关,可有效降低带宽成本。
应理解的是,由前述可知:虚拟对象的绝对速度对应于FRepMovement中的LinearVelocity字段,其也是采用FVector进行序列化的;那么,与绝对位置类似的,本申请实施例针对速度信息也提出了如下构想:在同步速度信息时,采用相对速度的同步替换绝对速度的同步。因为当Actor朝某个方向移动的时候,Actor在连续几帧中的速度往往是不变的,或者变化不大的,因此相对速度的数值通常比绝对速度的数值小,那么对相对位置进行序列化所得到的数据所需的比特数,比对绝对位置进行序列化所得到的数据所需的比特数少很多,从而实现在不影响移动同步体验的情况下,通过算法的优化极大地降低位置同步的数据量,从而有效地降低了带宽成本。
(2)FRotator的序列化格式可以参见图1d所示,其具体可包括如下字段:
Pitch(俯仰角)字段,用于存储虚拟对象的俯仰角,即虚拟对象绕X轴旋转的角度,如虚拟对象的头部向上或向下进行旋转时的角度;
Yaw(偏航角)字段,用于存储虚拟对象的偏航角,即虚拟对象绕Z轴旋转的角度,如虚拟对象的头部向左或向右进行旋转时的角度;
Roll(翻滚角)字段,用于存储虚拟对象的翻滚角,即虚拟对象绕Y轴旋转的角度,如虚拟对象的头部向左或向右进行倾斜旋转时的角度;
P字段(第一字段),用于存储一个数值,存储的数值用于指示是否需要在Pitch字段写入俯仰角;当存储的数值为无效数值(如数值0)时,表示不在Pitch字段写入俯仰角;
Y字段(第二字段),用于存储一个数值,存储的数值用于指示是否需要在Yaw字段写入偏航角;当存储的数值为无效数值(如数值0)时,表示不在Yaw字段写入偏航角;
R字段(第三字段),用于存储一个数值,存储的数值用于指示是否需要在Roll字段写入俯仰角;当存储的数值为无效数值(如数值0)时,表示不在Roll字段写入翻滚角;
需要说明的是,本申请实施例在存储俯仰角、偏航角和翻滚角时,均可以存储将角度的整数值从[0, 360)映射到[0,256)的值;此情况下,Pitch字段、Yaw字段和Roll字段,均占用1个字节(即8比特)。当然也可用2个字节或者更多的字节来存储这三个角度,以使得这三个角度具有更高的精度。
由前述可知:虚拟对象的朝向信息对应于FRepMovement中的Rotation字段,其是采用FRotator进行序列化的。而从图1d所示的FRotator所采用的序列化格式可以看出,在采用FRotator对朝向信息进行序列化时,朝向信息中的旋转角度的数量会影响序列化后所得到的数据的数据长度。而经研究表明,对于大部分的虚拟场景而言,Actor的Pitch和Roll这两个旋转角度在很多时候都为零;因此,本申请实施例针对朝向信息提出了如下构想:在同步朝向信息时,仅需同步水平面上的Yaw这个旋转角度即可,并且由于角度的整数值从[0,360)映射到[0,256),因此Yaw的同步仅需1个字节即可实现。进一步的,考虑到Actor在朝某个方向移动时,其在连续几帧中的Yaw可能并不会发生变化,那么 本申请实施例还可增加一个标记位,以使得当虚拟对象在当前时刻的Yaw与前一次同步的Yaw相同时,只需要设置这个标记位即可,不再写入Yaw数据,以进一步降低同步朝向信息时所需的数据量,从而进一步节省带宽成本,提升同步效率。
基于上述描述,本申请实施例提出了一种基于虚拟对象的相对位姿信息降低带宽成本的信息同步方法。在具体实现中,该信息同步方法可以前述提及的引擎服务器执行;或者,也可由引擎服务器和性能较好的终端共同执行,以减小引擎服务器的运行压力。
其中,此处提及的引擎服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content DeliveryNetwork,内容分发网络)、及大数据和人工智能平台等基础云计算服务的云服务器,等等。与引擎服务器协同执行该信息同步方法的终端可以包括但不限于:智能手机、电脑(如平板电脑、笔记本电脑、台式计算机等)、智能穿戴设备(如智能手表、智能眼镜等)、智能语音交互设备、智能家电(如智能电视)、车载终端或飞行器等。
另外,终端和引擎服务器可以位于区块链网络外,也可以位于区块链网络内,对此不作限定;所谓的区块链网络是一种由点对点网络(P2P网络)和区块链所构成的网络,而区块链则是指一种分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式,其本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块(或称为区块)。当终端和引擎服务器中的任一设备位于区块链网络内,或者与区块链网络存在通信连接时,该任一设备可将内部数据上传至区块链网络的区块链中进行存储,以防止引擎服务器的内部数据被篡改,从而提升内部数据的安全性。
为便于阐述,下面以引擎服务器独立执行该信息同步方法为例,并结合图2所示的流程图,对本申请实施例提出的信息同步方法进行阐述。参见图2所示,该信息同步方法可包括以下步骤S201-S204:
S201,获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息。
在本申请实施例中,虚拟场景可以理解成是可在设备屏幕中进行显示的场景。具体的,该虚拟场景可以是对真实世界中的场景进行仿真所得到的场景,例如对真实世界中的自动驾驶场景或景区游玩场景进行仿真所得到的场景;或者,该虚拟场景也可以是半仿真半虚构的场景,例如在真实世界对应的仿真世界中叠加了虚构人物的场景;又或者,该虚拟场景还可以是纯虚构的场景,例如游戏场景、影视剧或电影中的场景,等等。
虚拟场景中可包括至少一个虚拟对象(Actor),所谓的虚拟对象可以是虚拟场景中的可活动对象,如游戏场景中的虚拟角色,游戏场景中的虚拟动物等;或者,虚拟对象可以是虚拟场景中的静态物体元素,如虚拟草地、虚拟建筑物等。应理解的是,虚拟场景中的各个虚拟对象可以均是可活动对象,也可以同时包含静态物体元素和可活动对象,对此不作限定;并且,本申请实施例中的步骤S201以及后续步骤所提及的虚拟对象可以是虚拟场景中的任一虚拟对象。虚拟对象可具有多个属性(如移动属性、样式属性、尺寸属性等),以及虚拟对象在每个属性下的属性信息。其中,虚拟对象在移动属性下的属性信息可包括绝对位姿信息,朝向信息等;虚拟对象在样式属性下的属性信息可包括形状、外观颜色等;虚拟对象在尺寸属性下的属性信息可包括尺寸值。
由于虚拟对象在任意时刻的绝对位姿信息存储在虚拟对象(即Actor)的FRepMovement(即移动属性下的属性信息)中,因此引擎服务器在执行步骤S201时,可从本地空间中查找Actor在当前时刻的FRepMovement,从而在查找到的FRepMovement中获取虚拟对象在当前时刻的绝对位姿信息。进一步的,Actor在当前时刻的FRepMovement可存储在虚拟对象在当前时刻的属性列表中,而属性列表中包括虚拟对象的多个属性以及虚拟对象在每个属性下的属性信息;那么引擎服务器在从本地空间中获取Actor的FRepMovement时,可获取虚拟对象在当前时刻的属性列表,从获取到的属性列表中查找到移动属性,从而在该属性列表中与移动属性对应的属性信息中,获取虚拟对象在当前时刻的绝对位姿信息。
其中,虚拟对象在当前时刻的绝对位姿信息可以包括:虚拟对象在当前时刻的绝对速度(即未基于任何参照物所确定出的速度),以及虚拟对象在当前时刻的绝对位置(即未基于任何参照物所确定出的位置)。在一种具体实现中,若引擎服务器是每检测到虚拟对象的属性信息发生变化后,才执行信息同步操作的,则此处提及的当前时刻是指:检测到虚拟对象的属性列表发生变化的时刻,或者检测到虚拟对象的绝对位姿信息发生变化的时刻。另一种具体实现中,若引擎服务器是定时地执行信息同步操作的,即以一定的同步频率执行信息同步操作的,则此处提及的当前时刻是指:根据同步频率确定需执行信息同步操作的时刻;例如,设同步频率为每隔一秒同步一次的频率,且引擎服务器在10点25分26秒时执行过一次信息同步操作,那么当前时刻便是指10点25分27秒这一时刻。
S202,确定针对绝对位姿信息采用的序列化机制。
由前述所提及的引擎服务器的属性同步机制可知,任一种位姿信息均需通过序列化的方式同步给客户端;也就是说,引擎服务器在同步任一种位姿信息时,需对该任一种位姿信息进行序列化处理,从而将序列化处理所得到的数据同步给客户端。基于此,引擎服务器在通过步骤S201得到虚拟对象在当前时刻的绝对位姿信息后,可通过步骤S202确定针对绝对位姿信息采用的序列化机制。进一步的,由前述可知,引擎服务器针对绝对位姿信息所采用的序列化机制为FVector(即一种基于三维向量结构体的序列化机制)。并且,该序列化机制具有如下特性:采用序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关;也就是说,当被序列化的位姿信息的数值越大时,序列化后所得到的数据的数据量越大。
S203,基于序列化机制的特性,获取虚拟对象在当前时刻的相对位姿信息。
基于序列化机制的特性可知:当被序列化的位姿信息的数值越大时,序列化后所得到的数据的数据量越大;当被序列化的位姿信息的数值越小时,序列化后所得到的数据的数据量越小。而由于虚拟对象的相对位姿信息的数值通常比虚拟对象的绝对位姿信息的数值小,因此引擎服务器可基于序列化机制的特性,获取虚拟对象在当前时刻的相对位姿信息,以便将绝对位姿信息的序列化改为相对位姿信息的序列化,以此来减少序列化后所得到的数据量。
其中,获取到的相对位姿信息用于反映虚拟对象在当前时刻的绝对位姿信息与虚拟对象在前一时刻的绝对位姿信息之间的差异。具体的,当绝对位姿信息包括绝对位置时,获取到的相对位姿信息便可包括虚拟对象在当前时刻的相对位置,该相对位置可通过计算虚拟对象在当前时刻的绝对位置和虚拟对象在前一时刻的绝对位置之间的差值得到;当绝对位姿信息包括绝对速度时,获取到的相对位姿信息便可包括虚拟对象在当前时刻的相对速度,该相对速度可通过计算虚拟对象在当前时刻的绝对速度和虚拟对象在前一时刻的绝对速度之间的差值得到。进一步的,引擎服务器在执行步骤S203时,可以实时地根据虚拟对象在当前时刻的绝对位姿信息与虚拟对象在前一时刻的绝对位姿信息,计算得到虚拟对象在当前时刻的相对位姿信息;也可以从虚拟对象的目标属性信息(FRepRelativeMovement,一种结构体信息)中获取虚拟对象在当前时刻的相对位姿信息,该目标属性信息可以是在执行步骤S203之前,由引擎服务器或者其他设备生成的,目标属性信息还可包括:虚拟对象在当前时刻的偏航角,且未包括虚拟对象在当前时刻的俯仰角和翻滚角。
需要说明的是,在一种具体实现中,引擎服务器在通过步骤S202确定序列化机制后,可直接执行步骤S203来获取虚拟对象在当前时刻的相对位姿信息,从而通过后续步骤S204实现相对位姿信息的同步。另一种具体实现中,经实践证明:虽然使用相对位姿信息可以降低同步数据量和带宽成本,但是当虚拟对象处于一些特殊的状态时,同步相对位姿信息可能会引入额外的误差和过多的计算。基于此,本申请实施例为了避免引入额外的误差和过多的计算,可以设定使用相对位姿信息时,虚拟对象需具备的状态条件,以使得引擎服务器在执行步骤S203之前,需先获取虚拟对象在当前时刻的状态信息,以及确定虚拟对象在当前时刻的相对位姿信息被使用时,虚拟对象需具备的状态条件;结合前述描述可知,状态信息可位于虚拟对象的FRepMovement内的相关字段中,因此引擎服务器可从虚拟对象的FRepMovement中获取到虚拟对象在当前时刻的状态信息。然后,引擎服务器可根据状态信息判断虚拟对象是否具备该状态条件;若根据状态信息确定虚拟对象具备状态条件,则触发执行步骤S203;若根据状态信息确定虚拟对象不具备状态条件,则采用序列化机制,将虚拟对象在当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流。
实践进一步证明,若本申请实施例设定虚拟对象在当前时刻的相对位姿信息包括以下至少一项:相对速度和相对位置;则当虚拟对象处于如下状态时,使用相对位姿信息进行同步均会引入额外的误差和过多的计算:①虚拟对象附着在其他虚拟对象上,如游戏角色这一虚拟对象附着马这一虚拟对象上,即游戏角色处于骑马状态,因为此时既存在虚拟对象自身在两个时刻之间的相对位姿,还存在虚拟对象在当前时刻与其他虚拟对象之间的相对位姿;②虚拟对象处在物理模拟中,因为物理模拟时,Actor的运动会受到物理系统的额外控制。基于此,可设定状态条件包括以下至少一项:虚拟对象未附着在其他虚拟对象上,以及虚拟对象未处于物理模拟中;相应的,状态信息包括以下至少一项:用于指示虚拟对象是否附着在其他虚拟对象上的状态标识,以及用于指示虚拟对象是否处于物理模拟中的状态标识。
可选的,若本申请实施例还设定获取到的相对位姿信息位于虚拟对象的目标属性信息中,则后续步骤S204提及的将获取到的相对位姿信息写入属性同步数据流是指:将获取到的相对位姿信息所在的目标属性信息写入属性同步数据流。由于目标属性信息包括虚拟对象在当前时刻的俯仰角(Pitch)和翻滚角(Roll),且未包括虚拟对象在当前时刻的俯仰角(Pitch)和翻滚角(Roll),那么当虚拟对象的Pitch和Roll为非零值时,使用目标属性信息进行同步会引入额外的误差。因此,还可设定状态条件包括:虚拟对象在当前时刻的俯仰角和翻滚角为零值;相应的,状态信息还可包括虚拟对象的朝向信息,该朝向信息包括虚拟对象在当前时刻的偏航角、俯仰角以及翻滚角。
再进一步的,本申请实施例是通过调研获知在大部分虚拟场景的实际运行过程中,虚拟对象处于上述几种状态的时间比较少,所以可以默认使用相对位姿信息进行同步。也就是说,本申请实施例默认使用相对位姿信息进行同步的方式,适用于虚拟场景中的虚拟对象处于上述几种状态的时间比较少的情况。但也可能存在某些虚拟场景不符合这种情况,因此本申请实施例还可设置一个全局优化功能;所谓的全局优化功能又可称为全局优化的标识,其是指虚拟场景中的任一虚拟对象均可支持通过判断其是否具备状态条件,以确定是否同步相应虚拟对象相对位姿信息的功能。在此情况下,若虚拟场景不符合这种情况,则可以关闭全局优化功能,根据虚拟对象的对象类型来选取性地启用优化。
那么,引擎服务器在获取虚拟对象在当前时刻的状态信息之前,可先获取全局优化功能的功能状态,该功能状态包括开启状态或关闭状态;若全局优化功能的功能状态为开启状态,则触发引擎服务器执行获取虚拟对象在当前时刻的状态信息的步骤;若全局优化功能的功能状态为关闭状态,则获取虚拟对象的对象类型,并在虚拟对象的对象类型为指定对象类型的情况下,触发执行根据移动属性获取虚拟对象在当前时刻的相对位姿信息的步骤。可理解的是,若虚拟对象的对象类型不是指定对象类型,则表明不对虚拟对象的位姿信息的同步过程进行优化,即使用虚拟对象在当前时刻的绝对位姿信息进行信息同步;也就是说,若虚拟对象的对象类型不是指定对象类型,则采用序列化机制,将虚拟对象在当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流。示例性的,此情况下的引擎服务器在获取虚拟对象在当前时刻的相对位姿信息时,所采用的处理逻辑可参见图3所示。
S204,采用序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流,以将属性同步数据流传输给相应的客户端。
在一种具体实现中,引擎服务器可以是在检测到客户端的信息同步需求后,通过实时地序列化相对位姿信息的方式,将相对位姿信息写入客户端对应的属性同步数据流。其中,当引擎服务器想要主动将相对位姿信息同步给客户端时,可认为客户端存在信息同步需求;或者,当引擎服务器接收到客户端对应的通信通道的信息写入请求时,可认为客户端存在信息同步需求。
在此具体实现中,引擎服务器在执行步骤S204时,可以响应于客户端的信息同步需求,采用序列化机制对获取到的相对位姿信息进行序列化处理,得到相对位姿序列化数据;然后,将相对位姿序列化数据写入客户端对应的属性同步数据流,以将属性同步数据流传输给相应的客户端。通过此实施方式,可无需消耗内存空间来预先存储相对位姿序列化数据,提高内存使用率以及引擎服务器的稳定性。
另一种具体实现中,经研究表明:FRepMovement和FRepRelativeMovement均属于共享序列化类型的信息,而绝对位姿信息是位于FRepMovement中的,相对位姿信息是位于FRepRelativeMovement中,因此可知任一位姿信息均属于共享序列化类型的信息;所谓的共享序列化类型的信息是指具有如下特性的信息:同一帧内的位姿信息可通过FRepLayout::BuildSharedSerialization这一方法(即用于采用序列化机制进行序列化处理的方法)先序列化好,且序列化后所得到的数据可缓存至引擎服务器的本地空间,以使得当其他客户端对应的通信通道写入序列化数据时,可直接从本地空间所缓存的共享序列化数据中读取。基于此,引擎服务器通过步骤S203获取到相对位姿信息后,便可采用序列化机制对获取到的相对位姿信息进行序列化处理,得到相对位姿序列化数据,并将相对位姿序列化数据缓存至本地空间。
在此具体实现中,引擎服务器在执行步骤S204时,可以响应于客户端的信息同步需求,从本地空间中读取相对位姿序列化数据,并将相对位姿序列化数据写入客户端对应的属性同步数据流。通过此实施方式,可在引擎服务器需向多个客户端同步相对位姿信息的情况下,实现只对相对位姿信息执行一次序列化操作,可有效节省处理资源;并且,通过缓存相对位姿序列化数据的方式,使得当检测到客户端的信息同步需求时,可快速地将相对位姿序列化数据写入属性同步数据流,从而快速地将属性同步数据流传输给相应的客户端,提升位姿信息的同步效率。
本申请实施例可通过对绝对位姿信息所采用的序列化机制进行特性分析,获知序列化机制具有如下特性:采用序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关。从而在获取到虚拟场景中的虚拟对象在当前时刻的绝对位姿信息之后,可通过考虑该序列化机制的特性,获取虚拟对象在当前时刻的相对位姿信息。由于获取到的相对位姿信息用于反映虚拟对象在当前时刻的绝对位姿信息与虚拟对象在前一时刻的绝对位姿信息之间的差异,因此相对位姿信息的数值会比绝对位姿信息的数值小很多,尤其是在相邻两个时刻的绝对位姿信息之间的差异较小时,相对位姿信息的数值可以是一个很小的数值;那么,相对于序列化绝对位姿而言,通过采用序列化机制将相对位姿信息写入属性同步数据流,可以有效减少位姿同步的数据量,从而有效降低带宽成本,提升位姿信息的同步效率。
基于上述图2所示的方法实施例的相关描述,本申请实施例进一步提出了一种更为具体的信息同步方法,本申请实施例仍以引擎服务器独立执行该信息同步方法为例进行说明。请参见图4,该信息同步方法可包括以下步骤S401-S408:
S401,获取虚拟场景中的虚拟对象在当前时刻的属性列表。
其中,该属性列表中可包括:虚拟对象的多个属性以及虚拟对象在每个属性下的属性信息。多个属性可包括但不限于:移动属性、样式属性、尺寸属性等;虚拟对象在移动属性下的属性信息包括绝对位姿信息,虚拟对象在样式属性下的属性信息包括形状、外观颜色等,虚拟对象在尺寸属性下的属性信息可包括尺寸值。另外,针对发生变更的任一属性信息而言,将该属性信息写入用于同步的属性同步数据流的整个过程,可以是在FRepLayout::SendProperties_r这个方法(即写入属性信息的方法)中处理。
在一种具体实现中,若引擎服务器是每检测到虚拟对象的属性列表发生变化后,才执行信息同步操作的,则通过步骤S401所获取到的属性列表本质上是发生变化后的属性列表,即属性列表中存在至少一个属性下的属性信息和虚拟对象在前一时刻所产生的相应属性下的属性信息不同;其中,发生变化的属性列表可通过对象内存快照对比(即对比当前的属性列表和内存快照存储的属性列表)的方式确定,或者利用推送模式标记的方式确定,对此不作限定。另一种具体实现中,若引擎服务器是以一定的同步频率执行信息同步操作的,则通过步骤S401所获取到的属性列表可能是发生变化后的属性列表,也可能是未发生变化的属性列表,对此不作限定。
S402,从属性列表包括的多个属性中查找移动属性。
由前述可知,绝对位姿信息位于FRepMovement(即虚拟对象在移动属性下的属性信息)中,FRepMovement属于共享序列化类型的属性信息,而程序处理引擎在处理共享序列化类型的属性信息时,该属性信息对应的属性的属性类型为ERepLayoutCmdType::RepMovement(称为基准属性类型)。由此可见,当某属性的属性类型为ERepLayoutCmdType::RepMovement时,便可认为该属性是移动属性。
基于此,引擎服务器在执行步骤S402时,可确定基准属性类型,基准属性类型下的属性为移动属性;其次,依次遍历属性列表中的各个属性,并获取当前遍历的属性的属性类型。然后,将获取到的属性类型和基准属性类型进行比较;若获取到的属性类型与基准属性类型相同,则将当前遍历的属性确定为移动属性;若获取到的属性类型与基准属性类型不同,则继续遍历,直至属性列表中的各个属性均被遍历为止。
S403,从属性列表中与移动属性对应的属性信息中,获取虚拟对象在当前时刻的绝对位姿信息。
S404,确定针对绝对位姿信息采用的序列化机制,序列化机制具有如下特性:采用序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关。
S405,基于序列化机制的特性,获取虚拟对象在当前时刻的相对位姿信息。
S406,采用序列化机制对获取到的相对位姿信息进行序列化处理,得到相对位姿序列化数据。
本申请实施例针对相对位姿信息,提出了一种全新的序列化数据格式,如图5a所示,该全新的序列化数据格式可包括如下至少一个字段:
第一标记位(采用Flag1表示),又可称为静止标记位;第一标记位的取值可根据绝对速度是否为零值确定,当取值为有效数值(如数值1)时,表示绝对速度为零值。客户端解析的时候,如果读取到该字段的取值为有效数值(如数值1)的话,则可直接将绝对速度设置为FVector(0,0,0)。可见,通过设置该第一标记位,可有效防止当引擎服务器中的虚拟对象静止时,客户端用相对速度计算出来的绝对速度有误差,仍然是一个非零的较小的速度值。在实际应用中,该字段占用的比特数为1个比特。
第二标记位(采用Flag2表示),又可称为绝对速度不变标记位;第二标记位的取值可根据相对速度是否为零值确定,当取值为有效数值(如数值1)时,表示相对速度为零值,即本次同步的绝对速度相对于上一次同步涉及的绝对速度没有发生变化,后续无需写入相对速度。客户端解析的时候,如果读取到该字段的取值为有效数值(如数值1)的话,则可不更新当前的线性速度(即绝对速度)。可见,通过设置该第二标记位,可以在相对速度为零值的情况下,通过该第二标记位的取值高效地指示客户端是否需要更新绝对速度,提升客户端侧的处理效率。在实际应用中,该字段占用的比特数为1个比特。
第三标记位(采用Flag3表示),又可称为Yaw不变标记位;第三标记位的取值可根据虚拟对象的偏航角(Yaw)是否发生变化确定,当取值为有效数值(如数值1)时,表示本次同步的偏航角(Yaw)相对于上一次同步涉及的Yaw未发生变化。客户端解析的时候,如果读取到该字段的取值为有效数值(如数值1)的话,则可不更新当前的Yaw。可见,通过设置该第三标记位,可以在Yaw未发生变化的情况下,通过第三标记位的取值高效地指示客户端是否需要更新Yaw,提升客户端侧的处理效率。在实际应用中,该字段占用的比特数为1个比特。
客户端同步序号字段,该字段用于存储位姿信息序号,该位姿信息序号用于指示连续使用虚拟对象的相对位姿信息进行信息同步的次数。并且,该字段被允许填充的最大数值可表示允许连续使用相对位姿信息进行信息同步的次数阈值,而该字段被允许填充的最大数值可根据该字段所占据的比特数确定。在实际应用中,该字段占用的比特数可根据业务需求进行设置,例如可设置该字段占用5个比特,此时表明该字段被允许填充的最大数值为32,即此时可约束连续使用相对位姿信息进行信息同步的次数不超过32,从而防止客户端侧计算的累积误差过大。
朝向存储字段,该字段用于存储偏航角,且存储偏航角时,需存储将偏航角的整数值从[0,360)映射到[0,256)所得到的值。其中,当第三标记位的取值指示虚拟对象在当前时刻的偏航角未发生变化时,朝向存储字段不写入偏航角,即朝向存储字段为空。在实际应用中,该字段占用的比特数为1个比特。
相对位置存储字段,该字段用于存储相对位置的序列化结果,即存储用于指示绝对位置变化的相对位置的FVector序列化数据。
相对速度存储字段,该字段用于存储相对速度的序列化结果,即存储用于指示绝对速度变化的相对速度的FVector序列化数据。其中,当Flag 1(第一标记位)或者Flag2(第二标记位)的取值为有效数值(如数值1)时,该字段不写入相对速度;也就是说,当第一标记位的取值指示虚拟对象在当前时刻的绝对速度为零值时,或者当第二标记位的取值指示虚拟对象在当前时刻的相对速度为零值时,相对速度存储字段为空。
绝对位姿存储字段,该字段用于存储绝对位姿信息的序列化结果。由前述可知,虚拟场景通过应用程序进行呈现,那么为了保证使用相对位姿信息进行信息同步的准确性,本申请实施例可设定该应用程序配置有同步优化功能,所谓的同步优化功能是指使用相对位姿信息进行数据同步的功能,并对该同步优化功能设置校验模式,所谓的校验模式是指:通过绝对位姿信息校验相对位姿信息是否准确的模式。通过此操作,可以使得在上线同步优化功能之前,通过该校验模式对应用程序的同步优化功能进行准确性校验,以保证后续同步优化功能的可靠性。基于此,本申请实施例可设定:若同步优化功能处于测试阶段且开启了校验模式,则在填充序列化数据格式时,绝对位姿存储字段中需填充虚拟对象在当前时刻的绝对位姿信息的序列化结果;若同步优化功能处于测试阶段且未开启校验模式,或者同步优化功能处于应用阶段,则在填充序列化数据格式时,绝对位姿存储字段不写入绝对位姿信息,即绝对位姿存储字段为空。
具体的,绝对位姿存储字段可细分为绝对位置存储字段和绝对速度存储字段。绝对位置存储字段用于存储绝对位置的序列化结果(即绝对位置的FVector序列化数据),且仅当开启应用程序的同步优化功能的校验模式时,该绝对位置存储字段才写入绝对位置;类似的,绝对速度存储字段用于存储绝对速度的序列化结果(即绝对速度的FVector序列化数据),且仅当开启应用程序的同步优化功能的校验模式时,该绝对速度存储字段才写入绝对速度。
基于上述关于序列化数据格式的相关描述,引擎服务器在执行步骤S406时,可获取序列化数据格式,并根据序列化机制和获取到的相对位姿信息,填充序列化数据格式中的至少一个字段,得到相对位姿序列化数据。其中:
当虚拟对象在当前时刻的相对位姿信息包括相对速度时,由于序列化数据格式包括如下字段:第一标记位、第二标记位和相对速度存储字段,那么基于上述关于第一标记位、第二标记位和相对速度存储字段的相关描述可知,引擎服务器在根据序列化机制和获取到的相对位姿信息,填充序列化数据格式的至少一个字段时,可以先判断虚拟对象在当前时刻的绝对速度是否为零值,若为零值,则将有效数值(如数值1)填充至第一标记位,否则将无效数值(如数值0)填充至第一标记位;以及判断虚拟对象在当前时刻的相对速度是否为零值,若为零值,则将有效数值(如数值1)填充至第二标记位,否则将无效数值(如数值0)填充至第二标记位。然后,检测第一标记位和第二标记位中,是否存在一个标记位的数值为有效数值。若存在,则禁止对相对速度存储字段进行填充处理。若不存在,则采用序列化机制(即FVector)对虚拟对象在当前时刻的相对速度进行序列化处理,具体可将相对速度填充到序列化机制(即FVector)的数据格式(即图1b所示的数据格式)中,得到序列化结果;然后,并将相应的序列化结果写入相对速度存储字段。
当虚拟对象在当前时刻的相对位姿信息还包括相对位置时,由于序列化数据格式包括如下字段:相对位置存储字段,那么基于上述关于相对位置存储字段的相关描述可知,引擎服务器在根据序列化机制和获取到的相对位姿信息,填充序列化数据格式的至少一个字段时,可以采用序列化机制(即FVector)对虚拟对象在当前时刻的相对位置进行序列化处理,具体可将相对位置填充到序列化机制(即FVector)的数据格式(即图1b所示的数据格式)中,得到序列化结果;然后,并将相应的序列化结果写入相对速度存储字段。
进一步的,由前述可知,引擎服务器通过步骤S405获取到的相对位姿信息可位于虚拟对象的目标属性信息中,该目标属性信息中还可包括:虚拟对象在当前时刻的偏航角。在此情况下,将获取到的相对位姿信息写入属性同步数据流是指:将获取到的相对位姿信息所在的目标属性信息写入属性同步数据流;也就是说,此情况下,不仅需要将获取到的相对位姿信息写入属性同步数据流,还需要将虚拟对象在当前时刻的偏航角写入属性同步数据流。基于此,引擎服务器在根据虚拟对象在当前时刻的相对位姿信息填充序列化格式中的至少一个字段时,还可根据虚拟对象在当前时刻的偏航角,填充序列化数据格式中的至少一个字段。具体的,基于上述关于朝向存储字段和第三标记位的相关描述可知,引擎服务器可先判断相较于虚拟对象在前一时刻的偏航角而言,虚拟对象在当前时刻的偏航角是否发生变化,若发生变化,则将有效数值(如数值1)填充至第三标记位,否则将无效数值(如数值0)填充至第三标记位。当第三标记位填充了无效数值时,将虚拟对象在当前时刻的偏航角从[0,360)映射到[0,256),得到映射值,并将该映射值填充至朝向存储字段中。
再进一步的,若序列化数据格式包括客户端同步序号字段,则由于该客户端同步序号字段中的位姿信息序号是用于约束连续使用相对位姿信息进行信息同步的次数阈值,从而防止客户端侧计算的累积误差过大的,因此引擎服务器在获取到序列化数据格式之后,可先通过加一操作,更新序列化数据格式中的客户端同步序号字段中的位姿信息序号;其中,若更新前的位姿信息序号已等于客户端同步序号字段被允许填充的最大数值,则位姿信息序号更新失败。例如,设获取到的序列化数据格式中的客户端同步序号字段共占据5个比特,即客户端同步序号字段被允许填充的最大数值为32(25=32),即允许连续使用虚拟对象的相对位姿进行信息同步的次数阈值为32。那么若获取到的序列化数据格式中的客户端同步序号字段中的位姿信息序号为16,那么由于16小于最大数值,因此可通过加一操作成功将位姿信息序号更新为17;若获取到的序列化数据格式中的客户端同步序号字段中的位姿信息序号为32,那么由于32等于最大数值,因此无法通过加一操作更新客户端同步序号字段中的位姿信息序号。
若更新成功,则表明目前连续使用相对位姿信息进行信息同步的次数未超过次数阈值,因此可继续同步虚拟对象在当前时刻的相对位姿信息,所以可以触发执行根据序列化机制和获取到的相对位姿信息,填充序列化数据格式中的至少一个字段,得到相对位姿序列化数据的步骤;若更新失败,则表明目前连续使用相对位姿信息进行信息同步的次数已经达到次数阈值,所以此时可确定无法得到相对位姿序列化数据,并采用序列化机制,将虚拟对象在当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流,以及重置序列化数据格式中的客户端同步序号字段,使得重置后的客户端同步序号字段中的位姿信息序号取值为零值。
其中,采用序列化机制,将虚拟对象在当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流的方式为:采用序列化机制对虚拟对象在当前时刻的绝对位姿信息进行序列化处理,得到绝对位姿序列化数据,将绝对位姿序列化数据写入客户端对应的属性同步数据流。进一步的,绝对位姿序列化数据包括绝对位置序列化数据和绝对速度序列化数据,且绝对位置序列化数据是将绝对位置填充到图1b所示的数据格式中得到的,绝对速度序列化数据是将绝对速度填充到图1b所示的数据格式中得到的。
S407,将相对位姿序列化数据缓存至本地空间。
S408,响应于客户端的信息同步需求,从本地空间中读取相对位姿序列化数据,并将相对位姿序列化数据写入客户端对应的属性同步数据流,以将属性同步数据流传输给相应的客户端。
在具体实现中,引擎服务器可响应于客户端的信息同步需求,直接从本地空间中读取相对位姿序列化数据,并将相对位姿序列化数据写入客户端对应的属性同步数据流。
进一步的,考虑到针对同一个Actor而言,引擎服务器同步给不同的客户端的绝对位置可能是不同的,例如某个客户端在显示某一帧画面时,下行带宽数据饱和了,当时就不会再同步Actor的任何属性信息了,即当时就没有同步到关于虚拟对象的绝对位姿信息,那么就会使得该客户端在计算虚拟对象的相对位姿信息的时候,其基于的绝对位姿信息和引擎服务器所基于的绝对位姿信息是不同的,此情况下,客户端侧所存储的绝对位姿信息不是最新的绝对位姿信息,即存储的绝对位姿信息是无效的信息,若仍将虚拟对象在当前时刻的相对位姿信息同步给客户端,则会导致客户端侧基于该相对位姿信息和无效的绝对位姿信息所计算出的绝对位姿信息是不准确的。
为此,引擎服务器在检测到客户端的信息同步需求后,可先从客户端对应的通信通道中获取历史信息标识;具体的,客户端对应的通信通道中可包括用于描述信息同步情况的描述信息(FSendingRepState,一种结构体信息),该描述信息(FSendingRepState)中保存了某个Actor向一个客户端同步数据的相关信息,如历史信息标识,因此可从客户端对应的通信通道中的FSendingRepState获取历史信息标识。所谓的历史信息标识是指客户端中的参考绝对位姿信息的信息标识,而参考绝对位姿信息是指在当前时刻之前,客户端最近一次接收到的虚拟对象的绝对位姿信息。然后,通过判断该历史信息标识是否满足预设的标识条件,来确定客户端中的参考绝对位姿信息是否为有效的绝对位姿信息。若历史信息标识满足预设的标识条件,则确定客户端中的参考绝对位姿信息为有效的绝对位姿信息,此时可触发执行步骤S408;若历史信息标识不满足预设的标识条件,则确定客户端中的参考绝对位姿信息为无效的绝对位姿信息,此时可采用序列化机制,将虚拟对象在当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流。
在一种实施方式中,引擎服务器可使用环形缓冲的方式,保存虚拟对象在历史时刻所产生的一定数量的绝对位姿信息,从而通过有效起始位姿索引(HistoryMoveStart)和有效终止位姿索引(HistoryMoveEnd),来标记有效的绝对位姿信息,从而判断客户端中的参考绝对位姿信息是否有效的绝对位姿信息。在此实施方式中,引擎服务器的本地空间中缓存有虚拟对象的历史位姿信息数组,该历史位姿信息数组包括多个位姿索引和每个位姿索引所指示的存储位置;不同位姿索引所指示的存储位置用于存储虚拟对象在不同时刻下的绝对位姿信息,且存在至少一个存储位置中存储有虚拟对象的绝对位姿信息。
其中,存在的至少一个存储位置中的第一个存储位置对应的位姿索引为有效起始位姿索引,存在的至少一个存储位置中的最后一个存储位置对应的位姿索引为有效终止位姿索引。例如,设历史位姿信息数组中包括10个位姿索引,依次是HistoryMove1,HistoryMove2,…,HistoryMove9,HistoryMove10;每个位姿索引对应的存储位置可采用一个矩形框表示,且采用实线矩形框表示存储了绝对位姿信息的存储位置,采用虚线框表示未存储绝对位姿信息的存储位置。那么参见图5b所示,历史位姿信息数组中的前7个存储位置均存储了绝对位姿信息,那么有效起始位姿索引为HistoryMove1,有效终止位姿索引为HistoryMove7。需说明的是,此处只是示例性地列举了有效起始位姿索引和有效终止位姿索引的确定方式,并不对此进行限定;例如,也可将存在的至少一个存储位置中的倒数第二个存储位置对应的位姿索引作为有效终止位姿索引。
应理解的是,引擎服务器是在获取到虚拟对象在当前时刻的绝对位姿信息以及对应的相对位姿信息后,基于历史位姿信息数组判断是否向客户端同步虚拟对象在当前时刻的相对位姿信息的,而每产生虚拟对象的一个绝对位姿信息,均可将产生的绝对位姿信息存储至历史位姿信息数组中,因此本申请实施例提及的历史位姿信息数组中可包括虚拟对象在当前时刻的绝对位姿信息,且该绝对位姿信息位于历史位姿信息数组中的至少一个存储位置(即存储有绝对位姿信息的存储位置)中的最后一个存储位置。
从而可知,当有效终止位姿索引是至少一个存储位置中的最后一个存储位置的位姿索引时,该有效终止位姿索引就是虚拟对象在当前时刻的绝对位姿信息的位姿索引;此情况下,若有效终止位姿索引和有效起始位姿索引相同,则表明历史位姿信息数组中只存储了虚拟对象在当前时刻的绝对位姿信息,没有存储有效的历史绝对位姿信息(即在当前时刻之前产生的绝对位姿信息)。还需说明的是,历史位姿信息数组也可仅存储在当前时刻之前所获取的虚拟对象的绝对位姿信息,不存储虚拟对象在当前时刻的绝对位姿信息;此情况下,若有效终止位姿索引和有效起始位姿索引相同,则表明历史位姿信息数组中仅存储了一个有效的历史绝对位姿信息。
相应的,当引擎服务器的本地空间中缓存有虚拟对象的历史位姿信息数组时,从客户端对应的通信通道中所获取的历史信息标识可包括历史位姿索引,即在当前时刻之前,客户端最近一次接收到的虚拟对象的绝对位姿信息的位姿索引。在此情况下,标识条件可包括:历史位姿索引需位于有效起始位姿索引和有效终止位姿索引之间。值得说明的是,此处提及的“历史位姿索引需位于有效起始位姿索引和有效终止位姿索引之间”的含义可理解为:历史位姿索引大于有效起始位姿索引,且小于有效终止位姿索引;可选的,历史位姿索引等于有效起始位姿索引时,也可认为其位于有效起始位姿索引和有效终止位姿索引之间,本申请实施例对此不作限定。
另一种实施方式中,处于内存大小的考虑,引擎服务器针对每个Actor所保留的绝对位姿信息的数量不会太多,例如设定为8个,16个或者32个(可以自定义设置);可见,虚拟对象的历史位姿信息数组中的存储位置的数量是有限的。历史位姿信息数组是使用环形缓冲的方式来保存虚拟对象的绝对位姿信息,所谓的环形缓冲是一种先进先出的数据缓冲方式,环形缓冲的方式使得在历史位姿信息数组中不存在空闲的存储位置时,每次需要向历史位姿信息数组写入一个绝对位姿信息时,便会弹出历史位姿信息数组中的第一个存储位置中的绝对位姿信息,将剩余的各个绝对位姿信息依次往前移动一个存储位置,从而将待写入的绝对位姿信息写入历史位姿信息数组中的最后一个存储位置。基于此可知,随着绝对位姿信息的不断写入,历史位姿信息数组中的各个存储位置中所存储的绝对位姿信息会发生变化,而由于绝对位姿信息的位姿索引是根据相应存储位置确定的,因此可能出现间隔一段时间后,客户端对应的通信通道中保存的历史位姿索引指向的绝对位姿信息和上次引擎服务器同步给客户端的绝对位姿信息不是同一个信息的情况。
那么为了防止此情况,本申请实施例可为虚拟对象在移动属性下的每个属性信息(FRepMovement)中的绝对位姿信息增加一个信息版本号;也就是说,虚拟对象在任一时刻的绝对位姿信息均具有一个信息版本号。并且,若在第i个时刻未检测到版本号变更事件,则虚拟对象在第i时刻的绝对位姿信息的信息版本号,与虚拟对象在第i-1个时刻的绝对位姿信息的信息版本号保持一致,i为大于1的整数。其中,版本号变更事件是指检测到需同步绝对位姿信息的事件;可见,若相邻两个时刻的绝对位姿信息的信息版本号一致,则可表明相邻两个时刻中的后一个时刻所同步的位姿信息为相对位姿信息,从而可表明在该后一个时刻之前,最近同步的绝对位姿信息是有效的。
由此可见,本申请实施例可通过比对客户端侧的信息版本号和本地空间中所缓存的最新的信息版本号(即虚拟对象在当前时刻的绝对位姿信息的信息版本号),来判断客户端中的参考绝对位姿信息是否有效的绝对位姿信息。相应的,从客户端对应的通信通道中所获取的历史信息标识可包括历史信息版本号,即在当前时刻之前,客户端最近一次接收到的虚拟对象的绝对位姿信息的信息版本号。在此情况下,标识条件可包括:历史信息版本号与本地空间中缓存的信息版本号相同;本地空间中缓存的信息版本号是指最新的信息版本号,即虚拟对象在当前时刻的绝对位姿信息的信息版本号。
其中,上述所提及的版本号变更事件可包括以下任一项:
1)虚拟对象的状态信息发生变化的事件,即版本号变更时机为虚拟对象的状态发生变化。例如从用于指示虚拟对象从附着在其他虚拟对象上的状态信息,变成用于指示未附着在其他虚拟对象上的状态信息;又如,从用于指示虚拟对象从处于物理模拟中的状态信息,用于指示变为未处于物理模拟中的状态信息,等等。若虚拟对象的状态信息发生变化,则会使得虚拟对象和状态条件之间的关系发生变化;如虚拟对象未附着在其他Actor上,变成了虚拟对象附着在其他Actor上,那么此时虚拟对象和状态条件之间的关系便从虚拟对象具备状态条件的关系,变成虚拟对象不具备状态条件的关系,从而使得从同步相对位姿信息变为同步绝对位姿信息,这样可使得之前所使用的绝对位姿信息失效。因此,此时可通过变更绝对位姿信息的版本号,以使得后续通过版本号比对来准确识别出之前的绝对位姿信息是无效的绝对位姿信息。
2)已经连续K次同步相对位姿信息的事件,即版本号变更时机为连续K次(K为正整数)使用相对位姿信息进行信息同步。也就是说,本申请实施例可设定在连续使用K次相对位姿信息之后,强制使用绝对位姿信息同步一次,以使得之前所使用的绝对位姿信息失效。此时可通过变更绝对位姿信息的版本号,以使得后续通过版本号比对来准确识别出之前的绝对位姿信息是无效的绝对位姿信息。这样的处理方式,可防止客户端连续多次使用相对位姿信息来确定绝对位姿信息,而出现过大的累积误差。
基于上述所提及的版本号变更事件可知,在经过多次信息同步后,引擎服务器和客户端之间的位姿信息同步情况可以示例性地参见图5c所示:在长时间的属性同步过程中,虚拟对象的绝对位姿信息和相对位姿信息可以间隔出现,并且每次连续使用的相对位姿信息个数是不固定的,这是由于上述所提及的信息版本号的变更时机导致的。
需要说明的是,考虑到属性信息的同步可能是不可靠的,在属性信息的同步过程中容易产生丢包;如果发生丢包,客户端对应的UActorChannel(即通信通道)可把关联的发送过的变更属性列表设置为重发状态,以在下次信息同步的时候,同步变更的属性列表时,会把需要重发的属性列表也添加进去。基于此,若客户端侧发生丢包,则客户端对应的通信通道中的历史信息标识被重置为无效值;其中,历史信息标识为无效值时,历史信息标识不满足预设的标识条件。也就是说,在发生丢包处理时,可设定客户端把缓存的历史信息版本号与历史位姿索引等历史信息标识重置为无效值,这样可使得下次信息同步时,历史信息版本号和历史位姿索引必然无法满足相应的标识条件,从而使得下次信息同步时,必定会使用绝对位姿信息。由前述可知,用于对相对位姿信息进行序列化的序列化数据格式中包括客户端同步序号字段,而该字段用于存储位姿信息序号,因此可知每次向客户端同步相对位姿信息时,均会同步一个位姿信息序号给客户端,该位姿信息序号用于指示连续使用所述虚拟对象的相对位姿信息进行信息同步的次数。那么,客户端每接收到一个位姿信息序号,则可计算当前接收到的位姿信息序号和上一次接收到的位姿信息序号之间的差值,若差值大于阈值(如数值1),则确定发生丢包。
还需说明的是,本申请实施例中的步骤S408是前述图2所示的方法实施例中的步骤S204的一种实施方式;此处提及的通过判断客户端中的参考绝对位姿信息是否为有效的绝对位姿信息,从而确定是否同步相对位姿信息的处理逻辑,同样适用于前述图2所示的方法实施例。也就是说,在图2所示的方法实施例中,执行步骤S204之前,可从客户端对应的通信通道中获取历史信息标识,若历史信息标识满足预设的标识条件,则确定客户端中的参考绝对位姿信息为有效的绝对位姿信息,并触发执行步骤S204,否则,采用序列化机制,将虚拟对象在当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流。
本申请实施例可通过对绝对位姿信息所采用的序列化机制进行特性分析,获知序列化机制具有如下特性:采用序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关。从而在获取到虚拟场景中的虚拟对象在当前时刻的绝对位姿信息之后,可通过考虑该序列化机制的特性,获取虚拟对象在当前时刻的相对位姿信息。由于获取到的相对位姿信息用于反映虚拟对象在当前时刻的绝对位姿信息与虚拟对象在前一时刻的绝对位姿信息之间的差异,因此相对位姿信息的数值会比绝对位姿信息的数值小很多,尤其是在相邻两个时刻的绝对位姿信息之间的差异较小时,相对位姿信息的数值可以是一个很小的数值;那么,相对于序列化绝对位姿而言,通过采用序列化机制将相对位姿信息写入属性同步数据流,可以有效减少位姿同步的数据量,从而有效降低带宽成本,提升位姿信息的同步效率。
在实际应用中,上述图2和图4所示的信息同步方法可被运用在各种虚拟场景中,如游戏场景,影视剧中的场景等。其中,将该信息同步方法应用到游戏场景中,可使得在游戏的运行过程中,游戏玩家所使用的客户端(即游戏客户端)对应的服务端连接对象(即虚拟场景中由玩家操作的虚拟对象)通过UActorChannel类管理与其他Actor的网络同步关联,并按一定的频率收集周围其他Actor发生变化的属性信息(如果对应的Actor在当前时刻尚未计算过发生变更的属性列表,则会先计算一次)。如果收集到的属性信息为移动属性下的属性信息,并且满足可以用相对位姿信息的状态条件,则根据收集到的属性信息计算出相对位姿信息,并在客户端对应的属性同步数据流中写入相对位姿信息(原有的绝对位姿信息不再写入)。
示例性地,参见图5d所示,在游戏场景中运用该信息同步方法的应用过程大致如下:
首先,可获取Actor在当前时刻发生变更的属性列表,该属性列表中包括n个属性,以及Actor在每个属性下的属性信息,n为正整数。然后,可遍历属性列表中的各个属性,若当前遍历的属性为移动属性,则从属性列表中与移动属性对应的属性信息(FRepMovement)中获取Actor在当前时刻的绝对位姿信息(如绝对速度,绝对位置等)。
然后,可判断绝对位姿信息是否可替换为相对位姿信息;具体可根据Actor在当前时刻的状态信息判断Actor是否具备使用相对位姿信息的状态条件,若具备,则可确定绝对位姿信息可替换为相对位姿信息,若不具备,则可确定绝对位姿信息不可替换为相对位姿信息。
若绝对位姿信息可替换为相对位姿信息,则可从Actor的目标属性信息(FRepRelativeMovement)中获取Actor在当前时刻的相对位姿信息,以在后续写入时,将绝对位姿信息的序列化数据替换为相对位姿信息的序列化数据。具体的可采用FVector这一序列化机制对获取到的相对位姿信息进行序列化处理,得到相对位姿序列化数据(即相对位姿信息的序列化数据),并将相对位姿序列化数据缓存至本地空间,以使得后续将相对位姿序列化数据写入一个或多个客户端的属性同步数据流中。
针对任一客户端,如图5d中的客户端1或客户端2;当检测到该任一客户端的信息同步需求时,可根据任一客户端侧的网络状态等信息,判断是否可向任一客户端对应的通信通道(Actor Channel)写入相对位姿序列化数据。例如,若网络状态指示该任一客户端的下行带宽已饱和,或者与该任一客户端之间的网络连接已断开,则确定不可写入相对位姿序列化数据;若网络状态指示该任一客户端的下行带宽未饱和,或者与该任一客户端之间的网络连接未断开,则确定可写入相对位姿序列化数据。若确定可写入相对位姿序列化数据,则可通过RreplicateActor(一种属性复制的函数名)方法,将相对位姿序列化数据写入该任一客户端对应的属性同步数据流中,并将该属性同步数据流写入该任一客户端对应的通信通道,以通过相应的网络连接将属性同步数据流传输给相应的客户端。
进一步的,任一客户端的通信通道中可包括FSendingRepState(描述信息),且每个FSendingRepState记录最近一次同步绝对位姿信息所使用的历史位姿索引及历史信息版本号。在此情况下,参见图5e所示:当检测到任一客户端的信息同步需求时,可先从任一客户端的通信通道中获取历史位姿索引和历史信息版本号。通过判断历史位姿索引(如图5e中所示的HistoryMove3)是否位于历史位姿信息数组中的有效起始位姿索引(如图5e中所示的HistoryMove2)和有效终止位姿索引(如图5e中所示的HistoryMove n-1)之间,来确定历史位姿索引是否为有效的位姿索引;以及,判断历史信息版本号和引擎服务器的本地空间中存储的信息版本号是否相同。
若两者均满足(即信息版本号相同且历史位姿索引为有效的位姿索引),则可检测本地空间中是否缓存有相对位姿序列化数据。若缓存有,则触发执行前述提及的通过RreplicateActor(一种属性复制的函数名)方法,将相对位姿序列化数据写入属性同步数据流中的步骤。若未缓存,则计算相对位姿序列化数据,并将其写入属性同步数据流;具体可根据虚拟对象在前一时刻的移动属性下的属性信息(FHistoryRepMovement)中的绝对位姿信息(如图5e中的HistoryMove3所指示的存储位置中的绝对位姿信息),以及根据虚拟对象在当前时刻的绝对位姿信息(即图5e中所示的当前时刻获取到的移动属性下的属性信息中的绝对位姿信息),计算虚拟对象在当前时刻的相对位姿信息,并对其进行序列化处理,得到相对位姿序列化数据。
若历史位姿索引和历史信息版本号中,存在至少一项不满足相应的条件,则可将虚拟对象在当前时刻的绝对位姿信息写入属性同步数据流中。并且,还可将通信通道中的位姿信息序号重置为零值,以及将历史位姿索引重置为虚拟对象在当前时刻的绝对位姿信息的位姿索引,将历史信息版本号重置为虚拟对象在当前时刻的绝对位姿信息的信息版本号。
本申请实施例中,可把程序处理引擎(UE DS)默认实现中的同步绝对位姿信息,改为使用绝对位姿信息和相对位姿信息相结合;由于获取到的相对位姿信息用于反映虚拟对象在当前时刻的绝对位姿信息与虚拟对象在前一时刻的绝对位姿信息之间的差异,因此相对位姿信息的数值会比绝对位姿信息的数值小很多,尤其是在相邻两个时刻的绝对位姿信息之间的差异较小时,相对位姿信息的数值可以是一个很小的数值;那么,相对于序列化绝对位姿而言,通过采用序列化机制将相对位姿信息写入属性同步数据流,可以有效减少位姿同步的数据量,从而有效降低带宽成本,提升位姿信息的同步效率,从而提升客户端侧的游戏画面的渲染效率,进而提升游戏运行的流畅度。
为了进一步说明本申请实施例所提出的信息同步方法在游戏场景中的可行性,本申请实施例在游戏场景中对该信息同步方法进行性能测试,从而得到了如下测试结果:
(一)可大幅降低位姿同步所需的带宽成本。
(1)测试用例1:服务端网络同步帧率为30,让NPC(non-player character,非玩家角色(即游戏中不受真人玩家操纵的游戏角色))沿着离原点一定距离(即N米)的矩形,以一定的速度移动,且每隔一定距离便停顿一下(如改变朝向,等待0.3秒),然后再沿着矩形定向移动,即通过停顿一次增加朝向和速度的变化,从而增加同步数据量,如图6a所示。
①设置NPC在定向移动过程中的最大速度为6米/秒,且每隔5米停顿一次。分别测试了N为5米、10米、20米、50米、100米、200米、500米、1000米的多种情况,得到了如图6b所示的结果图。基于图6b中的右侧图可知,随着NPC离原点距离的变远,其绝对位置变大,同步一次绝对位姿信息(包含绝对位置)所需的比特数越来越多,而同步相对位姿信息(包含相对位置)所需的比特数则相对稳定,比前者少一半以上。图6b中的左侧图显示,优化后的位姿带宽占比(即同步相对位姿信息所需的带宽和同步绝对位姿信息所需的带宽之间的占比)均是小于1的,由此可知,同步相对位姿信息所需的带宽相对于默认实现(即同步绝对位姿信息)的带宽占比低,尤其是当距离原点的距离大于100米时,同步相对位姿信息所需的带宽仅占默认实现的40%,甚至更少。
②设置NPC在定向移动过程中的最大速度为6米/秒,且每隔2.5米停顿一次。分别测试了N为5米、10米、20米、50米、100米、200米、500米、1000米的多种情况,得到了如图6c所示的结果图。通过对比图6b和图6c可知,由于相比于每5米停顿一次,每2.5秒停顿一次会提升朝向和速度改变的频率,从而增加同步位姿信息所需的数量,使得相较于图6b所示的优化效果,图6c所示的优化效果略低一些,但是在NPC离原点的距离超过50米时,同步相对位姿信息所需的带宽仍然仅占默认实现的50%,甚至更少。
(2)测试用例2:服务端网络同步帧率为30,让NPC绕着离原点一定距离(即N米)的矩形,随机移动(如随机改变朝向,随机改变速度),如图6d所示。
设置NPC在随机移动过程中的最大速度为6米/秒,且测试了N为5米、10米、20米、50米、100米、200米、500米、1000米的多种情况,得到了如图6e所示的结果图。基于图6e中的右侧图可知,随着NPC离原点距离的变远,同步一次绝对位姿信息所需的比特数越来越多,而同步相对位姿信息所需的比特数则相对稳定,比前者少一半以上。基于图6e中的左侧图可知,同步相对位姿信息所需的带宽仅占默认实现的50%以下,即同步相对位姿信息所需的带宽相对于默认实现的带宽占比低。
(二)未增加额外的CPU(Central Processing Unit,中央处理器)开销。
测试用例:服务端网络同步帧率为30,让NPC绕着离原点1000米左右的矩形随机移动,如图6f所示。统计每帧的整体网络同步耗时(NetDriver TickFlush)、属性同步耗时(Replicate Actor Time)等信息。
①设置100个NPC随机移动,且登陆20个游戏玩家。
当使用绝对位姿信息进行信息同步时,其对应的统计结果可参见图6g所示。基于图6g可知,在同步绝对位姿信息时,整体网络同步的平均耗时是9.347毫秒,属性同步的平均耗时是7.717毫秒。另外,还对此情况下的整体网络同步的数据量(Out Rate)进行了统计,发现其最小值约为777K字节/秒,平均值约为836K字节/秒,最大值约为873K字节/秒。以及,对同步绝对位姿信息所需的数据量(RepMovement Origin Bits)进行了统计,发现其最小值约为2911399Kbits,平均值约为3046768Kbits,最大值约为3181405Kbits。
当使用相对位姿信息进行信息同步时,其对应的统计结果可参见图6h所示。基于图6h可知,在同步相对位姿信息时,整体网络同步的平均耗时是9.186毫秒,属性同步的平均耗时是7.391毫秒。另外,还对此情况下的整体网络同步的数据量进行了统计,发现其最小值约为432K字节/秒,平均值约为452K字节/秒(约为默认实现的54%),最大值约为471K字节/秒。以及,对同步相对位姿信息所需的数据量(RepMovement Optimized Bits)进行了统计,发现其最小值约为1158585216Kbits,平均值约为1212244bits,最大值约为1265747Kbits。可见,采用相对位姿信息进行同步所需的平均数据量,约是默认实现中同步绝对位姿信息所需的平均数据量的39.7%。
②设置100个NPC随机移动,且登陆32个游戏玩家。
当使用绝对位姿信息进行信息同步时,其对应的统计结果可参见图6i所示。基于图6i可知,在同步绝对位姿信息时,整体网络同步的平均耗时是15.487毫秒,属性同步的平均耗时是12.711毫秒。另外,还对此情况下的整体网络同步的数据量进行了统计,发现其最小值约为1280K字节/秒,平均值约为1342K字节/秒,最大值约为1398K字节/秒。以及,对同步绝对位姿信息所需的数据量进行了统计,发现其最小值约为676293Kbits,平均值约为891129Kbits,最大值约为1105786Kbits。
当使用相对位姿信息进行信息同步时,其对应的统计结果可参见图6j所示。基于图6j可知,在同步相对位姿信息时,整体网络同步的平均耗时是14.711毫秒,属性同步的平均耗时是11.868毫秒。另外,还对此情况下的整体网络同步的数据量进行了统计,发现其最小值约为684K字节/秒,平均值约为718K字节/秒(约为默认实现的54%),最大值约为755K字节/秒。以及,对同步相对位姿信息所需的数据量进行了统计,发现其最小值约为269092Kbits,平均值约为354722Kbits,最大值约为440082Kbits。可见,采用相对位姿信息进行同步所需的平均数据量,约是默认实现中同步绝对位姿信息所需的平均数据量的39.8%。
基于上述图6g-图6j的相关描述可知,采用相对位姿信息所需的耗时与采用绝对位姿信息所需的耗时接近,且采用相对位姿信息所需的耗时还略低些。从而可知,采用相对位姿信息进行同步,虽然增加相对位姿信息的计算,但是需要同步的数据量变少了,整体还略低,所以采用相对位姿信息进行同步,并没有带来额外的CPU开销。
(三)基于相对位姿信息进行信息同步所导致的误差较小,属于个位数的厘米级的误差。
测试用例:服务端网络同步帧率为30,让NPC绕着离原点1000米左右的矩形随机移动,如前述图6f所示。
①设置100个NPC随机移动,且登陆20个游戏玩家。
统计开启校验模式下,通过同步相对位姿信息所带来的位置误差和速度误差等信息,得到如图6k所示的统计结果。基于图6k可知,平均位置误差(Relative Location Diff)为1.69厘米,最大位置误差为8.46厘米。平均速度误差(Relative Velocity Diff)为0.71厘米/秒,最大速度误差为4.47厘米/秒。另外,还对丢包次数(Relative Count Unordered)进行了统计,发现丢包次数的最小值,最大值和平均值均为0。
②设置100个NPC随机移动,且登陆32个游戏玩家。
统计开启校验模式下,通过同步相对位姿信息所带来的位置误差和速度误差等信息,得到如图6l所示的统计结果。基于图6l可知,平均位置误差(Relative Location Diff)为1.81厘米,最大位置误差为7.15厘米。平均速度误差(Relative Velocity Diff)为0.60厘米/秒,最大速度误差为3.61厘米/秒。
基于上述信息同步方法实施例的描述,本申请实施例还公开了一种信息同步装置;所述信息同步装置可以是运行于引擎服务器中的一个计算机程序(包括程序代码),且该信息同步装置可以执行图2或图4所示的方法流程中的各个步骤。请参见图7,所述信息同步装置可以运行如下单元:
获取单元701,用于获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息,绝对位姿信息是指未基于参照物所确定出的位姿信息,且位姿信息需通过序列化的方式同步给客户端;
所述获取单元701,还用于确定针对绝对位姿信息采用的序列化机制,所述序列化机制具有如下特性:采用所述序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关;
所述获取单元701,还用于基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息;其中,获取到的相对位姿信息用于反映所述虚拟对象在当前时刻的绝对位姿信息与所述虚拟对象在前一时刻的绝对位姿信息之间的差异;
同步单元702,用于采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流,以将所述属性同步数据流传输给相应的客户端。
在一种实施方式中,获取单元701还可用于:
获取所述虚拟对象在所述当前时刻的状态信息,以及确定所述虚拟对象在所述当前时刻的相对位姿信息被使用时,所述虚拟对象需具备的状态条件;
若根据所述状态信息确定所述虚拟对象具备所述状态条件,则触发执行所述基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息的步骤;
若根据所述状态信息确定所述虚拟对象不具备所述状态条件,则采用所述序列化机制,将所述虚拟对象在所述当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流。
另一种实施方式中,获取单元701在用于获取所述虚拟对象在所述当前时刻的状态信息之前,还可用于:
获取全局优化功能的功能状态,所述功能状态包括开启状态或关闭状态;
若所述全局优化功能的功能状态为所述开启状态,则触发执行所述获取所述虚拟对象在所述当前时刻的状态信息的步骤;
若所述全局优化功能的功能状态为关闭状态,则获取所述虚拟对象的对象类型,并在所述虚拟对象的对象类型为指定对象类型的情况下,触发执行所述基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息的步骤。
另一种实施方式中,获取单元701在用于获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息时,可具体用于:
获取虚拟场景中的虚拟对象在当前时刻的属性列表,所述属性列表中包括:所述虚拟对象的多个属性以及所述虚拟对象在每个属性下的属性信息;
从所述属性列表包括的多个属性中查找移动属性,并从所述属性列表中与所述移动属性对应的属性信息中,获取所述虚拟对象在当前时刻的绝对位姿信息。
另一种实施方式中,获取单元701在用于从所述属性列表包括的多个属性中查找移动属性时,可具体用于:
确定基准属性类型,所述基准属性类型下的属性为移动属性;
依次遍历所述属性列表中的各个属性,并获取当前遍历的属性的属性类型;
若获取到的属性类型与所述基准属性类型相同,则将所述当前遍历的属性确定为移动属性;
若获取到的属性类型与所述基准属性类型不同,则继续遍历,直至所述属性列表中的各个属性均被遍历为止。
另一种实施方式中,任一位姿信息均属于共享序列化类型的信息;相应的,在获取单元701获取到所述虚拟对象在所述当前时刻的相对位姿信息之后,同步单元702还可用于:采用所述序列化机制对获取到的相对位姿信息进行序列化处理,得到相对位姿序列化数据,并将所述相对位姿序列化数据缓存至本地空间;
相应的,同步单元702在用于采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流时,可具体用于:响应于客户端的信息同步需求,从所述本地空间中读取所述相对位姿序列化数据,并将所述相对位姿序列化数据写入所述客户端对应的属性同步数据流。
另一种实施方式中,所述虚拟对象在所述当前时刻的相对位姿信息包括相对速度;同步单元702在用于采用所述序列化机制对获取到的相对位姿信息进行序列化处理,得到相对位姿序列化数据时,可具体用于:
获取序列化数据格式,所述序列化数据格式包括如下字段:第一标记位、第二标记位和相对速度存储字段;所述第一标记位的取值根据绝对速度是否为零值确定,所述第二标记位的取值根据相对速度是否为零值确定,所述相对位姿字段用于存储相对速度的序列化结果;
根据所述序列化机制和获取到的相对位姿信息,填充所述序列化数据格式中的至少一个字段,得到相对位姿序列化数据;
其中,当所述第一标记位的取值指示所述虚拟对象在所述当前时刻的绝对速度为零值时,或者当所述第二标记位的取值指示所述虚拟对象在所述当前时刻的相对速度为零值时,所述相对速度存储字段为空。
另一种实施方式中,所述序列化数据格式还包括客户端同步序号字段,所述客户端同步序号字段用于存储位姿信息序号,所述位姿信息序号用于指示连续使用所述虚拟对象的相对位姿信息进行信息同步的次数;相应的,同步单元702在获取到所述序列化数据格式之后,还可用于:
通过加一操作,更新所述序列化数据格式中的所述客户端同步序号字段中的位姿信息序号;其中,若更新前的位姿信息序号已等于所述客户端同步序号字段被允许填充的最大数值,则位姿信息序号更新失败;
若更新成功,则触发执行根据所述序列化机制和获取到的相对位姿信息,填充所述序列化数据格式中的至少一个字段,得到相对位姿序列化数据的步骤;
若更新失败,则确定无法得到相对位姿序列化数据,并采用所述序列化机制,将所述虚拟对象在所述当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流;以及,重置所述客户端同步序号字段,重置后的客户端同步序号字段中的位姿信息序号为零值。
另一种实施方式中,同步单元702还可用于:
从客户端对应的通信通道中获取历史信息标识,所述历史信息标识是指所述客户端中的参考绝对位姿信息的信息标识;所述参考绝对位姿信息是指在所述当前时刻之前,所述客户端最近一次接收到的所述虚拟对象的绝对位姿信息;
若所述历史信息标识满足预设的标识条件,则确定所述客户端中的参考绝对位姿信息为有效的绝对位姿信息,并触发执行所述采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流的步骤;
若所述历史信息标识不满足预设的标识条件,则确定所述客户端中的参考绝对位姿信息为无效的绝对位姿信息,并采用所述序列化机制,将所述虚拟对象在所述当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流。
根据本申请的另一个实施例,图7所示的信息同步装置中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本申请的实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本申请的其它实施例中,基于信息同步装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。
根据本申请的另一个实施例,可以通过在包括中央处理单元(CPU)、随机存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件的例如计算机的通用计算设备上运行能够执行如图2或图4中所示的相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图7中所示的信息同步装置设备,以及来实现本申请实施例的信息同步方法。所述计算机程序可以记载于例如计算机可读记录介质上,并通过计算机可读记录介质装载于上述计算设备中,并在其中运行。
本申请实施例可通过对绝对位姿信息所采用的序列化机制进行特性分析,获知序列化机制具有如下特性:采用序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关。从而在获取到虚拟场景中的虚拟对象在当前时刻的绝对位姿信息之后,可通过考虑该序列化机制的特性,获取虚拟对象在当前时刻的相对位姿信息。由于获取到的相对位姿信息用于反映虚拟对象在当前时刻的绝对位姿信息与虚拟对象在前一时刻的绝对位姿信息之间的差异,因此相对位姿信息的数值会比绝对位姿信息的数值小很多,尤其是在相邻两个时刻的绝对位姿信息之间的差异较小时,相对位姿信息的数值可以是一个很小的数值;那么,相对于序列化绝对位姿而言,通过采用序列化机制将相对位姿信息写入属性同步数据流,可以有效减少位姿同步的数据量,从而有效降低带宽成本,提升位姿信息的同步效率。
基于上述方法实施例以及装置实施例的描述,本申请实施例还提供一种引擎服务器。请参见图8,该引擎服务器至少包括处理器801、输入接口802、输出接口803以及计算机存储介质804。其中,引擎服务器内的处理器801、输入接口802、输出接口803以及计算机存储介质804可通过总线或其他方式连接。计算机存储介质804可以存储在引擎服务器的存储器中,所述计算机存储介质804用于存储计算机程序,所述计算机程序包括程序指令,所述处理器801用于执行所述计算机存储介质804存储的程序指令。处理器801(或称CPU(Central Processing Unit,中央处理器))是引擎服务器的计算核心以及控制核心,其适于实现一条或多条指令,具体适于加载并执行一条或多条指令从而实现相应方法流程或相应功能。
在一个实施例中,本申请实施例所述的处理器801可以用于进行一系列的信息同步处理,具体包括:获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息,绝对位姿信息是指未基于参照物所确定出的位姿信息,且位姿信息需通过序列化的方式同步给客户端;确定针对绝对位姿信息采用的序列化机制,所述序列化机制具有如下特性:采用所述序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关;基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息;其中,获取到的相对位姿信息用于反映所述虚拟对象在当前时刻的绝对位姿信息与所述虚拟对象在前一时刻的绝对位姿信息之间的差异;采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流,以将所述属性同步数据流传输给相应的客户端,等等。
本申请实施例还提供了一种计算机存储介质(Memory),所述计算机存储介质是引擎服务器中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机存储介质既可以包括引擎服务器中的内置存储介质,当然也可以包括引擎服务器所支持的扩展存储介质。计算机存储介质提供存储空间,该存储空间存储了引擎服务器的操作系统。并且,在该存储空间中还存放了适于被处理器801加载并执行的一条或多条的指令,这些指令可以是一个或一个以上的计算机程序(包括程序代码)。需要说明的是,此处的计算机存储介质可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器;可选的,还可以是至少一个位于远离前述处理器的计算机存储介质。
在一个实施例中,可由处理器加载并执行计算机存储介质中存放的一条或多条指令,以实现上述有关图2或图4所示的方法实施例中的相应步骤;具体实现中,计算机存储介质中的一条或多条指令可由处理器加载并执行如下步骤:
获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息,绝对位姿信息是指未基于参照物所确定出的位姿信息,且位姿信息需通过序列化的方式同步给客户端;
确定针对绝对位姿信息采用的序列化机制,所述序列化机制具有如下特性:采用所述序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关;
基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息;其中,获取到的相对位姿信息用于反映所述虚拟对象在当前时刻的绝对位姿信息与所述虚拟对象在前一时刻的绝对位姿信息之间的差异;
采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流,以将所述属性同步数据流传输给相应的客户端。
在一种实施方式中,所述一条或多条指令可由处理器加载并具体执行:
获取所述虚拟对象在所述当前时刻的状态信息,以及确定所述虚拟对象在所述当前时刻的相对位姿信息被使用时,所述虚拟对象需具备的状态条件;
若根据所述状态信息确定所述虚拟对象具备所述状态条件,则触发执行所述基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息的步骤;
若根据所述状态信息确定所述虚拟对象不具备所述状态条件,则采用所述序列化机制,将所述虚拟对象在所述当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流。
另一种实施方式中,在获取所述虚拟对象在所述当前时刻的状态信息之前,所述一条或多条指令可由处理器加载并具体执行:
获取全局优化功能的功能状态,所述功能状态包括开启状态或关闭状态;
若所述全局优化功能的功能状态为所述开启状态,则触发执行所述获取所述虚拟对象在所述当前时刻的状态信息的步骤;
若所述全局优化功能的功能状态为关闭状态,则获取所述虚拟对象的对象类型,并在所述虚拟对象的对象类型为指定对象类型的情况下,触发执行所述基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息的步骤。
另一种实施方式中,在获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息时,所述一条或多条指令可由处理器加载并具体执行:
获取虚拟场景中的虚拟对象在当前时刻的属性列表,所述属性列表中包括:所述虚拟对象的多个属性以及所述虚拟对象在每个属性下的属性信息;
从所述属性列表包括的多个属性中查找移动属性,并从所述属性列表中与所述移动属性对应的属性信息中,获取所述虚拟对象在当前时刻的绝对位姿信息。
另一种实施方式中,在从所述属性列表包括的多个属性中查找移动属性时,所述一条或多条指令可由处理器加载并具体执行:
确定基准属性类型,所述基准属性类型下的属性为移动属性;
依次遍历所述属性列表中的各个属性,并获取当前遍历的属性的属性类型;
若获取到的属性类型与所述基准属性类型相同,则将所述当前遍历的属性确定为移动属性;
若获取到的属性类型与所述基准属性类型不同,则继续遍历,直至所述属性列表中的各个属性均被遍历为止。
另一种实施方式中,任一位姿信息均属于共享序列化类型的信息;相应的,在获取到所述虚拟对象在所述当前时刻的相对位姿信息之后,所述一条或多条指令可由处理器加载并具体执行:采用所述序列化机制对获取到的相对位姿信息进行序列化处理,得到相对位姿序列化数据,并将所述相对位姿序列化数据缓存至本地空间;
相应的,在采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流时,所述一条或多条指令可由处理器加载并具体执行:响应于客户端的信息同步需求,从所述本地空间中读取所述相对位姿序列化数据,并将所述相对位姿序列化数据写入所述客户端对应的属性同步数据流。
另一种实施方式中,所述虚拟对象在所述当前时刻的相对位姿信息包括相对速度;在采用所述序列化机制对获取到的相对位姿信息进行序列化处理,得到相对位姿序列化数据时,所述一条或多条指令可由处理器加载并具体执行:
获取序列化数据格式,所述序列化数据格式包括如下字段:第一标记位、第二标记位和相对速度存储字段;所述第一标记位的取值根据绝对速度是否为零值确定,所述第二标记位的取值根据相对速度是否为零值确定,所述相对位姿字段用于存储相对速度的序列化结果;
根据所述序列化机制和获取到的相对位姿信息,填充所述序列化数据格式中的至少一个字段,得到相对位姿序列化数据;
其中,当所述第一标记位的取值指示所述虚拟对象在所述当前时刻的绝对速度为零值时,或者当所述第二标记位的取值指示所述虚拟对象在所述当前时刻的相对速度为零值时,所述相对速度存储字段为空。
另一种实施方式中,所述序列化数据格式还包括客户端同步序号字段,所述客户端同步序号字段用于存储位姿信息序号,所述位姿信息序号用于指示连续使用所述虚拟对象的相对位姿信息进行信息同步的次数;相应的,在获取到所述序列化数据格式之后,所述一条或多条指令可由处理器加载并具体执行:
通过加一操作,更新所述序列化数据格式中的所述客户端同步序号字段中的位姿信息序号;其中,若更新前的位姿信息序号已等于所述客户端同步序号字段被允许填充的最大数值,则位姿信息序号更新失败;
若更新成功,则触发执行根据所述序列化机制和获取到的相对位姿信息,填充所述序列化数据格式中的至少一个字段,得到相对位姿序列化数据的步骤;
若更新失败,则确定无法得到相对位姿序列化数据,并采用所述序列化机制,将所述虚拟对象在所述当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流;以及,重置所述客户端同步序号字段,重置后的客户端同步序号字段中的位姿信息序号为零值。
另一种实施方式中,所述一条或多条指令可由处理器加载并具体执行:
从客户端对应的通信通道中获取历史信息标识,所述历史信息标识是指所述客户端中的参考绝对位姿信息的信息标识;所述参考绝对位姿信息是指在所述当前时刻之前,所述客户端最近一次接收到的所述虚拟对象的绝对位姿信息;
若所述历史信息标识满足预设的标识条件,则确定所述客户端中的参考绝对位姿信息为有效的绝对位姿信息,并触发执行所述采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流的步骤;
若所述历史信息标识不满足预设的标识条件,则确定所述客户端中的参考绝对位姿信息为无效的绝对位姿信息,并采用所述序列化机制,将所述虚拟对象在所述当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流。
本申请实施例可通过对绝对位姿信息所采用的序列化机制进行特性分析,获知序列化机制具有如下特性:采用序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关。从而在获取到虚拟场景中的虚拟对象在当前时刻的绝对位姿信息之后,可通过考虑该序列化机制的特性,获取虚拟对象在当前时刻的相对位姿信息。由于获取到的相对位姿信息用于反映虚拟对象在当前时刻的绝对位姿信息与虚拟对象在前一时刻的绝对位姿信息之间的差异,因此相对位姿信息的数值会比绝对位姿信息的数值小很多,尤其是在相邻两个时刻的绝对位姿信息之间的差异较小时,相对位姿信息的数值可以是一个很小的数值;那么,相对于序列化绝对位姿而言,通过采用序列化机制将相对位姿信息写入属性同步数据流,可以有效减少位姿同步的数据量,从而有效降低带宽成本,提升位姿信息的同步效率。
需要说明的是,根据本申请的一个方面,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述图2或图4所示的方法实施例方面的各种可选方式中提供的方法。应理解的是,以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

Claims (20)

1.一种信息同步方法,其特征在于,包括:
获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息,绝对位姿信息是指未基于参照物所确定出的位姿信息,且位姿信息需通过序列化的方式同步给客户端;
确定针对绝对位姿信息采用的序列化机制,所述序列化机制具有如下特性:采用所述序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关;
基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息;其中,获取到的相对位姿信息用于反映所述虚拟对象在当前时刻的绝对位姿信息与所述虚拟对象在前一时刻的绝对位姿信息之间的差异;所述虚拟对象在所述当前时刻的相对位姿信息包括相对速度;
采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流,以将所述属性同步数据流传输给相应的客户端;所述属性同步数据流包括相对位姿序列化数据,所述相对位姿序列化数据是根据所述序列化机制和获取到的相对位姿信息,填充序列化数据格式中的至少一个字段后得到的;
其中,所述序列化数据格式包括如下字段:第一标记位、第二标记位和相对速度存储字段;所述第一标记位的取值根据绝对速度是否为零值确定,所述第二标记位的取值根据相对速度是否为零值确定,所述相对速度存储字段用于存储相对速度的序列化结果。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述虚拟对象在所述当前时刻的状态信息,以及确定所述虚拟对象在所述当前时刻的相对位姿信息被使用时,所述虚拟对象需具备的状态条件;
若根据所述状态信息确定所述虚拟对象具备所述状态条件,则触发执行所述基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息的步骤;
若根据所述状态信息确定所述虚拟对象不具备所述状态条件,则采用所述序列化机制,将所述虚拟对象在所述当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流。
3.如权利要求2所述的方法,其特征在于,所述虚拟对象在所述当前时刻的相对位姿信息还包括:相对位置;
所述状态信息包括以下至少一项:用于指示所述虚拟对象是否附着在其他虚拟对象上的状态标识,以及用于指示所述虚拟对象是否处于物理模拟中的状态标识;
所述状态条件包括以下至少一项:所述虚拟对象未附着在其他虚拟对象上,以及所述虚拟对象未处于物理模拟中。
4.如权利要求3所述的方法,其特征在于,获取到的相对位姿信息位于所述虚拟对象的目标属性信息中,所述目标属性信息中还包括:所述虚拟对象在所述当前时刻的偏航角,且未包括所述虚拟对象在所述当前时刻的俯仰角和翻滚角;
其中,将获取到的相对位姿信息写入属性同步数据流是指:将获取到的相对位姿信息所在的目标属性信息写入属性同步数据流;
所述状态信息还包括所述虚拟对象的朝向信息,且所述朝向信息包括所述虚拟对象在所述当前时刻的偏航角、俯仰角以及翻滚角;所述状态条件包括:所述虚拟对象在所述当前时刻的俯仰角和翻滚角为零值。
5.如权利要求2所述的方法,其特征在于,所述获取所述虚拟对象在所述当前时刻的状态信息之前,所述方法还包括:
获取全局优化功能的功能状态,所述功能状态包括开启状态或关闭状态;
若所述全局优化功能的功能状态为所述开启状态,则触发执行所述获取所述虚拟对象在所述当前时刻的状态信息的步骤;
若所述全局优化功能的功能状态为关闭状态,则获取所述虚拟对象的对象类型,并在所述虚拟对象的对象类型为指定对象类型的情况下,触发执行所述基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息的步骤。
6.如权利要求1所述的方法,其特征在于,所述获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息,包括:
获取虚拟场景中的虚拟对象在当前时刻的属性列表,所述属性列表中包括:所述虚拟对象的多个属性以及所述虚拟对象在每个属性下的属性信息;
从所述属性列表包括的多个属性中查找移动属性,并从所述属性列表中与所述移动属性对应的属性信息中,获取所述虚拟对象在当前时刻的绝对位姿信息。
7.如权利要求6所述的方法,其特征在于,所述从所述属性列表包括的多个属性中查找移动属性,包括:
确定基准属性类型,所述基准属性类型下的属性为移动属性;
依次遍历所述属性列表中的各个属性,并获取当前遍历的属性的属性类型;
若获取到的属性类型与所述基准属性类型相同,则将所述当前遍历的属性确定为移动属性;
若获取到的属性类型与所述基准属性类型不同,则继续遍历,直至所述属性列表中的各个属性均被遍历为止。
8.如权利要求1所述的方法,其特征在于,任一位姿信息均属于共享序列化类型的信息,在获取到所述虚拟对象在所述当前时刻的相对位姿信息之后,所述方法还包括:采用所述序列化机制对获取到的相对位姿信息进行序列化处理,得到相对位姿序列化数据,并将所述相对位姿序列化数据缓存至本地空间;
所述采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流,包括:响应于客户端的信息同步需求,从所述本地空间中读取所述相对位姿序列化数据,并将所述相对位姿序列化数据写入所述客户端对应的属性同步数据流。
9.如权利要求8所述的方法,其特征在于,所述采用所述序列化机制对获取到的相对位姿信息进行序列化处理,得到相对位姿序列化数据,包括:
获取序列化数据格式;
根据所述序列化机制和获取到的相对位姿信息,填充所述序列化数据格式中的至少一个字段,得到相对位姿序列化数据;
其中,当所述第一标记位的取值指示所述虚拟对象在所述当前时刻的绝对速度为零值时,或者当所述第二标记位的取值指示所述虚拟对象在所述当前时刻的相对速度为零值时,所述相对速度存储字段为空。
10.如权利要求9所述的方法,其特征在于,所述虚拟对象在所述当前时刻的相对位姿信息还包括相对位置;
所述序列化数据格式还包括相对位置存储字段,所述相对位置存储字段用于存储相对位置的序列化结果。
11.如权利要求9所述的方法,其特征在于,获取到的相对位姿信息位于所述虚拟对象的目标属性信息中,所述目标属性信息中还包括:所述虚拟对象在所述当前时刻的偏航角;其中,将获取到的相对位姿信息写入属性同步数据流是指:将获取到的相对位姿信息所在的目标属性信息写入属性同步数据流;
所述序列化数据格式还包括:第三标记位和朝向存储字段;所述第三标记位的取值根据所述虚拟对象的偏航角是否发生变化确定,所述朝向存储字段用于存储偏航角;其中,当所述第三标记位的取值指示所述虚拟对象在所述当前时刻的偏航角未发生变化时,所述朝向存储字段为空。
12.如权利要求9所述的方法,其特征在于,所述序列化数据格式还包括客户端同步序号字段,所述客户端同步序号字段用于存储位姿信息序号,所述位姿信息序号用于指示连续使用所述虚拟对象的相对位姿信息进行信息同步的次数;
在获取到所述序列化数据格式之后,所述方法还包括:
通过加一操作,更新所述序列化数据格式中的所述客户端同步序号字段中的位姿信息序号;其中,若更新前的位姿信息序号已等于所述客户端同步序号字段被允许填充的最大数值,则位姿信息序号更新失败;
若更新成功,则触发执行根据所述序列化机制和获取到的相对位姿信息,填充所述序列化数据格式中的至少一个字段,得到相对位姿序列化数据的步骤;
若更新失败,则确定无法得到相对位姿序列化数据,并采用所述序列化机制,将所述虚拟对象在所述当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流;以及,重置所述客户端同步序号字段,重置后的客户端同步序号字段中的位姿信息序号为零值。
13.如权利要求9-12任一项所述的方法,其特征在于,所述序列化数据格式还包括绝对位姿存储字段,所述绝对位姿存储字段用于存储绝对位姿信息的序列化结果;
所述虚拟场景通过应用程序进行呈现,且所述应用程序配置有同步优化功能,所述同步优化功能是指使用相对位姿信息进行信息同步的功能;
若所述同步优化功能处于测试阶段且开启了校验模式,则在填充所述序列化数据格式时,所述绝对位姿存储字段中需填充所述虚拟对象在所述当前时刻的绝对位姿信息的序列化结果;所述校验模式是指:通过绝对位姿信息校验相对位姿信息是否准确的模式;
若所述同步优化功能处于测试阶段且未开启校验模式,或者所述同步优化功能处于应用阶段,则在填充所述序列化数据格式时,所述绝对位姿存储字段为空。
14.如权利要求1所述的方法,其特征在于,所述方法还包括:
从客户端对应的通信通道中获取历史信息标识,所述历史信息标识是指所述客户端中的参考绝对位姿信息的信息标识;所述参考绝对位姿信息是指在所述当前时刻之前,所述客户端最近一次接收到的所述虚拟对象的绝对位姿信息;
若所述历史信息标识满足预设的标识条件,则确定所述客户端中的参考绝对位姿信息为有效的绝对位姿信息,并触发执行所述采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流的步骤;
若所述历史信息标识不满足预设的标识条件,则确定所述客户端中的参考绝对位姿信息为无效的绝对位姿信息,并采用所述序列化机制,将所述虚拟对象在所述当前时刻的绝对位姿信息,写入客户端对应的属性同步数据流。
15.如权利要求14所述的方法,其特征在于,本地空间中缓存有所述虚拟对象的历史位姿信息数组;
所述历史位姿信息数组包括多个位姿索引和每个位姿索引所指示的存储位置,不同位姿索引所指示的存储位置用于存储所述虚拟对象在不同时刻下的绝对位姿信息,且存在至少一个存储位置中存储有所述虚拟对象的绝对位姿信息;
所述至少一个存储位置中的第一个存储位置对应的位姿索引为有效起始位姿索引,所述至少一个存储位置中的最后一个存储位置对应的位姿索引为有效终止位姿索引;
其中,所述历史信息标识包括历史位姿索引;所述标识条件包括:所述历史位姿索引需位于所述有效起始位姿索引和所述有效终止位姿索引之间。
16.如权利要求14或15所述的方法,其特征在于,所述虚拟对象在任一时刻的绝对位姿信息均具有一个信息版本号;
若在第i个时刻未检测到版本号变更事件,则所述虚拟对象在第i时刻的绝对位姿信息的信息版本号,与所述虚拟对象在第i-1个时刻的绝对位姿信息的信息版本号保持一致,i为大于1的整数;所述版本号变更事件包括以下任一项:所述虚拟对象的状态信息发生变化的事件,或者已经连续K次同步相对位姿信息的事件,K为正整数;
其中,所述历史信息标识包括历史信息版本号,本地空间中缓存了所述虚拟对象在所述当前时刻下的绝对位姿信息的信息版本号;所述标识条件包括:所述历史信息版本号与所述本地空间中缓存的信息版本号相同。
17.如权利要求14或15所述的方法,其特征在于,若所述客户端侧发生丢包,则所述客户端对应的通信通道中的历史信息标识被重置为无效值;其中,所述历史信息标识为无效值时,所述历史信息标识不满足预设的标识条件;
并且,每次向客户端同步相对位姿信息时,均会同步一个位姿信息序号给所述客户端,所述位姿信息序号用于指示连续使用所述虚拟对象的相对位姿信息进行信息同步的次数;
所述客户端每接收到一个位姿信息序号,则计算当前接收到的位姿信息序号和上一次接收到的位姿信息序号之间的差值,若差值大于阈值,则确定发生丢包。
18.一种信息同步装置,其特征在于,包括:
获取单元,用于获取虚拟场景中的虚拟对象在当前时刻的绝对位姿信息,绝对位姿信息是指未基于参照物所确定出的位姿信息,且位姿信息需通过序列化的方式同步给客户端;
所述获取单元,还用于确定针对绝对位姿信息采用的序列化机制,所述序列化机制具有如下特性:采用所述序列化机制对任一位姿信息进行序列化后所得到的数据的数据量,与相应位姿信息的数值大小成正相关;
所述获取单元,还用于基于所述序列化机制的特性,获取所述虚拟对象在所述当前时刻的相对位姿信息;其中,获取到的相对位姿信息用于反映所述虚拟对象在当前时刻的绝对位姿信息与所述虚拟对象在前一时刻的绝对位姿信息之间的差异;所述虚拟对象在所述当前时刻的相对位姿信息包括相对速度;
同步单元,用于采用所述序列化机制,将获取到的相对位姿信息写入客户端对应的属性同步数据流,以将所述属性同步数据流传输给相应的客户端;所述属性同步数据流包括相对位姿序列化数据,所述相对位姿序列化数据是根据所述序列化机制和获取到的相对位姿信息,填充序列化数据格式中的至少一个字段后得到的;
其中,所述序列化数据格式包括如下字段:第一标记位、第二标记位和相对速度存储字段;所述第一标记位的取值根据绝对速度是否为零值确定,所述第二标记位的取值根据相对速度是否为零值确定,所述相对速度存储字段用于存储相对速度的序列化结果。
19.一种引擎服务器,包括输入接口和输出接口,其特征在于,还包括:处理器以及计算机存储介质;
其中,所述处理器适于实现一条或多条指令;所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由所述处理器加载并执行如权利要求1-17任一项所述的信息同步方法。
20.一种计算机存储介质,其特征在于,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由处理器加载并执行如权利要求1-17任一项所述的信息同步方法。
CN202310490284.6A 2023-05-04 2023-05-04 信息同步方法、装置、引擎服务器及存储介质 Active CN116208623B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310490284.6A CN116208623B (zh) 2023-05-04 2023-05-04 信息同步方法、装置、引擎服务器及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310490284.6A CN116208623B (zh) 2023-05-04 2023-05-04 信息同步方法、装置、引擎服务器及存储介质

Publications (2)

Publication Number Publication Date
CN116208623A CN116208623A (zh) 2023-06-02
CN116208623B true CN116208623B (zh) 2023-07-14

Family

ID=86517679

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310490284.6A Active CN116208623B (zh) 2023-05-04 2023-05-04 信息同步方法、装置、引擎服务器及存储介质

Country Status (1)

Country Link
CN (1) CN116208623B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116570921B (zh) * 2023-07-13 2023-09-22 腾讯科技(深圳)有限公司 虚拟对象的姿态控制方法、装置、计算机设备、存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108261762A (zh) * 2017-12-18 2018-07-10 腾讯科技(深圳)有限公司 数据同步方法和装置、存储介质及电子装置
CN112206511A (zh) * 2020-10-15 2021-01-12 网易(杭州)网络有限公司 游戏中的动作同步方法、装置、电子设备及存储介质
CN112675538A (zh) * 2020-12-28 2021-04-20 腾讯科技(深圳)有限公司 数据同步方法、装置、设备及介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102447723B (zh) * 2010-10-12 2015-09-09 运软网络科技(上海)有限公司 客户端虚拟化架构
CN106534211A (zh) * 2016-12-29 2017-03-22 四川九洲电器集团有限责任公司 一种数据传输方法及电子设备
CN110855727A (zh) * 2018-08-21 2020-02-28 苏州迈科网络安全技术股份有限公司 基于字节序列化和反序列化的数据对象的传输系统和方法
CN111228797B (zh) * 2020-01-13 2021-05-28 腾讯科技(深圳)有限公司 数据处理方法、装置、计算机以及可读存储介质
CN112807695A (zh) * 2021-02-24 2021-05-18 网易(杭州)网络有限公司 游戏场景生成方法和装置、可读存储介质、电子设备
CN113413586B (zh) * 2021-06-23 2023-09-15 腾讯科技(上海)有限公司 一种虚拟对象传送方法、装置、设备及存储介质
CN114675914B (zh) * 2022-02-11 2024-04-09 深信服科技股份有限公司 虚拟桌面的图像传输方法、装置、电子设备及存储介质
CN115861577A (zh) * 2022-12-09 2023-03-28 不鸣科技(杭州)有限公司 虚拟场景物的姿态编辑方法、装置、设备及存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108261762A (zh) * 2017-12-18 2018-07-10 腾讯科技(深圳)有限公司 数据同步方法和装置、存储介质及电子装置
CN112206511A (zh) * 2020-10-15 2021-01-12 网易(杭州)网络有限公司 游戏中的动作同步方法、装置、电子设备及存储介质
CN112675538A (zh) * 2020-12-28 2021-04-20 腾讯科技(深圳)有限公司 数据同步方法、装置、设备及介质

Also Published As

Publication number Publication date
CN116208623A (zh) 2023-06-02

Similar Documents

Publication Publication Date Title
US9536261B2 (en) Resolving conflicts within saved state data
CN111654720B (zh) 视频编码方法、装置、设备及可读存储介质
US10127294B2 (en) Idempotency of application state data
US8947431B2 (en) Method and system for providing scene data of virtual world
US9244993B1 (en) Management of application state data
CN116208623B (zh) 信息同步方法、装置、引擎服务器及存储介质
WO2018201935A1 (zh) 多化身位置同步系统、方法、装置及电子设备和存储介质
WO2023279917A1 (zh) 弹幕显示方法、弹幕发送方法、装置、计算机设备、计算机可读存储介质及计算机程序产品
US10834391B2 (en) Hologram streaming machine
CN109966741B (zh) 位置更新方法、装置、设备及存储介质
CN111031376B (zh) 基于微信小程序的弹幕处理方法和系统
CN114329298A (zh) 一种页面呈现方法、装置、电子设备及存储介质
JP7465960B2 (ja) ピアツーピアマルチプレイヤークラウドゲーミングアーキテクチャ
CN112752119A (zh) 一种时延误差校正方法、终端设备、服务器及存储介质
CN114073100B (zh) 数字内容的映射视图
CN111760273B (zh) 游戏碎块处理方法、装置及设备
CN116109756B (zh) 光线追踪方法、装置、设备及存储介质
CN115278290B (zh) 一种基于边缘节点的虚拟现实视频缓存方法及装置
CN111800742B (zh) 一种移动位置数据的管理方法、装置、存储介质及终端
Cloete Latency Measurement, Modelling and Management for Interactive Remote Rendering
CN116980696A (zh) 一种图像处理方法、装置、设备、存储介质及产品
CN117894068A (zh) 运动数据处理方法、关键帧提取模型的训练方法及装置
CN116614676A (zh) 在消息同步中虚拟人物动画重播的方法、系统及存储介质
CN117753004A (zh) 消息显示方法、装置、设备、介质及程序产品
CN117076405A (zh) 一种地理信息数据的动态显示方法以及相关设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40087668

Country of ref document: HK