Collisions

  • 布料与地形和一些箱子碰撞。

  • 大多数时候,我们会希望粒子能够与场景中的其他元素碰撞并做出反应:墙壁、地板、箱子什么的。它们也可以互相碰撞。这两种类型的碰撞(对碰撞器和对其他粒子)可以在Obi中独立控制。本节中的所有内容都适用于所有Obi actors(布、绳索、流体发射器等)。

设置碰撞器

  • 将Obi Collider组件添加到场景中的任何碰撞器中,使其与Obi一起工作。你可以将这个组件添加到SphereColliders、MeshColliders、BoxColliders…几乎所有标准的Unity colliders,包括3D和2D。Obi目前唯一不支持的碰撞器类型是Polygon Collider 2D。
  • 在每个模拟步骤开始时,solvers将根据什么colliders在空间上接近它们,为其所有粒子生成碰撞约束。
  • 有时想让某些actors,甚至只有一些特定的粒子忽略某个特定的colliders。你可以使用phases来实现这一点。每个ObiCollider都有一个 "Collision phases "属性,而粒子有一个 "phases "通道,你可以使用blueprint编辑器来设置。只有不同phases的colliders和粒子才会发生碰撞。同一phases的colliders和粒子将互相忽略。默认情况下,ObiColliders处于相位0,而粒子处于相位1,所以它们会立即发生碰撞。
  • Obi Colliders还允许你设置它们的碰撞材料和厚度。正的厚度值会在对撞机表面和碰撞粒子之间留下一个间隙。负值将导致粒子在实际撞击其表面之前 "沉入 "colliders。
  • 绳索颗粒与立方体碰撞,从上到下:厚度=0.1,厚度=0,厚度=-0.05。
  • 请注意,Obi Collider的厚度参数与Unity colliders的contact Offset无关。你可以使用这两个参数来独立调整与Obi actors的碰撞和与其他Collider的碰撞。

Rigidbodies

  • 当你将一个Obi Collider组件添加到一个对象中时,它将寻找其层次结构中的第一个Rigidbody组件,并将一个Obi Rigidbody组件附加到它上面。这个组件允许Obi粒子与刚体交互。如果你删除了这个组件,Obi会在你下次点击 "播放 "时自动重新创建它。
  • Obi Rigidbody只有一个参数。“Kinematic for particles”. 启用这个参数可以使刚体免受粒子施加的任何力的影响,所以它的行为就像场景中没有Obi粒子存在一样。但粒子仍然会 "感觉 "到刚体并与之碰撞。

Intercollisions

  • 如果它们的粒子具有不同的phases,那么Obi Actors会相互碰撞,只要它们是由同一个Obi Solver模拟的。不同Solver模拟的粒子不能相互作用,这意味着不同Solver中的角色不能相互碰撞。
  • 例如:如果希望A布和B布互相碰撞,就把A布的粒子设置为第2phases,B布的粒子设置为第3phases(或者除了2以外的任何其他相!)。

Self collisions

  • 要使一个actors与自己发生碰撞,只需在其inspector中启用 "自我碰撞 "复选框。

Collision constraints

  • 一旦你设置了碰撞,你的Solver将开始为粒子生成碰撞约束。Obi使用了一种被称为 "推测性接触 "的碰撞检测范式,这意味着在粒子之间或Collider和粒子之间发生任何实际碰撞之前,就可以生成接触约束。多亏了这一点,碰撞在实际发生之前就被计算在内,而隧道问题(大多数碰撞引擎中存在的众所周知的子弹纸问题)几乎不存在。即使在高速下,也能检测和解决接触问题。此外,如果几个碰撞发生在同一帧中,则不需要TOI(影响时间)排序。
  • 一个给定的粒子在同一帧中可以产生几个接触。然后,推测的接触必须被计算在内,如果它们变成实际的碰撞,则必须被解决。然而,按顺序解析接触点(一个接一个)会不幸地导致之前解析的接触点再次成为碰撞。请看下图。在步骤1中,产生了两个推测性接触,因为根据橙色粒子的当前速度,几乎可以肯定它将在下一帧中与灰色对撞机发生碰撞。在步骤2中,两个推测性接触都发展为必须解决的实际碰撞。第3步显示了如何先解析右边的碰撞。在步骤4中,我们解决左边的碰撞,但这又会导致右边的碰撞被穿透。我们必须第二次解决右边的碰撞(步骤5),以确保任何一个接触都不会发生穿透。
  • 所有这些向右、向左、向右、向左…的迭代求解都会造成视觉上的抖动,因为我们看到粒子在两个配置之间跳动,直到所有的碰撞都被解决(这可能需要很高的迭代量)。出于这个原因,Obi让你决定(就像它对所有约束组一样)必须如何解决碰撞:顺序或并行。在并行模式下,所有的接触都在同一步骤中独立地解决(就像其他接触不存在一样),并且最终的修正是作为其所有单独结果的平均值计算的。这增加了稳定性(消除了由于未解析的碰撞造成的抖动),但降低了收敛速度(实现零穿透需要更多的迭代),使得在使用低迭代次数时碰撞显得过于 “软”。见下图。
  • 一般的经验法则:如果在你的场景中同时发生多个碰撞,并且产生抖动问题,那么将碰撞约束评估顺序设置为 “并行”。如果抖动不是问题和/或你需要更快的收敛,则使用 "顺序 "评估顺序。对于粒子-粒子碰撞和粒子-碰撞器碰撞有单独的控制,所以你可以对它们各自使用不同的方法。你可以在ObiSolver检查器中的 "Particle Collision Constraint Parameters "和 "Collision Constraint Parameters "下找到这个设置。
  • 请参阅ObiSolver了解更多关于顺序解(sequential)和并行解(parallel)的信息。

Collision materials

  • 一旦一个碰撞约束不再是一个推测性的接触,而变成了一个实际的接触(两个物体真的相互接触),碰撞必须以某种方式解决。如何解决取决于你的粒子和Collision使用的是什么ObiCollisionMaterials。所有Obi Actors(布、绳索等)都有一个 "材料 "属性,让你指定该Actors的所有粒子将使用哪种ObiCollisionMaterial。你也可以将碰撞材料分配给ObiColliders。
  • ObiCollisionMaterials是assets,就像Unity的PhysicMaterials一样。你可以在你的项目文件夹中右击,然后选择创建–>Obi–>ObiCollisionMaterial。这里是材质inspector。
    动摩擦力Dynamic friction:在碰撞中,一旦超过静摩擦力阈值,粒子相对于表面运动时,相对切向速度消失的百分比。0表示事物会像冰做的一样滑动,1则会导致切向速度完全丧失。
    静摩擦力Static friction:碰撞中相对切向速度被消除的百分比。0表示物体会像冰块一样滑动,1表示切向速度完全丧失。
    粘性Stickiness:碰撞中物体之间施加的内向法向力的大小。0表示不会施加任何力,1表示物体碰撞后会保持不分离。
    粘性距离Stick distance:物体之间施加粘性力的最大距离。应尽量保持小。
    摩擦力联合体Friction combine: 当参与碰撞的物体具有不同的系数时,摩擦系数如何计算。
    粘性联合Stickiness combine:当参与碰撞的物体具有不同的系数时,如何计算粘性系数。
    滚动接触Rolling contacts: 启用此功能,以执行包括角速度在内的完整接触分辨率(参见下一节)。
    滚动摩擦Rolling friction: 在滚动接触过程中,施加的滚动阻力量(见下节)。在0和0.1之間的值是最有用的。
  • 在上图中,红色箭头代表粒子在碰撞时的速度,这个速度分为两个部分:一个沿接触法线,一个沿接触切线。蓝色箭头代表施加在粒子上的力,以抵消其法线速度,它总是完全施加。紫色箭头是摩擦力,它能消除切向速度分量的一定比例(在图像中,100%)。绿色箭头是粘性力。
  • 重球落在一块很粘的布上。
  • Rolling contacts
  • 常规接触(包括粒子-粒子和粒子-碰撞器)将粒子视为空间中的简单位置,因此它们不会导致粒子旋转。这种简化允许非常廉价的碰撞响应,因为只考虑线性速度。然而,可以选择通过在接触材料中启用滚动接触来执行考虑到角速度和粒子方向的全接触分辨率。
  • 当两个接触材料不同的物体发生碰撞时,如果其中一个接触材料有滚动接触,则使用全滚动接触方程。
  • 使用滚动触点只对利用粒子方向的actors有意义。ObiEmitter(发射颗粒时)和ObiRod。它们与ObiSoftbody不兼容,与ObiCloth和ObiRope一起使用时也不会有明显的效果。
  • 各向异性(非球形)颗粒使用简化的接触点计算算法,当与滚动接触一起使用时,不会施加精确的扭矩。出于这个原因,就滚动接触而言,各向异性颗粒的行为就像完全球形一样。
  • 常规接触:角速度/方向被忽略。
  • 滚动接触:利用角速度/方向。
  • 如果您启用了碰撞材料的滚动接触,将出现一个新的参数 “滚动摩擦”。滚动摩擦力的作用是通过施加一个与参与接触的粒子的角速度相反的扭矩。在现实生活中,完全球形的粒子在倾斜的平面上永远不会停止滚动。然而,表面不规则的粒子(如岩石或鹅卵石)会在一段时间后停止滚动,因为它们的表面不平整。这就是滚动摩擦力所要模拟的。
  • 动图:http://obi.virtualmethodstudio.com/images/tutorial3/rolling_friction.gif
  • 冲击传播
  • 冲击传播是一种在接触解析过程中内部改变粒子质量的技术,因此堆积底部的粒子比顶部的粒子具有更高的有效质量。这将导致更快的收敛和更稳定的堆积。你可以在ObiSolver inspector中找到这个参数(Shock propagation),它是全局性地应用于每个slover。当你需要为你的粒子-粒子接触提供额外的 "动力 "时,请使用这个参数,特别是在创建颗粒材料堆时。

【Unity】Obi插件系列(三)—— Collisions相关推荐

  1. 【Unity】Obi插件系列(一)—— 总览、Actors与Solvers

    链接:https://pan.baidu.com/s/1Q9OiM_nwMyeApEhEzsCemw 提取码:1234 Obi框架 Obi是一个基于粒子的Unity物理学插件的集合.Obi的内容一切都 ...

  2. Unity Obi插件修改到支持URP

    Obi插件修改适应URP 属性 值 Unity版本 2021.18f1c1 Obi 版本 Obi Fluid v6.43 系统版本 Win10 64位 16G内存 操作 找到水的发射器并修改shade ...

  3. 【Unity】Obi插件系列(六)—— Obi Cloth

    Cloth blueprints 有3种不同的Cloth blueprints类型,每一种都是专门设计的.每一种都有相匹配的Actor类型 cloth:普通布 不能撕裂,不能与动画网格(animate ...

  4. 【Unity】Obi插件系列(六)——Obi Rope

    Rope/rod blueprints Rope: Ropes是通过使用距离和弯曲约束将粒子链起来建立的.由于常规粒子没有方向性(只有位置),因此无法模拟扭转效应,而且绳索无法保持其静止形状.然而,与 ...

  5. 【Unity】Obi插件系列(二)—— Backends、Updaters、Simulation

    Backends Backends只在Obi 5.5.及以上版本可用.以前的版本只有一个后端可用(Oni),所以在求解器中没有后端下拉. Backends是Solver用来推进模拟的实际物理引擎.不同 ...

  6. 【Unity】Obi插件系列(八)—— Obi Softbody

    Softbody blueprints 有2种不同的软体蓝图.这两种类型的蓝图都可以赋给ObiSoftbody actor Surface softbody:会在网格顶点位置随机分布粒子,确保它们不重 ...

  7. 【Unity】Obi插件系列(七)—— Obi Emitters

    Emitters Emitters器,顾名思义,发射流体粒子到场景中.它们类似于Unity的内置粒子发射器,但它们并不发射常规粒子.取而代之的是,它们发射的是Obi粒子,这些粒子可以相互作用,也可以与 ...

  8. 【Unity】Obi插件系列(五)—— 约束

    距离约束 距离约束将成对的粒子连接在一起,迫使它们之间保持一定的距离(我们将这个距离称为约束的 "休息长度").Obi为你的布网的每一个边缘,或者为你的绳索的每一段创建一个拉伸约束 ...

  9. 【Unity】Obi插件系列(四)—— Distance Fields、Particle attachments、Particle rendering

    Distance Fields 距离场 距离场是一种特殊的碰撞基元,可以和Obi一起使用. 每当一个Obi粒子靠近一个collider时它必须计算出到collider表面的最短距离, 以确定它是否会与 ...

最新文章

  1. IntelliJ IDEA 2019从入门到癫狂 图文教程!
  2. html选择字段至左边的列表,css – 如何将列表项显示为保留从左到右顺序的列?...
  3. Java变量的修饰符
  4. JS获取HTML元素属性【转】
  5. 有了人工智能还不够?腾讯的工具产品想试试社交
  6. python 绘制围棋棋盘_围棋之规则基础(一)
  7. android 语音助手官网,breeno语音助手最新版
  8. java数组对角线的和_java – 2d数组对角线填充
  9. 【深度学习-花书】第二章 线性代数
  10. redis的简单操作
  11. 2018_09_21_刚才发现csdn漏掉了我的上一篇日记
  12. 显示器U2518怎么连服务器,工作游戏两不误,戴尔 U2518D显示器太划算-双显示器设置...
  13. MATLAB 官方文档
  14. 各种最短路算法能够处理的情况(优劣比较,时间复杂度等)
  15. mysql数据库应用试卷代号3868_实用数据库期末试卷B卷答题纸
  16. 用户活跃度分析前端java_计算APP用户活跃度的方法及提升活跃度方案
  17. AES解密报错,Input length must be multiple of 16 when decrypting with padded cipher
  18. PTA---航空公司VIP客户查询 (25分)---Stl-Map容器简单使用
  19. 从零开始行人重识别 [中文版]
  20. 运算符之 --- 取余运算 %

热门文章

  1. Ps素描效果引用说明
  2. 2022年河北二级建造师建设工程施工管理《施工合同管理》练习及答案
  3. axure 元件_Axure流程图制作
  4. 太原市山大附中2021年高考成绩查询,2021年太原高考状元名单公布,太原高考状元学校资料及最高分...
  5. 初学三分法之考研路茫茫——早起看书
  6. 关于条码和标签打印以及条码打印机编程
  7. Windows系统——ATTCK红队评估实战靶场(二)——CS方式
  8. Flex布局脑图总结
  9. python爬取公众号文章数据库,爬取微信公众号所有文章的请教
  10. 【笔记-uni app】《uni-app 快速入门 从零开始实现新闻资讯类跨端应用》