【Unity】万人同屏, 从入门到放弃之——多线程RVO避障

这篇具有很好参考价值的文章主要介绍了【Unity】万人同屏, 从入门到放弃之——多线程RVO避障。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity万人同屏动态避障 GPU动画 Entities Graphics高性能合批渲染插件的使用_哔哩哔哩_bilibili

不使用Dots能否实现海量物体同屏?很多场面宏大的游戏,尤其是Rougelike游戏,动辄成千上万满屏怪,割草清屏的快感酣畅淋漓,所以这类游戏非常火爆,然鹅是怎么做到的呢?

首先,海量移动物体用寻路是行不通的,即使是支持多线程的A * Pathfinding Pro区区三五百个就开始严重掉帧。

测试环境:

Unity 2022.3.9f1, URP 14.0.8

模型顶点数1195, LOD1顶点数858,LOD2定点数530

PC:i7-13700KF + 3070 8G;

手机端Android:骁龙8 gen2;

PC端RVO避障测试:

【Unity】万人同屏, 从入门到放弃之——多线程RVO避障,Unity,unity,千人同屏,RVO,GPU动画

 PC端Unity Editor下压测,区区5000人就快掉到50帧, 先帝创业未半而中道崩殂。CPU端性能消耗主要再RVO避障每帧构建KDTree计算,然而用上多线程基本问题不大,最大的瓶颈在GPU;

PC, 5000人:

【Unity】万人同屏, 从入门到放弃之——多线程RVO避障,Unity,unity,千人同屏,RVO,GPU动画

 手机端骁龙8 gen2真机,3千人就已经扛不住了,掉到24帧。用的HybridCLR热更解释执行,不过即使是AOT也只能再高出5 - 10帧左右。

手机, 3000人:

【Unity】万人同屏, 从入门到放弃之——多线程RVO避障,Unity,unity,千人同屏,RVO,GPU动画

动画部分毫无疑问,不能用Animator。是通过把骨骼动画每帧的顶点信息写到Texture,运行时使用Mesh Render + Shader从中从顶点Texture中把位置读出来用,SRP会自动合批:

【Unity】万人同屏, 从入门到放弃之——多线程RVO避障,Unity,unity,千人同屏,RVO,GPU动画

使用LOD:

Okay, 压力都来到了GPU, 那就降低顶点给GPU降降温吧,使用LOD功能,  LOD1 顶点降低30%, LOD2 降低60%的情况下,果然效果显著:

PC端5000人, 帧数几乎翻倍,100帧左右:

【Unity】万人同屏, 从入门到放弃之——多线程RVO避障,Unity,unity,千人同屏,RVO,GPU动画

 手机端3000人, 也几乎翻倍, 帧数来到了44:

【Unity】万人同屏, 从入门到放弃之——多线程RVO避障,Unity,unity,千人同屏,RVO,GPU动画

 就这? ??而且这是在没有复杂游戏逻辑的情况下的表现,实际项目中还会大打折扣。看来,使用传统方式不要说万人同屏,千人都费劲。

结论: 传统方式极限发挥也就是千人同屏的水平,放弃!

不过RVO避障还是需要的。测试项目基于开源RVO2 C#版修改:GitHub - snape/RVO2-CS: Optimal Reciprocal Collision Avoidance (C#)

 主要对原版RVO做了以下修改:

1. 使用Easy Threading并行刷新RVO Agent;

2. 增加删除Agent的功能;

3. 增加Agent避障权重设置,如,把到达目标位置的Agent权重设置为0后, 它就不会被其它Agent挤走;

4. 增加形状障碍物,BoxObstacle、 CircleObstacle、EdgeObstacle;

5. 性能优化,使用ArrayPool取代每帧创建数组;

6. RVO.Vector2改为Unity Vector2,以及RVO.Math优化,避免原版分母为0导致的异常。

RVO2 Unity修改版:GitHub - sunsvip/UnityRVO2: RVO for unity

注意:

如上使用的多线程并非Dots中的JobSystem,因此线程间数据传递会导致大量gc。

强烈推荐Job System版RVO:【Unity】十万人同屏寻路? 基于Dots技术的多线程RVO2避障_TopGames的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-717087.html

到了这里,关于【Unity】万人同屏, 从入门到放弃之——多线程RVO避障的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity RVO动态避障实战

    算法原理 Unity RVO算法的原理基于互惠速度障碍(Reciprocal Velocity Obstacles)的概念。在每个时间步内,算法计算出每个物体的速度障碍,然后通过调整速度来避免与其他物体发生碰撞。速度障碍是一个几何体,它表示了在当前时间步内,物体在不与其他物体发生碰撞的前提下可

    2024年02月04日
    浏览(26)
  • Unity 多相机 同屏显示

    一 首先了解: 相机和Canvas 的渲染先后关系 什么是相机的 渲染顺序 ? 答:简单理解就是 用毛刷  刷墙面,先刷的,会被后刷的 挡住 。 列如:相机01: 先渲染的大海,相机02:后渲染的比基尼美女。那么呈现的效果就是:比基尼美女站在大海前面。 毛刷理解方式:一面空

    2024年02月16日
    浏览(34)
  • Unity 万人寻路(dots版本)

    时间:2023-7-29 北京下雨,公司停电,回家早了,更新一下。 寻路模块,还是前前后后,打磨了2个月,中间穿插着搞很多其他的功能,有些螺旋迭代的味道。 进入正题: 设计团队,会从游戏性角度考虑,提出很多需求。 1,单位之间的规避,模型不能穿插 2,建筑物规避,模

    2024年02月08日
    浏览(39)
  • Flask从入门到放弃五(SQLAlchemy介绍与快速使用、创建表插入数据、Scoped_session线程安全、基本增删查改、表模型、Flask-SQLAlchemy、Migrate的使用)

    SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 SQLAlchemy的组成部分有: Engine 框架的引擎 Connection Pooling 数据库连接池 Dialect 选择连接数据库的

    2024年02月04日
    浏览(51)
  • Docker从入门到放弃

    看完我这里,就彻底入门了,如果对你有帮助,欢迎点赞+收藏❤️+评论噢~ 按部就班,先安装.. 在CentOS 7上安装Docker主要涉及添加Docker的官方仓库,然后从该仓库安装Docker CE(社区版) 1.安装所需的包: yum-utils 提供 yum-config-manager 工具,而 device-mapper-persistent-data 和 lvm2 是

    2024年04月14日
    浏览(35)
  • 【Docker】 Docker 入门到放弃

    Docker 容器生命周期 // 查看镜像 // pull 下载镜像 // 查看所有的镜像 // images 查看镜像 ID // search 搜索镜像 // rmi -f 删除镜像 // tag 标记本地镜像 // save 保存镜像 // load 加载镜像 // events 从服务器获取实时事件 注意 注意: 先了有镜像 – 才能创建容器 ** pull 下载镜像 ** run 创建容

    2024年01月23日
    浏览(34)
  • 性能测试从入门到放弃(一)

    性能测试是观察系统在给定的运行环境下,测试场景中系统的性能表现是否符与预期目标一致,评判是否存在性能缺陷,根据结果识别性能瓶颈。 运行环境:硬件服务器、操作系统、网络、数据库、web服务器、应用服务器等都为系统的运行环境。 测试场景:用户如何使用系统

    2023年04月09日
    浏览(45)
  • 大数据入门到放弃第一天:linux的入门

            虚拟机(Virtual Machine,简称VM)是一种在物理计算机上模拟运行的软件实体。它通过虚拟化技术,将一台物理计算机划分为多个虚拟的逻辑计算环境,每个环境都可以独立运行操作系统和应用程序。         虚拟机使得一台物理计算机可以同时运行多个操作系

    2024年02月05日
    浏览(42)
  • 【pyspark从入门到放弃】DataFrame

    pyspark支持通过pypip、conda下载,或者手动下载。 笔者通过 pip install 命令从pypip下载并配置安装了3.5.0版本的Spark。 使用spark的第一步就是拿到一个 SparkSession 对象。最简单的方法是 即,直接使用默认参数创建实例。也可以做一些配置,比如 创建DataFrame DataFrame 是类似 pandas 库中

    2024年01月16日
    浏览(38)
  • 深度学习从入门到不想放弃-6

       这节要讲完距离基础部分就真完事了,不继续在基础中求得基础了,我发现也没人看        书接前文深度学习从入门到不想放弃-5 (qq.com)        前文书写到要合理的设计特征是什么概念,我们再拿两个例子复习一下       比如一个卖车网站,上节我们讲过对物体识别

    2024年01月19日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包