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

 视频中万人同屏方案(gpu动画、渲染、索敌、避障等功能),可某宝搜【店铺】:【游戏开发资源商店】获取整套方案源码。

划重点!!此方案是绕开Entities(ECS),不用写一行ECS代码,现有MonoBehavior开发工作流享受Entities渲染的性能。已有项目也能使用此方案开挂,无需代码重构!

万人同屏对抗demo测试包下载,以及万人同屏方案性能测试,有需要的老板可以某宝【搜店铺】:【游戏开发资源商店】:https://pan.baidu.com/s/1ML0DC8s0RkkTAraN9maltw?pwd=blueicon-default.png?t=N7T8https://pan.baidu.com/s/1ML0DC8s0RkkTAraN9maltw?pwd=blue

性能压力测试包自取:

 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-renderericon-default.png?t=N7T8https://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),开启阴影:

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

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

测试中一帧创建1000个物体时会有明显卡顿&#x

  • 33
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Unity屏幕扰动是一种在游戏开发中常见的效果,可以给游戏画面增添动态感。它可以通过自定义层级来实现。扰动效果可以用于模拟物体的震动、爆炸或其他视觉特效。 在Unity中,我们可以通过使用自定义层级来控制扰动效果。首先,需要在项目中创建一个新的自定义层级。可以打开编辑器的Layer Inspector菜单,然后点击“Add Layer”按钮来添加一个新的层级。给这个层级取一个合适的名称,例如"Distortion"。 接下来,在层级视图中,可以将需要应用扰动效果的对象的Layer修改为自定义的"Distortion"层级。可以通过选中对象,然后在层级Inspector的Layer属性中选择"Distortion"层级来完成设置。 然后,在游戏场景中创建一个相机对象。通过将该相机的Culling Mask属性设置为只渲染"Distortion"层级上的物体,可以让该相机只显示被属于该层级的物体。这样,我们可以将扰动效果应用于这些物体。 最后,在脚本中编写相关的扰动逻辑。可以通过使用Unity的Post-processing插件,或者在Update函数中修改物体的位置、旋转等属性来实现屏幕扰动效果。 总而言之,Unity屏幕扰动效果可以通过自定义层级来实现。需要创建一个自定义的层级,并将需要应用扰动效果的对象的Layer设置为该层级。然后,创建一个只渲染该层级的相机,并在相应的脚本中编写扰动逻辑。通过这些步骤,我们可以实现屏幕的扰动效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值