FrooxEngine到底是个什么?
FrooxEngine 是 Resonite 使用的主要游戏引擎。它主要由 Frooxius 拥有并开发,尽管 Resonite 团队的其他成员也从事该引擎的工作。
FrooxEngine 本质上是 Resonite 的主控制器。它负责:
- 指定数据模型,包括值类型和引用类型,以及跨客户端同步此数据
- 大多数组件的行为
- 在本地数据库中读取和写入数据
- 链接和使用外部库实现其他功能,包括但不限于:
- 原通量
- SkyFrost 用于与云端通信
- Unity 用于运行时和渲染
- 用于数学运算的 MathX
- 用于物理计算的 BepuPhysics2
FrooxEngine的基础工作原理 (当前)
FrooxEngine 在具有单核渲染的多核处理架构(因此它在多核上运行)上工作。这意味着,如果你一次向一个世界添加大量内容,引擎必须通过一个线程将其发送到渲染系统。这可能会导致性能问题,因为 FrooxEngine 必须等待渲染引擎接收所有插槽更新并生成场景。例如,如果您从计算机导入文件,则在单独的线程上完成,允许它并行运行,不需要调度程序。而复制插槽之类的事情必须同步完成,因为渲染引擎实现试图减少不稳定性和崩溃。但这并不总是有效。
当谈到在 Resonite 中做很多事情时,FrooxEngine 是管理者,确保用于导入的库(目前为 Assimp)和物理库(目前为 BepuPhysics2)协调地协同工作以创建游戏。
目前,FrooxEngine 的许多不稳定问题在很大程度上归咎于渲染引擎。这是因为当前的实现使用了 Unity,许多玩家喜欢将其实现称为“Unity 就像僵尸,被死灵法师 FrooxEngine 在绳子上傀儡”“”
Unity作为渲染引擎的实现技术原理
FrooxEngine 本身不运行在 unity 上,所有的游戏计算和逻辑都是通过引擎完成的。Unity 对正在发生的事情的逻辑一无所知,因此必须由 FrooxEngine 告诉它该怎么做。游戏初始化后,任何侧加载的 DLL(如模组加载器)都会立即加载,以便它们可以执行适当的补丁。接下来,游戏会一目了然地读取系统硬件,找出正在使用的音频设备和 VR 硬件/桌面硬件,以便它可以采取相应的行动。与典型的程序没有太大区别。接下来,游戏启动 Unity,Unity 在场景中有一个脚本,用于启动 FrooxEngine,然后启动用户空间。
接下来发生的事情与任何其他使用 Unity 的游戏不同。FrooxEngine 根据 FrooxEngine 插槽和组件创建了世界外观的层次结构,然后在将其转换为 Unity C# 对象类型而不是 FrooxEngine 类型后,将生成的内容强制推送到 Unity 中。在此之后,FrooxEngine 每帧读取 Unity 的场景,检查更改,然后写入这些更改以保持 FrooxEngine 的场景和 Unity 的场景同步。
这是通过 C# 中一组名为“Connector<T>”的类完成的,它是代码中的表亲。名为“UnityFrooxEngineRunner.dll”的 DLL 处理需要从 FrooxEngine 类转换为 Unity 类的不同类型的组件。当它们被翻译时,FrooxEngine 会跟踪这些 Unity 对象,并处理 FrooxEngine 和 UnityEngine 中对象的创建、销毁和值的同步。
现在,如果两者不同步,并且 FrooxEngine 尝试删除不再存在的对象,则将发生 Unity 崩溃。这就是为什么 Unity 被归咎于性能和崩溃问题的技术解释,因为它没有正确处理删除。
我的意见
这个游戏的优化...让我想起了秘密实验室,单线程和多线程的问题一直是游戏优化的一个麻烦。
No comments to display
No comments to display