码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【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避障测试:

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

    PC, 5000人:

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

    手机, 3000人:

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

    使用LOD:

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

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

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

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

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

    不过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博客

  • 相关阅读:
    liburl请求http
    自己实现 SpringMVC 底层机制 系列之-实现任务阶段 7- 完成简单视图解析
    【GO】LGTM_Grafana_Tempo(2)_官方用例改后实操
    Nacos安装
    260. 只出现一次的数字 III
    22-07-31周总结
    14种神笔记方法,只需选择1招,让你的学习和工作效率提高100倍!
    winget包管理器
    1.11 for语句(Python)
    docker安装postgresql数据库
  • 原文地址:https://blog.csdn.net/final5788/article/details/132891595
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号