【Unity】万人同屏高级篇, 自定义BRG&dots合批渲染,海量物体目标搜索

这篇具有很好参考价值的文章主要介绍了【Unity】万人同屏高级篇, 自定义BRG&dots合批渲染,海量物体目标搜索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 博文介绍了最基本的实现原理,有些老板懒得折腾,所以特意熬了几个秃头的夜把RVO、BRG、GPU动画、海量物体目标搜索等高度封装成了开箱即用的插件。 划重点!!此方案是绕开Entities(ECS),不用写一行ECS代码,现有MonoBehavior开发工作流享受Entities渲染的性能。已有项目也能使用此方案开挂,无需代码重构!。Wechat: SunSparkStudio

性能压力测试包自取:

 PC 10万动画人同屏对抗:https://pan.baidu.com/s/1CgpTV0TuFagobtAf7k38OA?pwd=xwsf 
安卓 1万动画人同屏避障: https://pan.baidu.com/s/1RkXyVXt_he5uCgizTSA42A?pwd=k0ji 

插件使用视频教程:

Unity低成本性能开挂 gpu动画+dots graphics万人同屏渲染 jobs rvo2 弹幕游戏海量单位索敌

Unity万人同屏海量物体合批渲染

Unity万人同屏海量物体目标搜索

海量单位高性能索敌攻击方案压测

移动端测试AOT和HybridCLR热更性能对比

博文开发测试环境:

  • Unity:Unity 2022.3.10f1,URP 14.0.8,Burst 1.8.8,Jobs 0.70.0-preview.7,热更HybridCLR 4.0.6
  • PC:Win11,CPU i7-13700KF,GPU 3070 8G,RAM 32G;
  • 移动端:Android,骁龙8 gen2,RAM 12G;

上篇博文通过最基本的自定义BRG(Batch Renderer Group) + RVO避障实现了10万人同屏动态避障:【Unity】十万人同屏寻路? 基于Dots技术的多线程RVO2避障_TopGames的博客-CSDN博客

 上篇博文的BRG功能并不完善,不支持多种Mesh和Material渲染,没有拆分渲染批次(Batch),没有裁剪(Culling)处理(即不会剔除相机视口外的物体)。并且没有根据渲染数量拆分多个Draw Command。

BRG代码写起来并不容易,此博文基于Unity中国DOTS技术主管开源的一个BRG示例工程修改,这里仅描述主要的实现原理:

参考文章:Unity Open Day 北京站-技术专场:深入理解 Entities Gr - 技术专栏 - Unity官方开发者社区

BRG示例工程:
https://github.com/vinsli/batch-rendererhttps://github.com/vinsli/batch-renderer

 另外也可以看看Unity官方BRG测试案例,官方案例是把当前已经创建的MeshRenderer禁用然后用BRG接管渲染:

https://github.com/Unity-Technologies/Graphics/tree/master/Tests/SRPTests/Packages/com.unity.testing.brg

 实现目标:

为了方便使用BRG功能,需要封装一个BatchRenderComponent脚本。不使用ECS,仅使用传统创建GameObject的方式与BRG无缝衔接,也就是对于海量物体不使用Unity Renderer组件,用封装后的BRG无感知接管物体的渲染,最大程度上不改变传统工作流的同时大幅提升性能;

其中GameObject是只有Transform组件的空物体,渲染由BatchRenderComponent接管,进行合批渲染。由于Transform只能在主线程使用,当数量级庞大时每帧修改Transform位置/旋转会导致掉帧,所以仅当这个GameObject挂载子节点(如,子节点包含特效,需要跟随人物移动)时才需要开启每帧同步Transform位置,这样可以大幅节省开销。

通过此方法可以完美绕开Entities(ECS),同时也绕开了Entities(ECS)对开发成本和效率影响,以及ECS当前不支持从文件名加载资源、不支持热更的痛点。

最终效果:

PC端5W人, AOT模式(不使用HybridCLR),开启阴影:

【Unity】万人同屏高级篇, 自定义BRG&dots合批渲染,海量物体目标搜索,Unity,unity,游戏引擎,万人同屏,dots,jobs

Android端5K人,AOT模式(不使用HybridCLR),开启阴影:

【Unity】万人同屏高级篇, 自定义BRG&dots合批渲染,海量物体目标搜索,Unity,unity,游戏引擎,万人同屏,dots,jobs

 Android端5K人, HybridCLR热更模式,开启阴影:

【Unity】万人同屏高级篇, 自定义BRG&dots合批渲染,海量物体目标搜索,Unity,unity,游戏引擎,万人同屏,dots,jobs

测试中一帧创建1000个物体时会有明显卡顿,这是Unity实体化GameObject本身的性能问题,实际项目中海量物体的创建并不要求实时性,可以通过队列分散到多帧创建以解决卡顿。

 一,支持多Mesh/多Material

【Unity】万人同屏高级篇, 自定义BRG&dots合批渲染,海量物体目标搜索,Unity,unity,游戏引擎,万人同屏,dots,jobs

 使用BRG必须开启SRP Batcher,  SRP支持相同Material合批。因此支持多Material就需要根据不同Material拆分Batch,针对不同Material使用多个Batch渲染。文章来源地址https://www.toymoban.com/news/detail-713411.html

每个物体需要向GPU上传以下数据:

  • 两个3x4矩阵,决定物体渲染的位置/旋转/缩放;
  • _BaseColor,物体混合颜色;
  • _ClipI

到了这里,关于【Unity】万人同屏高级篇, 自定义BRG&dots合批渲染,海量物体目标搜索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity 万人寻路(dots版本)

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

    2024年02月08日
    浏览(30)
  • 最新Unity DOTS Instancing合批:如何针对单个渲染实体修改材质参数

    最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去的动画时间。但是在做大规模战斗控制的时候,有10000+的小

    2024年01月22日
    浏览(35)
  • DOTS Instancing合批:如何针对单个渲染实体修改材质参数

      最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去的动画时间。但是在做大规模战斗控制的时候,有1000

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

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

    2024年02月16日
    浏览(24)
  • Unity场景物体动态合批

    1)Unity场景物体动态合批 ​2)Unity内置音频Android平台播放延迟问题 3)对Unity Package中的Shader打包避免冗余的方案 4)UnityEditor PropertyField并排显示错误 这是第307篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读

    2024年02月08日
    浏览(32)
  • unity 性能优化之合批和剔除

    批次对渲染的性能影响是比较大的,批次过多会导致cpu提交的次数过多,导致每帧渲染时间过长,所以我们需要对其优化,减少Bathches数量和SetPassCall次数。 批次合并的方法有多种,下面一一列出: 将相同材质的Mesh,合并为一个新的Mesh,这样一次渲染,最方便调节,虽然现

    2024年02月15日
    浏览(29)
  • Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案

    Unity : 2020.3.37f1 Pipeline : BRP (另一个项目在 2021.1.xx 的 LTS 下的 URP 管线同样如此,目测:因为 UGUI 不受渲染管线切换而变化) 便于索引,记录搬砖 可以看到,下图 Canvas 的 Render Mode 在使用: Screen Space - Overlay 模式下的DC为 8 这里导致合批失败的有两个问题: 图片显示有相互的

    2024年02月13日
    浏览(30)
  • Unity GPU Instancing合批_如何基于单个的实体修改材质参数

    最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去的动画时间。但是在做大规模战斗控制的时候,有10000+的小

    2024年01月21日
    浏览(33)
  • DOTS介绍+Unity DOTS-MAN小游戏项目实战

    DOTS是Unity在17年左右提出的一个概念,其核心是ECS。 提示:以下是本篇文章正文内容,下面案例可供参考 全称:(Multi-Thread)Data-Oriented-Tech-Stack (多线程式)数据导向型技术堆栈 实体组件系统(ECS) - 提供使用面向数据的方法进行编码的框架。在Unity中它通过Entities软件包进行分发,

    2023年04月13日
    浏览(27)
  • Unity DOTS技术

    目录 一.概述 二.DOTS详解 1.开发环境搭建 2.简单ECS程序  2.调试功能 3.常用API  4.系统之间的互相干扰 5.实体Entity的创建查找删除 6.使用批处理Gpu Instancing优化性能 7.World,System,Group 1)World 2)System 3)Group 8.组件Component介绍 1)组件Component的添加修改删除 2)ShareComponent 3)状态

    2024年02月05日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包