Unity的Obi插件 自定义绳子、布料的碰撞体属性说明

2024-02-18 14:40

本文主要是介绍Unity的Obi插件 自定义绳子、布料的碰撞体属性说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说明: 本文翻译自网址 http://obi.virtualmethodstudio.com/manual/6.3/collisions.html

文章目录

    • 设置碰撞
      • 相互碰撞
      • 自碰撞
      • 表面碰撞
      • 碰撞过滤
      • 刚体 Rigidbodies
    • 怎么运行的
      • Collision constraints 碰撞约束
    • 冲击传播 Shock propagation

在这里插入图片描述
布料与地形和一些盒子发生碰撞。

将 ObiCollider 组件添加到场景中的任何碰撞器中,以使其与 Obi 配合使用。您可以将此组件添加到 SphereColliders、MeshColliders、BoxColliders…几乎所有标准 Unity 碰撞器(3D 和 2D)。 Obi 目前不支持的唯一碰撞器类型是 PolygonCollider2D 和 TilemapCollider2D。在每个模拟步骤开始时,解算器将根据空间上靠近它们的碰撞器为所有粒子生成碰撞约束。

设置碰撞

将 ObiCollider 组件添加到场景中的任何碰撞器中,以使其与 Obi 配合使用。您可以将此组件添加到 SphereColliders、MeshColliders、BoxColliders…几乎所有标准 Unity 碰撞器(3D 和 2D)。 Obi 目前不支持的唯一碰撞器类型是 PolygonCollider2D 和 TilemapCollider2D。在每个模拟步骤开始时,解算器将根据空间上靠近它们的碰撞器为所有粒子生成碰撞约束。

ObiCollider 组件检查器如下所示:
在这里插入图片描述
每个碰撞器都允许您指定一个类别值(categories),以及允许它碰撞的类别(collide with)。有关详细信息,请参阅下面的碰撞过滤部分。

ObiColliders 还允许您设置其碰撞材质及其厚度(thickness)。正厚度值将在对撞机表面和碰撞粒子之间留下间隙。负值将导致粒子在实际撞击其表面之前“沉入”对撞机中。
在这里插入图片描述
请注意,ObiCollider 的厚度参数与 Unity 碰撞器的 contactOffset 无关。您可以使用两者来独立调整与 Obi actor 和其他碰撞器的碰撞。

相互碰撞

ObiActor 可以相互碰撞,前提是它们都是由同一个 ObiSolver 模拟的。不同解算器模拟的粒子无法相互交互,这意味着不同解算器中的参与者将无法相互碰撞。

自碰撞

要使 actor 与自身发生碰撞,只需在其检查器中启用“self-collisions”复选框即可。

表面碰撞

Obi 6.0 及更高版本允许您在每个参与者的基础上使用基于表面的碰撞检测,这比基于粒子的碰撞检测更准确。要使用它,您所需要做的就是在演员的检查器中启用“Surface collisions”复选框。有关详细信息,请参阅:表面碰撞。

碰撞过滤

有时您需要一个演员 - 甚至特定的粒子 - 来忽略某些碰撞器或粒子。您可以为此使用类别(categories )和蒙版(masks)。每个碰撞体/粒子最多可以属于 16 个categories之一(从 0 到 15)。masks 确定碰撞体或粒子允许碰撞的类别。masks可以允许与多个类别或所有类别发生碰撞。

例如:categories 5 中的粒子,其masks允许与类别 8 和 10 碰撞,categories 8 和 10 中的masks也允许与categories 5 碰撞的任何粒子或碰撞体发生碰撞。

默认情况下,碰撞器和粒子设置在类别 0 中,并且它们的遮罩允许与所有类别发生碰撞。

在内部,这是引擎执行的测试,用于检查两个物体(A 和 B,无论是粒子还是碰撞体)是否可以碰撞:

if ((A.mask & B.category != 0) && (B.mask & A.category) != 0)MayCollide(A,B); 

在下面的动画中,地板碰撞器设置为仅与类别 0、1 和 2 从上到下发生碰撞。布气球从左到右分为 0、1 和 2 类。
在这里插入图片描述
ObiCollider 组件有两个过滤字段:类别和碰撞。这些允许您分别设置类别和遮罩。

所有 ObiActor 都允许您为单个粒子设置类别和蒙版。根据演员的不同,完成方式略有不同:

布料:使用布料蓝图编辑器在每个粒子的基础上指定类别和蒙版。
软体:使用软体蓝图编辑器在每个粒子的基础上指定类别和蒙版。
绳/杆:使用路径编辑器在每个控制点的基础上指定类别和掩码。
流体:类别和掩码在 ObiEmitter 检查器中按每个发射器指定。

刚体 Rigidbodies

当您将 ObiCollider 组件添加到对象时,它将在其层次结构中查找第一个 Rigidbody 组件,并将 ObiRigidbody 组件附加到它。这允许 Obi 粒子和刚体之间完全双向耦合相互作用。如果您删除此组件,Obi 将在您下次点击“播放”时自动重新创建它。

在这里插入图片描述
ObiRigidbody 只有一个参数:“粒子运动学”。启用此功能可以保护刚体免受粒子施加的任何力的影响,因此它的行为就像场景中不存在 Obi 粒子一样。不过,粒子仍然会“感觉到”刚体并与其发生碰撞。

怎么运行的

Obi 的碰撞管道分为 3 个步骤:

  1. Broadphase,测试对象(碰撞体、单纯形或粒子)的粗略空间接近度。
  2. 在Narrowphase中,对宽相生成的潜在冲突对进行过滤、处理并生成接触。
  3. 最后,碰撞投影 Projection,其中每次接触中涉及的单纯体/粒子/刚体的轨迹被调整以防止碰撞。

您可以在解算器设置中调整碰撞管道的各种参数。这些将影响粒子和碰撞器的边界框的构建方式以及接触的生成方式。
在这里插入图片描述
Broadphase:运动粒子和静态对撞机的边界框重叠,因此将在窄相中再次测试它们。
在这里插入图片描述
窄相Narrowphase:如果我们不采取任何措施来阻止它,粒子速度会将其带入对撞机内,因此会生成碰撞约束(黑色)。
在这里插入图片描述
投影 Projection:碰撞约束修正粒子的预测位置,并相应调整其速度。

Collision constraints 碰撞约束

设置碰撞后,解算器将开始使用上述 3 个步骤为粒子生成碰撞约束(也称为接触)。 Obi 使用称为“推测接触”的碰撞检测范例。这意味着在粒子之间或碰撞器与粒子之间发生任何实际碰撞之前就会产生接触。因此,碰撞过程中粒子的轨迹在碰撞实际发生之前就得到了纠正,并且隧道问题(大多数碰撞引擎中存在的众所周知的子弹槽纸问题)几乎不存在。即使在高速下也能检测并解决接触问题。此外,如果同一帧中发生多次碰撞,则不需要 TOI(碰撞时间)排序。

有些接触永远都是“推测性的”,它们没有经过广泛的阶段,也从未得到真正的解决。其他一些最终进展为真正的碰撞,并发生碰撞解决。

可以为同一帧中的给定粒子生成多个接触。然后,必须考虑推测性接触,如果结果是实际冲突则予以解决。然而,不幸的是,按顺序(一个接一个)解决接触可能会导致先前解决的接触再次发生冲突。如下图所示: 在步骤 1 中,生成了两个推测接触,因为根据橙色粒子当前的速度,几乎可以肯定它会在下一帧中与灰色对撞机发生碰撞。在步骤 2 中,两个推测性接触都会发展为必须解决的实际冲突。第 3 步展示了如何首先解决右侧碰撞。在第 4 步中,我们解决了左侧的问题,但这会导致右侧的问题再次渗透。我们必须再次解决正确的碰撞(步骤 5),以确保任一接触都不会发生穿透。

在这里插入图片描述
所有这些右、左、右、左……迭代求解都会导致视觉抖动,因为我们看到粒子在两种配置之间跳跃,直到所有碰撞都得到解决(这可能需要大量的迭代)。因此,Obi 允许您决定(与所有约束组一样)必须如何解决冲突:顺序或并行。在并行模式下,所有接触都在同一步骤中独立解决(就好像其他接触不存在一样),并且最终校正计算为其所有单独结果的平均值。这提高了稳定性(消除了由于未解决的碰撞而导致的抖动),但降低了收敛速度(实现零渗透需要更多的迭代),使得在使用低迭代计数时碰撞看起来太“软”。请参阅下图:
在这里插入图片描述
一般经验法则:如果场景中可能同时发生多个碰撞并且抖动是一个问题,请将碰撞约束评估顺序设置为“并行”。如果抖动不是问题和/或您需要更快的收敛,请使用“顺序”评估顺序。粒子-粒子碰撞和粒子-碰撞器碰撞有单独的控件,因此您可以对它们使用不同的方法。您可以在 ObiSolver 检查器中的“粒子碰撞约束参数”和“碰撞约束参数”下找到此设置:
在这里插入图片描述
有关顺序求解与并行求解的更多信息,请参阅 ObiSolver。
在这里插入图片描述
仅使用 3 次迭代和中等摩擦力的顺序和并行接触分辨率比较。人为地增加了抖动以更好地说明差异。

冲击传播 Shock propagation

冲击传播是一种在接触解析过程中内部修改粒子质量的技术,以便堆底部的粒子比顶部的粒子具有更高的有效质量。这导致更快的收敛和更稳定的堆叠。您可以在 ObiSolver 检查器中找到此参数,它针对每个求解器全局应用。当您需要额外的“魅力”来实现颗粒与颗粒的接触时,特别是在创建颗粒材料堆时,请使用此功能。

这篇关于Unity的Obi插件 自定义绳子、布料的碰撞体属性说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Redis分布式锁使用及说明

《Redis分布式锁使用及说明》本文总结了Redis和Zookeeper在高可用性和高一致性场景下的应用,并详细介绍了Redis的分布式锁实现方式,包括使用Lua脚本和续期机制,最后,提到了RedLo... 目录Redis分布式锁加锁方式怎么会解错锁?举个小案例吧解锁方式续期总结Redis分布式锁如果追求

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

关于SpringBoot的spring.factories文件详细说明

《关于SpringBoot的spring.factories文件详细说明》spring.factories文件是SpringBoot自动配置机制的核心部分之一,它位于每个SpringBoot自动配置模... 目录前言一、基本结构二、常见的键EnableAutoConfigurationAutoConfigu

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10