前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UE网络通信(二) 相关性

UE网络通信(二) 相关性

作者头像
JohnYao
发布2022-06-29 15:13:07
9080
发布2022-06-29 15:13:07
举报
文章被收录于专栏:JohnYao的技术分享

序言

前篇文章概括性的介绍了UE4的网络通信。地址如下。

johnyao:UE网络通信(一) 概述

在本篇文章中,对UE4的网络相关性继续进行讨论。

UE4 网络相关性

网络相关性在传统的MMORPG游戏中有另外一个名称AOI(Area Of Intrest)。

一个游戏世界中的Actr数量太多,对于某个连接来说,它如果关注所有的Actor,那么同步带来的计算量就会很大。所以我们引入网络相关性来裁减需要同步的Actor数量。 前章已经提到了判断某个Actor和某个连接是否相关的属性配置,我们可以简单的归为三类。

  1. 同步距离
  2. 同步范围(AlwaysRelevant,和所有连接相关;OnlyRelevantToOwner, 仅和Owner相关)
  3. 同步频率(NetUpdateFrequency:上次同步间隔小于该频率,在该帧不进行同步)

对于UE4默认的相关性算法就是最简单的遍历。对于下图所示的例子。

可以看到,图中有两个人形Actor,他们对应了两个客户端连接。那么如果有N个actor, M个客户端连接,则会带来O(N*M)的计算复杂度。这个复杂度,可以将上面的例子转化为顶视图,用下图来演示。

Replication Graph

Unreal 4.21版本正式发布了Replication Graph。Replication Graph简单的讲是一种空间换时间的做法。它为所有的Actor提前创建好索引。比如同步范围为所有连接的Actor放在AlwaysRelevant索引下,同步范围为OnlyRelevantToOwner,放在以连接为key的Relevant For Connection索引下。

特别的,对于同步距离,Replication Graph提供了一种基于九宫格的相关性裁减算法。

该算法实现思路算法如下

  1. 按照预设大小将世界,水平划分成不同的网格
  2. 根据Actor同步距离缓存到不同的网格
  3. 当客户端连接对应的观察点走到对应网格,则直接将该网格对应的缓存的Actor直接加到连接对应的相关性列表中。

特别的,加入网格的Actor有静态和动态之分。

  1. 静态Actor插入和从Replication Graph中删除,是对所有缓存该Actor的网格进行一次性处理。
  2. 动态Actor则每帧会计算该Actor覆盖网格的差量值,将新覆盖的网格进行插入,刚取消覆盖的网格进行删除。

使用Replication Graph后,多了一些索引维护的开销,但整体可以将之前O(N*M)的复杂度降低为O(M)。

进一步的优化

利用Replication Graph,理论上我们可以扩展更多的索引节点,并定制AOI算法。

在我经历的项目中,我们将节点扩展为Relevant For Team和Relevent Folllow Owner。

Relevant For Team比较好理解,就是队伍内共享的相关性。 Relevent Folllow Owner就是该Actor的相关性跟随其Owner;当这个Owner和某个连接相关时,则Follow该Owner的Acotr也和该连接相关。

特别的,我们又对游戏内大量存在的道具做了动态的索引调整。

  1. 当道具丢弃到游戏世界中,相关性索引使用静态空间网格。
  2. 拾取到背包,相关性索引使用Relevant For Connection。
  3. 装备外显或者使用,相关性索引使用使用Relevent Folllow Owner。

由于我们引入了这种动态的相关性策略。我们同时引入了策略的缓存,因为在每一帧的tick阶段可能会有多次的相关性调整。但对于这一帧来讲,只有最后一次的才会生效。通过缓存最后一次的操作,我们可以减少单帧内相关性调整次数。 实测下来,这个缓存策略带来的性能优化效果有限,更多的是带来处理逻辑的统一。

当然,如果还想进一步优化,可以根军自己项目的实际情况,替换现有九宫格空间裁减算法。

结语

网络相关性就先介绍到这里。 下一篇准备介绍下属性同步。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 序言
  • UE4 网络相关性
    • Replication Graph
      • 进一步的优化
      • 结语
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档