我想分享一下在实践Entity Component System(ECS)-基于的群体项目的结果。

在我的RTX 2060 AMD Ryzen 7上,我正在同时模拟2000+NPC在单个关卡中。每个NPC都有一个适合FPS游戏的合适碰撞体,没有使用贴图,没有远程AI模拟活动。这些是实际的模拟代理,有自己的视觉和“脑”。

这个项目还包括:

  • 基于弹道的弹道系统(真实弹道具有旅行时间,而不是击中)
  • 基于碰撞的音频系统,即使有成千上万个音频源同时激活,也保持稳定

当我开始这个项目时,我的目标是创建一个真正的无尽群体体验。经过不同方法的研究后,我得出结论,ECS是最佳选择,因为大部分工作负载都可以以大数组的形式处理。

其中一个最大的瓶颈是NPC动画。传统的动画控制器消耗了太多的CPU时间,所以我切换到了预先烘焙的动画。为了使工作流程更容易,我创建了一个编辑器工具,它将动画控制器和动画剪辑转换为ECS系统和预先烘焙的动画数据。这样不仅提高了性能,还给我提供了一个快速迭代NPC动画的可视工作流。

ECS还允许我利用CPU并行化。性能与额外的CPU核心和线程相称。根据性能监视器(我将在评论中附上它),还有几个瓶颈需要优化,但即使在这个阶段,我也非常满意的结果。

如果您有任何关于ECS或/和我的项目的疑问,请随时提问。