Obi插件性能优化

2024-02-18 14:40
文章标签 优化 性能 插件 obi

本文主要是介绍Obi插件性能优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

官方文档:Obi Physics for Unity - Performance

简单总结翻译一下里面我觉得比较有用的

Obi 尽一切努力尽可能快地运行:利用您硬件中的所有处理核心,充分利用 Unity 的 Burst 编译器的矢量化。然而,Obi 执行的物理模拟需要大量数学计算,这意味着您应该努力跳过任何不必要的工作。

1、确保Burst插件的正确使用

后端是解算器(solver)用来推进模拟的实际物理引擎。自 Obi 5.6 起,Burst 成为默认后端。它完全用高性能 C# 编写,利用 Unity 的 Burst 编译器和job系统。它支持所有可以运行jobs并且 Burst 编译器可以编译的平台。与 Oni 一样,它完全基于 CPU,并大量使用多线程和 SIMD。使用 Burst 时,大多数平台(尤其是移动设备)上的性能会稍好一些。因此,如果可能的话,应该优先选择Burst而不是Oni。

可能大家的unity默认是没有装这个插件的,包管理器也找不到它。

这里obi的官方文档有说明如何安装(部分图片自截):

使用 Burst 后端需要安装以下 Unity 软件包:

Burst 1.3.3 及以上
Collections 0.8.0-preview 5 及以上

Mathematics 1.0.1 及以上

Jobs 0.2.9-preview.15 及以上

如果您没有安装这些,ObiSolver 将在检查器中显示警告并尝试回退到 Oni 后端(见下文):

请记住,预览包(Collections和jobs)不会出现在 Unity 的包管理器中,除非您明确启用它们(请参阅 Unity 手册)。在最新的 Unity 版本(2021 及更高版本)中,您可能需要通过 URL 手动查找包。这可以通过单击包管理器一角的加号 (+) 并选择"Add packages by git URL"来完成:

然后您可以在出现的弹出字段中写入包 URL,例如:com.unity.collections 或 com.unity.jobs

至于Burst 后端的完整源代码包含在您的 Obi 安装中,可以在 /Obi/Scripts/Common/Backends/Burst/ 中找到。

请注意,为了在编辑器中使用 Burst 后端时获得正常性能,您必须启用 Burst compilation并禁用jobs debugger, safety checks and leak detection。

另外,请记住,Burst 默认情况下在编辑器中使用异步编译。这意味着模拟的前几帧会明显变慢,因为在场景运行时 Burst 仍在编译作业。您可以在 Jobs->Burst 菜单中启用synchronous compilation,这将强制 Burst 在进入播放模式之前编译所有jobs。

ps.我的unity版本是2021.3.26flc1,mathematics似乎是自带的,不需要手动添加

 2、使用尽可能少的子步数(substeps)和迭代(iterations)。

子步数是 Obi 的主要质量/性能权衡。它们允许您设置模拟的时间分辨率(即模拟更新的频率)。在每个子步骤中,约束都会被评估多次迭代。因此,您使用的子步数和迭代越多,您的模拟就会越准确,但性能也会越差。

根据经验:首先在 ObiSolver 中将所有约束(constraints)迭代设置为 1,在 ObiFixedUpdater 中将子步数设置为 1。然后,慢慢增加子步数(很少需要超过 10 个),直到绳子/布料不太有弹性,并且流体/软体不太有弹性。最后,如果您觉得某种类型的约束需要额外的“魅力”,请尝试对其进行更多迭代。

约束迭代数设置
子步数设置

3、禁用您不使用的约束

 每个solver (解算器)都允许您全局禁用其管理的所有actors(参与者)的constraints(约束)。如果启用某些约束类型(即使没有参与者使用它们),它们不会对性能产生很大影响,但其他一些约束类型,例如collsions(碰撞)和particle collisions(粒子碰撞),会对性能产生很大影响。

为了安全起见,如果您没有使用特定类型的约束,请将其禁用。例如,如果您的解算器包含挥舞的布旗,这些旗子不会与自身或彼此碰撞,则禁用粒子碰撞约束和粒子摩擦约束将跳过大量不必要的计算来确定潜在碰撞的粒子对。

4、除非绝对必要,否则不要使用多个updater。

更新器(ObiFixedUpdater、ObiLateFixedUpdater、ObiLateUpdater)负责“勾选”或更新一个或多个solver的模拟。一个updater中的所有solver都是并行更新的。

当我们使用单个solver时,经常会把updater和solver放到同一个物体上,如果我们之后需要另一个solver生成其他东西,很有可能会直接复制原来那个solver,这时候一定要小心不要复制到updater,这会导致每个solver都由自己的updater更新,它们不会并行更新,而是按顺序更新,先是第一个solver然后是第二个。对两个solver使用相同的updater可以达到并行更新的作用。

当我们通过GameObject菜单创建新的solver时,obi会自动查找现有的updater并将新创建的solver添加到其中。仅在场景中没有updater时,才会创建一个新的updater。

5、减少使用MeshColliders(网格碰撞器) 

考虑使用distance fields(距离场)替代网格碰撞器

这篇关于Obi插件性能优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

Java慢查询排查与性能调优完整实战指南

《Java慢查询排查与性能调优完整实战指南》Java调优是一个广泛的话题,它涵盖了代码优化、内存管理、并发处理等多个方面,:本文主要介绍Java慢查询排查与性能调优的相关资料,文中通过代码介绍的非... 目录1. 事故全景:从告警到定位1.1 事故时间线1.2 关键指标异常1.3 排查工具链2. 深度剖析: