跳至正文

3 月:大规模优化与 500 名玩家齐聚一堂!

· 13 分钟读完
Gabriel • SyedMuhammad
lead developer™

海量性能优化、500 名玩家同屏、默认角色包、载具操控修复、全新脚本方法、游戏内服务器列表、团队改进、新配置项以及更多精彩内容!

欢迎阅读我们上个月最新更新的汇总!

Zenkai 突破 500+ 玩家!​

我们非常自豪地宣布,Zenkai(全新的法国 🇫🇷 忍者 RP 服务器)已实现 500 名玩家同时在线并在同一个服务器上!

这对我们和 Zenkai 团队而言都是一项巨大的成就!我们可以看到 nanos world 在地图上拥有数百名玩家和数千个实体时依然表现出色!网络占用非常稳定且低开销,服务器 CPU 使用率平稳运行,极少出现峰值!

数百名玩家在同一地图上的 Zenkai 总览

Zenkai 的成功证明了 nanos world 是一个强大且可靠的平台,足以承载宏大的游戏模式项目。 Zenkai 团队致力于打造沉浸式忍者 RP 体验的努力得到了回报,我们非常期待继续突破极限!

如果你还没有加入,快去 Zenkai 的 Discord 看看吧! 🥷

Zenkai 完整类

我截取的一些幕后截图:

Zenkai 幕后截图

全新 default-characters 包​

我们创建了一个全新的 default-characters 包,其中包含了所有实现为 Class 的原生角色,可轻松生成并用于你的项目中。

每个角色都已经配置了各自的材质、自定义网格体或衣物。

使用示例:

Server/Index.lua
local adventure_male_b = AdventureMaleB(Vector(0, 0, 100), Rotator())
local male = Male(Vector(0, 0, 100), Rotator())
local post_apocalyptic = PostApocalyptic(Vector(0, 0, 100), Rotator())
local chicken = Chicken(Vector(0, 0, 100), Rotator())
...

它们包含基础的 NPC 行为,可以四处移动并在受到伤害时逃跑。

鸡​

我们还使用 CharacterSimple 在该包中添加了一个全新的 Chicken 类,你甚至可以附身操控它!

鸡

服务器性能全面革新​

Zenkai 在地图上拥有数百名玩家和数千个实体,正不断推高 nanos world 的极限,这是一次绝佳的压力测试,也让我们找到了若干瓶颈与改进空间。因此,本月我们在服务器性能与优化方面做出了重大改进。

距离优化​

我们实现了一套全新的距离优化系统,可大幅减少远距离 Actor 的网络流量。服务器不再为每位玩家持续同步所有 Actor 快照(位置/旋转/速度),而是根据距离智能降低同步频率。

该系统可通过 Config.toml 中的 distance_optimization 设置或控制台命令进行配置:

Config.toml
# 通过减少来自远距离 Actor 的同步来提高网络利用率的距离优化级别 (0 - 9)
# (0) 禁用,(4) 是一个不错的中间值,(9) 最激进
distance_optimization = 4

随着 Actor 距离玩家越来越远,其同步率会线性降低,直到达到最大距离后完全停止同步。在包含大量实体的大型地图上,这能将网络占用最高降低 80%,同时依然保证附近玩家拥有良好的体验!

快照同步批处理​

我们重做了服务器向客户端同步 Actor 位置/旋转/速度的方式。

此前,我们总是针对每个更新的 Actor 发送独立的网络数据包来同步快照,这可能导致繁忙的服务器每秒产生数千个数据包。

现在我们将所有快照更新打包在一起,并在每个 Tick 中通过单次网络调用发送,从而大幅降低开销并提升性能。

角色性能​

我们对 Character 和 CharacterSimple 的实现进行了多项改进,以降低它们的 CPU 及网络开销,尤其是对于不需要完整模拟或同步的远处角色。

我们根据距离和网络主控动态启用/禁用多个组件和功能,这为包含大量角色的服务器带来了显著的性能提升;例如移动组件、相机组件以及多个 Tick 函数,现在都会根据需要自动激活。

语音通话重做​

我们重构了 VOIP 系统,以提升性能、减少网络占用并降低语音卡顿/断音现象。

现在 VOIP 音频数据的发送更加快速高效,能更好地应对网络状况并降低服务器端的 CPU 使用率,同时确保不会阻塞其他更关键的网络调用。

此外,我们通过在客户端语音传输中添加缓冲区,改善了微卡顿/断音问题。

文件传输系统​

我们降低了文件传输的优先级,以防止其干扰关键的游戏数据。此外,借助全新的 max_file_transfer_rate 设置,你现在可以控制用于文件传输的最大带宽,确保即使在玩家下载大型资产或脚本文件时,服务器依然能保持快速响应。

劣质连接​

我们新增了一套系统,可自动检测劣质连接并踢出触及最大挂起网络缓冲区的玩家,因为这此前会导致服务器不同步和不稳定。

Steam 维护​

现在当 Steam 因维护而宕机时,玩家将不再会被踢出服务器,允许他们在 Steam 服务中断期间依然保持连接并继续游玩。

更小的数据包​

此外,我们成功缩减了所有网络数据包的大小,改善了体积占用并降低了每次网络调用的整体网络开销。

脚本与 API​

我们为脚本 API 添置了大量全新方法、事件与改进:

新方法​

改进的方法​

新事件​

新枚举​

  • 新增枚举 SoundType:Ambient(受新增的 ** Ambient Sound** 音频设置影响)。

载具操控修复​

我们终于修复了一个困扰已久的载具操控和驾驶问题;此前该功能完全损坏,导致手感极差且非常打滑。

现在配置载具设置可以正确地影响其手感和操控性能。

已修复的载具操控

此外,我们添加了用于配置载具转向和传动设置的新方法,从而大幅提升对驾驶操控手感的控制力:

线程池系统​

我们实现了一套全新的线程池系统来处理所有异步操作:

新增命令行参数 --thread_pool_count,用于配置为异步操作初始化的线程数量。默认情况下,它将初始化 8 个线程或当前可用的 CPU 核心数(取二者中较大值)。

这通过按需复用工作线程,避免了为每个新异步操作重新分配线程,从而提升了服务器性能。

身份验证排队系统​

当大量玩家同时加入时,Steam 身份验证有时会对服务器实施速率限制。我们添加了身份验证队列来优雅地应对此问题:

玩家将排队并以平稳的速率进行验证,防止触发 Steam 速率限制错误,即使在海量并发连接时也能顺利加入。

全新光线追踪设置​

全新光线追踪设置

我们在视频设置中添加了全新的光线追踪设置!你现在可以独立开启或关闭全局光线追踪、硬件光线追踪或超量光源系统。

加载屏幕增强​

具备全新阶段显示的改进版加载屏幕

加载屏幕现在可以更清晰地展示初始阶段的状态,目前会显示:

  • 正在发送客户端信息
  • 正在等待 Steam 认证
  • 正在获取服务器需求

Windows 任务栏进度条​

现在 Windows 任务栏 将只显示一个从 0 到 100% 的连续进度条,而不会在每个阶段重复在 0 到 100% 之间来回跳动,从而提供更好的进度直观感受。

全新原生资产​

我们在默认资产包中新增了两个 Fab 资产包:

查看所有默认资产assets-modding/default-asset-pack/default-assets-list

新配置与命令​

新配置​

我们在 Config.toml 中新增了若干服务器配置项:

Config.toml
# 语言(国家/地区代码)
language = "br"
# 最大同步率(Hz,即每秒同步次数)(1 - 30)- 控制玩家之间以及与玩家相关的
# 位置/旋转/速度等 Actor 的同步速率 - 固然受到刻速率的限制
max_sync_rate = 30
# 每个客户端的最大文件传输速率(KB/s)(128 - max_send_rate)- 限制每个已连接玩家的
# 文件传输带宽 - 这将受到 'max_send_rate' 设置的限制
max_file_transfer_rate = 1024
# 距离优化级别,通过减少远距离 Actor 的同步来优化网络占用(0 - 9)
# (0) 禁用,(4) 是折中的推荐值,(9) 最激进
distance_optimization = 4

新增服务器语言国旗​

服务器列表中的服务器语言国旗

全新的 language 设置允许指定服务器的语言,并会在服务器列表中显示对应的国旗。

max_send_rate 变更​

破坏性更改

我们将 max_send_rate 的单位定义从 MB/s 改为 KB/s,并将默认值设置为 1024 KB/s。

如果你配置了自定义的 max_send_rate 设置,可能需要进行相应调整(乘以 1024)。

全新控制台命令​

以及全新的控制台命令,允许你在无需重启服务器的情况下实时修改这些设置:

  • profiling
  • log_level
  • max_send_rate
  • max_file_transfer_rate
查看所有服务器配置core-concepts/server-manual/server-configuration

Esc 菜单中的服务器列表​

可从 Esc 菜单直接访问的服务器列表

现在,即使你已经连接到了某个服务器,也可以直接浏览并连接至其他 nanos world 服务器!

再也不需要先断开连接再通过启动器重新连接了!

Vault Improvements​

Markdown 支持​

资源库中的资源描述和更新日志现在支持简化的 Markdown 语法:

# 标题
## 标题
### 标题
**粗体文本**
*斜体文本*
- 列表项

“管理”标签页中的沙盒描述

这能让创作者们将自己的资源库资源排版得更加美观且易于阅读!

“信息”标签页中的沙盒描述

团队身份组​

资源库团队现在拥有一套完善的身份组系统:

  • 管理员 (Admin):管理团队成员、编辑团队信息、管理所有资源
  • 维护者 (Maintainer):管理资源与更新
  • 开发者 (Developer):可以推送资源更新
  • 成员 (Member):拥有受限权限的团队成员

你可以在游戏内的 管理 标签页中点击你的团队,从而管理团队身份组和信息:

游戏内团队管理

Updated Dependencies​

我们更新了若干关键依赖项:

  • 虚幻引擎 5.7.4:
  • DLSS 8.5
  • Steam SDK 1.64
  • Sentry 1.9.1

漏洞修复与稳定性​

本月我们修复了 40 多个漏洞、致命错误和崩溃。请在我们的 Changelog Discord 频道查看完整变更:

Changelog Discord 频道https://discord.com/channels/124107916432113666/680526360015274047

结语​

三月又是成果丰硕的一个月! Zenkai 服务器在 nanos world 上运行并突破 500+ 玩家,证明了 nanos world 已经为承载大型项目做好了准备。

距离优化系统和 Actor 同步效率的改进为服务器性能带来了颠覆性的提升。我们现在看到服务器可以在网络开销和 CPU 占用极低的情况下处理数千个实体。

这些改进共同使 nanos world 成为一个更具可扩展性的平台,能够支持更有野心和规模的项目。无论你是运行一个小型角色扮演服务器还是大型沙盒,nanos world 现在都能更好地从容应对!

我们仍在持续迭代和优化服务器性能,并在未来几个月规划了大量改进,敬请期待更多更新!

感谢大家在优化 nanos world 期间给予的耐心与支持。我们致力于将其打造成支持多玩家游戏模式的最佳平台! 💙

下一次更新再见!

Ko-fiKo-fi