置顶文章

1.3k 1 分钟

工作逐渐步入正轨,后面会陆陆续续更新学习内容~目前主要在啃 Unreal 和 PhysX 的源代码 # game-study-plan # C++ 阅读《C++ Primer Plus》 | 产出文档 # python 阅读《python 源码剖析》 | 产出文档 python「工匠」 | 官方文档 了解 Python 热更新机制 | 产出文档 掌握 Python 的 C 扩展编写 | 产出文档 # rust Rust 程序设语言 | 官方文档 Rust 异步编程 | 官方文档 Learn Rust With Entirely Too Many Linked Lists -...

精选分类

物理引擎

学习

导航网格

学习

UE

学习

日语初级

学习

GAME202高质量实时渲染

学习

Games101图形渲染

学习

python

学习

cpp

学习

文章列表

4.7k 4 分钟

# Unreal Iris(五)BaseLine && DeltaCompression 增量更新是 Iris Replication 的新功能,其最大的优势在于可以有效减少对象的复制内容,提高整个 Replication System 的复制效率。 # 相关配置 只有配置了的 ClassName 才会开启增量同步。 [/Script/IrisCore.ObjectReplicationBridgeConfig];...
4k 4 分钟

# Unreal Iris(四)DataStream 本章主要介绍 UObject 对象的数据在整个 Iris Replication System 的流向。 # UDataStreamChannel Iris Replication 和 Unreal 原生的 Replication 最大的不同就在于 Channel。原生版本下每个 Connection 中的每个 Actor 都会有单独的 Channel,然后状态信息会被记录在对应的 Channel 中。而 Iris 中一个 Connection 只会有一个 DataStreamChannel 负责同步所有的 Actor,而所有 Actor...
6.5k 6 分钟

# Unreal Iris(三)Filtering && Prioritization Unreal Iris 并不支持 ReplicationGraph,取而代之的提供了 Filtering System 和 Prioritization。虽然目前还没有 ReplicationGraph 强大,但是性能方面有了很大程度的提升。 # DirtyNetObjectTracker Iris 的 Filtering 并不是每帧都需要处理所有对象,而是通过 DirtyTracker 追踪每一帧中变化的对象,然后通过 Filtering 得到这些对象应该出现在哪些...
12k 11 分钟

# Unreal Iris(二)ReplicationState ReplicationState 是 Unreal Iris Replication System 中用于描述对象同步状态。要完成对于状态数据的同步需要多个模块的分工合作: NetSerializer:针对网络同步对象的序列化和反序列化规则。 ReplicationStateDescriptor:针对 UObject 中各个成员,在 Replication System 中的如何说明以及应用何种规则的描述。 Protocol:上述两者结合,对 UObject...
5.9k 5 分钟

# Unreal Iris(一)概述 Iris Replication System 中对于对象关系的组织形式比较晦涩,为了尽可能的节省内存开销,大量使用了 BitArray 以及各种 Bit 运算提效,因此如果对于整个 Iris Replication System 中各个数据之间的关联关系没有大致认知的情况下,很容易迷失在错综复杂的关系网中。本节主要针对 Iris 中比较常见的数据源做个整体性的宏观的梳理。 # 基本概念 # FNetRefHandle && FNetHandle FNetRefHandle...
19k 17 分钟

# Unreal Chaos 导出为 PhysX 物理文件 # 概述 随着 Unreal 5.0 的发布,PhysX 库也从 Unreal 的源代码中被移除。Unreal 自此不再支持 PhysX 库,转而使用自研的 Chaos。随之而来的问题是:项目如果升级到 Unreal 5.0+ 版本,就必须放弃 PhysX 库,对于客户端来说影响比较有限,毕竟 Unreal 官方提供了全套的解决方案。但对于不使用 DS 的服务器来说,如果需要用到物理场景的数据,就变得棘手了起来。 常规管线中,客户端一般会通过 PhysX 库自带的序列化接口,把场景中 AActor 绑定的物理对象加入到导出容器内,经由...
3.4k 3 分钟

以下为个人学习笔记整理。参考 PhysX SDK 3.4.0 文档,部分代码可能来源于更高版本。 # PhysX——Serialization 篇 本文基于实现的角度,对 PhysX 中序列化和反序列化相关内容做了比较详细的梳理。对于想要了解其中原理或者希望动手修改序列化内容的开发者应该有所裨益。 # 概述 和其他的序列化程序不同,PhysX 中的对象由于存在着些许依赖关系。因此需要花费较大的精力在关系图的建立上,这也是整个序列化流程中较为重要的一环。 # 常用容器介绍 让我们先来看看序列化中常见的几个容器,这有助于我们理解序列化中对于关系的处理: #...
24k 22 分钟

# Unreal ReplicationGraph 篇 # 概述 ReplicationGraph 作为 Unreal 引擎的核心功能,提供了多人游戏下的网络复制。为了适应不同游戏场景和特殊业务需求,ReplicationGraph 提供了一套可扩展可定制化的设计模板,通过抽象同步过程,把关联的 Actor 和 Connection...
14k 13 分钟

# Unreal RPC RPC 在 Unreal 中被广泛运用,是除了 Replication 之外唯二的数据传输方式(另一个是手动压解的收发包模式)。 RPC(Remote Procedure Call)远程过程调用,简单来说就是像执行本地函数一样的调用远程服务接口,简化调用编码复杂度,那么在 Unreal 中具体是如何实现的呢? # RPC 函数定义 这里以 ServerSetReplicatedTargetData 函数为例,详细了解一下 Unreal 中关于 RPC 的定义: UFUNCTION(Server, reliable, WithValidation)void...
16k 15 分钟

本篇内容和源码均参考 UE5。 # Unreal 握手 && 登录流程 # 握手包结构 先来了解一下握手包的结构: 主要由 5 个部分组成: MagicHeader:暂未使用的空包头。 SessionID && ClientID:历史会话 ID(用于重连)及客户端 ID。 包体:握手包的数据块,其内又可以分为三个部分: 基础数据块:主要包含基本的包信息如包类型、客户端版本、客户端包编号等。 密钥 ID:加密使用的服务器密钥编号。 包时间戳和 Cookie 信息:Cookie 是通过密钥 ID 对应的密钥对时间戳 + 客户端...