海量物理刚体 高性能物理引擎Unity Physics和Havok Physics的简单性能对比

本文主要是介绍海量物理刚体 高性能物理引擎Unity Physics和Havok Physics的简单性能对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前的博客中我们为了绕过ECS架构,相当于单独用Batch Renderer Group实现了一个精简版的Entities Graphics,又使用Jobs版RVO2实现了10w人同屏避障移动。

万人同屏对抗割草 性能测试 PC 手机端 性能表现 弹幕游戏 海量单位同屏渲染 锁敌 避障 非ECS

 

那么有没有高性能的物理方案呢?当然。万人同屏方案中我们使用RVO接管了移动,使用Jobs批量将RVO坐标同步到BRG中渲染,成功实现了数万人同屏。同样的,数万物理刚体只需要一个jobs版物理引擎,把物理引擎的计算结果(坐标、旋转)同步到BRG渲染,就同样能做到数万物理刚体同屏。

Unity Entities(ECS)方案提供了两套基于jobs的高性能物理引擎,Unity Physics和Havok Physics,其中Havok Physics想必开发者都有所耳闻,据网上消息,现象级游戏《塞尔达-王国之泪》逆天的物理效果就是基于Havok Physics做的修改。

先把物理引擎跑起来看看效果吧:

先下载官方案例:https://github.com/Unity-Technologies/EntityComponentSystemSamples/tree/master/PhysicsSamples

 1. 先制作一个模型prefab,并添加Physics Shape(碰撞体)、Physics Body(刚体)以及ECS特有的Authoring脚本, PhysicsRenderEntity,用于把此刚体prefab转换为Entity。

 2. 添加PhysicsStep脚本(物理引擎)

 Simulation Type:可以一键切换物理引擎,同时安装com.havok.physics和com.unity.physics两个物理引擎后就可以在这里切换,选择使用哪套引擎。

MultiThreaded:多线程计算一定要勾选。

 3. 写一个JobSystem脚本,一直创建物理单位,以测试两套物理引擎的性能:

代码很简单,就不做解释了,直接上代码:

限制刚体上限为2w.

using Unity.Entities;
using Unity.Mathematics;
using Unity.Physics.GraphicsIntegration;
using Unity.Transforms;public partial class SpawnEntitiesSystem : SystemBase
{static float m_Timer;public static int Count { get; private set; }protected override void OnCreate(){base.OnCreate();Count = 0;}protected override void OnUpdate(){var ecbSingleton = SystemAPI.GetSingleton<BeginSimulationEntityCommandBufferSystem.Singleton>();var ecb = ecbSingleton.CreateCommandBuffer(this.World.Unmanaged);if ((m_Timer += SystemAPI.Time.DeltaTime) > 0.2f){m_Timer = 0;foreach (var data in SystemAPI.Query<PhysicsRenderEntity>()){for (int i = 0; i < 30; i++){var spawnPoint = new float3(0, 100 + i, 0);var entity = ecb.Instantiate(data.Entity);ecb.SetComponent(entity, LocalTransform.FromPosition(spawnPoint));}Count += 30;break;}if (Count > 20000){this.Enabled = false;}}}
}

4. 在文本上实时显示物理单位数量:

using UnityEngine;
using UnityEngine.UI;public class DisplayCount : MonoBehaviour
{[SerializeField] Text m_Text;// Update is called once per framevoid Update(){m_Text.text = SpawnEntitiesSystem.Count.ToString();}
}
性能测试:

测试环境比较恶劣,古董机。i5 十代 + 1050Ti, 越恶劣的环境越能体现性能差距。

Unity Physics:

Unity Physics,作为官方物理引擎表现差强人意,2w单位,15帧左右:

 Havok Physics:

2w单位,38帧左右,这个硬件配置下,可以说是逆天了。

 总结:

Havok Physics不愧为老牌物理引擎,2w单位下帧数竟然是Unity Physics的2.5倍。

我们不需要ECS的渲染,那么就可以把第1步的模型Prefab改为空GameObject挂载刚体和碰撞体,这样就可以纯数据物理模拟,我们只需要把空Entity的物理坐标和旋转数值同步到我们的万人同屏方案BRG渲染组件中即可实现海量物理单位同屏,同时绕过ECS的开发方式。

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

这篇关于海量物理刚体 高性能物理引擎Unity Physics和Havok Physics的简单性能对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/754581

相关文章

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺