笃行
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
  • 引擎骨架

    • UE 引擎(客户端—服务器交互)
    • 引擎架构与一帧的时序
    • UObject / GC / 反射
    • Gameplay Framework 与端存在性矩阵
  • 复制栈底层

    • NetDriver / Channel / Bunch
    • 属性复制
    • RPC
  • 带宽与规模

    • Relevancy 与带宽预算
    • UE5 Iris 复制系统
  • 局内同步

    • 移动预测与回滚
    • 延迟补偿
    • 网络物理同步
  • 系统与运维

    • GAS 网络模型
    • 专用服务器 · Session · Travel
    • 服务器权威与反作弊

UE5 Iris 复制系统

Iris 是 UE5.4+ 的新一代复制系统,冲着「默认复制栈在大规模下的 CPU 瓶颈」来的。它还不是默认、多数项目没用,所以本篇定位是选型篇:讲清它是什么、解决什么、代价多大、你该不该上——而不是实现级细节。


一句话结论

Iris 把「每连接轮询每 Actor」换成「全局脏状态追踪 + 每连接过滤」,为大规模复制降 CPU;但 UE5.4+ 才可选、非默认、迁移有成本。

版本与状态

Iris 是 UE5.4+ 引入的可选实验/预览特性,默认关闭,需显式启用并改造代码。UE4 与早期 UE5 完全没有。生产项目采用前务必确认目标引擎版本的成熟度。

场景问题

打个比方:默认复制栈像每个订户派一个专属编辑。100 个订户,每个编辑都把全部 1000 篇稿子从头看一遍、挑出「跟我这位订户有关且有改动的」——同一篇稿子被 100 个编辑各读了一遍,纯重复劳动。

Iris 换成「中央审稿 + 分发过滤」:先由一个中央编辑部把全部稿件过一遍,标出「哪些改了」(全局脏状态,只算一次),再按订户名单分发(Filtering)。改动只判定一次,订户数涨到 200 也不会让审稿工作翻倍。

和 ReplicationGraph 的差别:RepGraph 是给编辑们发了一张片区地图——不用翻全部稿子,只翻自己片区的,但每个编辑还是各翻一遍。Iris 是直接改掉「每人各翻一遍」这件事本身。所以两者职责重叠、不会同时上。

Relevancy 与带宽预算 讲过:默认复制栈的判定是 O(连接×Actor),大房间下 CPU 是真瓶颈。ReplicationGraph 用空间网格缓解了「相关性判定」,但属性差分比较(每连接对每 Actor 遍历属性)仍是重活。Iris 想更彻底地重构这条路径。面试里被问「听说过 Iris 吗」,能讲清「它解决的是默认栈的哪个瓶颈、和 ReplicationGraph 什么关系」就够了。

实现方案

1. 范式变化:从「每连接轮询」到「全局脏 + 每连接过滤」

默认栈Iris
脏状态发现每连接 × 每 Actor 遍历属性比较(或 Push Model 标脏)全局一次追踪脏状态,所有连接共享
相关性每连接判定集中的 Filtering 系统
序列化每连接各自序列化尽量复用、批量化
数据模型Actor/属性 分散NetObject + Protocol 描述统一

核心思路:脏状态只算一次(不是每连接算一次),然后按连接做过滤和发送。这把「随连接数线性放大的重复工作」收敛掉。

2. 核心概念

  • ReplicationSystem:Iris 的中枢,取代 UNetDriver 里那套复制逻辑(底层收发的 NetConnection/Socket 仍在,见 NetDriver/Channel/Bunch)。
  • NetObject:被复制对象在 Iris 里的统一表示,携带一份序列化 Protocol(描述有哪些可复制状态、怎么读写)。
  • Protocol:由反射 + 声明生成的复制协议描述,是「怎么序列化这个对象」的元数据。
  • NetRefHandle:对象的网络引用句柄,跨端稳定标识一个 NetObject。

3. Filtering / Prioritization / Group

  • Filtering:集中的相关性过滤(谁收谁),对应默认栈的 Relevancy + ReplicationGraph 职责。
  • Prioritization:带宽不足时谁先发,对应 NetPriority。
  • Group:把对象分组批量管理相关性/优先级,类似 ReplicationGraph 节点的思想但更系统化。

与 ReplicationGraph 的关系:两者职责高度重叠——都想解决大规模相关性/优先级。Iris 是更彻底的重写,长期看是 ReplicationGraph 的继任者;但现阶段 ReplicationGraph 成熟、Iris 新。同一项目不会两者都上。

4. 迁移代价

  • NetSerialize 改造:自定义序列化的 struct 需适配 Iris 的序列化模型。
  • API 不兼容:部分复制相关 API 变化,现有复制代码要改。
  • 插件/第三方适配:依赖默认复制栈的插件(含部分 GAS 路径)需确认是否支持 Iris。
  • 团队学习成本:一套新心智模型。

5. 三选一:默认栈 / ReplicationGraph / Iris

方案何时选代价
默认复制栈连接数不大(几十人内)、常规项目无额外代价,够用
ReplicationGraph明确要做大房间(100+),当前引擎版本,团队熟悉写自定义 Graph 类,把 Actor 分类到节点
IrisUE5.4+ 且愿意吃新特性、超大规模、长期项目迁移改造 + 新心智模型 + 成熟度风险

判据一句话:够用就默认;要大房间且求稳用 ReplicationGraph;押注未来且能承担迁移成本再考虑 Iris。绝大多数在产项目现在仍是「默认栈 + 必要时 ReplicationGraph」。

为什么这么做

脏状态只算一次:默认栈最大的浪费是「同一个属性变化,对 N 个连接各比较一次」。连接越多重复越多。Iris 把脏状态发现全局化,让这部分工作与连接数解耦——这是它能扩展的根本。

统一数据模型(NetObject/Protocol):默认栈的复制逻辑散落在 Actor/Channel/RepLayout 各处,难优化难批量。Iris 用统一的 NetObject + Protocol 描述,才能做批量序列化、SIMD 友好的内存布局等系统级优化。

为什么别的选择不行

  • 继续堆 ReplicationGraph:它优化了相关性判定,但没动「每连接属性差分/序列化」这块;超大规模下这块仍是瓶颈。Iris 才动了它。
  • 现在就全项目切 Iris:预览期成熟度、插件兼容性、迁移成本都是风险;多数项目收益还不足以抵消。选型要看规模是否真的到了默认栈扛不住的地步。
  • 不了解就上:Iris 改的是复制核心,盲目启用可能踩兼容坑(GAS、第三方插件)。先评估目标版本状态。

沉淀结论

Iris = UE5.4+ 可选新复制栈,把「每连接轮询每 Actor」换成「全局脏状态 + 每连接过滤」,用 ReplicationSystem/NetObject/Protocol/NetRefHandle 统一数据模型,为超大规模降 CPU。与 ReplicationGraph 职责重叠、是其继任方向。迁移有成本(NetSerialize/API/插件)。选型:够用默认栈、求稳大房间用 ReplicationGraph、押未来超大规模再上 Iris。

记忆口诀

定位:UE5.4+ / 可选非默认 / 冲大规模 CPU 瓶颈
范式:全局脏状态算一次 / 每连接过滤 / 与连接数解耦
概念:ReplicationSystem 中枢 / NetObject+Protocol 统一模型 / NetRefHandle 句柄
vs RepGraph:职责重叠 / Iris 更彻底 / 继任方向 / 不同时上
选型:够用默认 / 大房间求稳 RepGraph / 押未来超大规模 Iris

内容来源

综合整理。主要参考:Epic 官方文档 Iris Replication System(UE5.4+ 文档)、Epic 官方技术分享。因 Iris 处于演进中,具体 API 以目标引擎版本官方文档为准;本篇聚焦范式与选型,不承诺实现级细节。

相关专题:默认栈的 O(连接×Actor) 瓶颈与 ReplicationGraph 见 Relevancy 与带宽预算;默认属性差分/Push Model 见 属性复制;底层收发(Iris 不改这层)见 NetDriver/Channel/Bunch。

自测:合上资料能说清楚吗?

Iris 相比默认复制栈的核心范式变化是什么?

参考答案

从「每连接轮询每 Actor 做属性差分」变为「全局脏状态追踪算一次 + 每连接过滤发送」。默认栈最大的浪费是同一属性变化对 N 个连接各比较一次,重复随连接数放大;Iris 把脏状态发现全局化,与连接数解耦,从而在超大规模下降 CPU。

Iris 和 ReplicationGraph 什么关系?会同时用吗?

参考答案

职责高度重叠——都解决大规模的相关性/优先级问题。Iris 是更彻底的重写(还动了属性差分/序列化这块,RepGraph 没动),长期看是 ReplicationGraph 的继任方向。同一项目不会两者都上:现阶段成熟项目用 RepGraph,押注未来的超大规模项目才考虑 Iris。

一个 100 人项目,该选默认栈、ReplicationGraph 还是 Iris?

参考答案

优先 ReplicationGraph(当前成熟、专为大房间、能有效破 O(连接×Actor) 判定瓶颈)。默认栈在 100 人下判定 CPU 大概率扛不住。Iris 只在 UE5.4+ 且团队愿意承担迁移成本、成熟度风险、追求长期超大规模时才考虑。判据:够用默认、大房间求稳 RepGraph、押未来 Iris。

最近更新: 2026/9/10 11:38
Prev
Relevancy 与带宽预算