链接:https://pan.baidu.com/s/1Q9OiM_nwMyeApEhEzsCemw
提取码:1234

Obi框架

  • Obi是一个基于粒子的Unity物理学插件的集合。Obi的内容一切都是被称为粒子的小球体组成。
  • 粒子之间可以相互影响,通过使用约束来影响其他物体。

ObiSolver

  • ObiSolver是一个执行物理模拟的组件。ObiSolver暴露了一些全局模拟参数,如重力、惯性尺度或速度阻尼。

ObiUpdater

  • ObiUpdater是一个组件,可以推进一个或多个ObiSolver的模拟,使它们与Unity自己的物理引擎保持同步。Obi中包含了几种类型的ObiUpdater,以覆盖常见的用例,但如果你需要精确控制模拟更新周期,可以自行编写ObiUpdater。

ObiActorBlueprint

  • ObiActorBlueprint是一种asset,它存储了一堆粒子和约束。它本身并不执行任何模拟或渲染。只是一个数据容器,与纹理或音频文件不一样。ObiActorBlueprint是由网格(ObiCloth和ObiSoftbody)、曲线(ObiRope)或材质定义(ObiFluid)生成的。

ObiActor

  • ObiActor是在ObiSolver中实例化一个ObiActorBlueprint的组件。所有的ObiActor必须是ObiSolver的孩子。多个ObiActor可以共享同一个ObiActorBlueprint。并且可以重复使用同一个ObiActorBlueprint。ObiActor的例子有一根绳子、一面旗子、一个弹力果冻或一个喷水器。

  • 下面是一张图,显示了一个有两个ObiSolver的场景:一个模拟3个相同的布片,另一个模拟2个相同的绳子。
  • 每个ObiSolver都会维护几个列表或每个粒子的属性:位置、速度、半径等。最初,这些列表没有元素。每当一个新的ObiActor被添加到ObiSolver中,就会发生这些步骤。
  1. ObiActor要求ObiSolver根据ObiActorBlueprint的需要分配尽可能多的粒子。ObiSolver将每个粒子分配到它在其内部数组中找到的第一个空闲槽中。当从ObiSolver中移除ObiActor时,分配的粒子之间会出现空隙。正因为如此,在ObiSolver数组中,属于同一角色的粒子可能不会相邻。
  2. ObiActor会复制ObiActorBlueprint中发现的所有约束,并更新它们的粒子引用,使它们指向正确的ObiSolver阵列位置。
  3. 更新ObiSolver中的活性粒子数量。

Obi具体成员

Actors

  • 一块布、一根绳子、一个流体发射器或一个软体,它们都是Actor。所有的Actor都以一个Blueprint作为输入。Actor将实例化Blueprint中包含的信息(粒子和约束),这样Solver就可以对其进行模拟。可以在多个Actor之间重复使用同一个Blueprint。
  • 如果想对一个Actor进行模拟,它必须是Solver的子角色。在运行时,可以修改一个Actor的父亲为某一个Solver,也可以将它从当前Solver的层次结构中移除。
  • 无论你要创建什么类型的Actors,进行模拟所需的步骤都非常相似:
  1. 生成一个适当类型的Blueprint资源,然后根据需要进行编辑。
  2. 创建Actor,并为其提供Blueprint。
  • 可以通过进入GameObject->3DObject->Obi来创建任何Actor。
  • 例如,要创建一个布的Actor,GameObject->3DObject->Obi->Obi Cloth,要创建一个绳索GameObject->3DObject->Obi->Obi Rope等等。
  • 当第一次在场景中创建一个actor时,Obi会寻找一个ObiSolver组件来添加这个actor。如果它找不到合适的Solver,将自动创建一个。当创建一个Solver时,它也会自动将其添加到场景中找到的第一个ObiFixedUpdater中。
  • Actors暴露了一些参数,让你可以修改它的行为(例如,可以改变撕布所需的力,或软体的可塑性)。改变这些参数不会以任何方式影响原始Blueprint,只会影响由actor生成的实例。
  • 对于每个Actor的Bluprint,将在后续的文章中更新。
  • 绳索:模拟为一条粒子链,通过约束条件将它们连接在一起,迫使它们彼此保持一定的距离(距离约束)
  • 布:一块正方形的布被表示为一个二维的粒子网格,通过距离和弯曲约束连接在一起
  • 流体发射器:生成新的粒子,排斥或吸引周围的其他粒子,试图保持一个恒定的密度(单位体积的质量)

ObiSolver

  • ObiSolver组件是Obi中最重要的组件。它负责模拟粒子物理和强制约束。关于ObiSolver,要记住三个重要的事情
  1. ObiSolver可以被添加到场景中的任何GameObject中,并且在同一场景中可以有多个ObiSolver同时工作。
  2. 每个Actor都需要成为Solver的孩子,才能获得其模拟的更新。
  3. 每个Solver都是完全独立于其他Solver的。因此,被不同Solver更新的Actor不会相互影响/碰撞。只有同一Solver中的Actor才会相互影响。
  • Solver总是在局部空间进行模拟。这意味着,平移、旋转或缩放Solver将僵化地改变整个模拟。

  • 但是,可以将Solver线性/旋转运动的一定比例以惯性力的形式注入到模拟中。例如,若想控制整体角色运动对服装模拟的影响程度。为此,Solver暴露了两个参数来独立控制线性和旋转惯性力。

  • 求解器参数

  • Simulate when invisible //不可见时仍保持模拟
    当所有摄像机都不可见时,这个Sovler是否还保持模拟?如果模拟要求需要随时更新,则需要开启此功能。当场景中存在多个Sovler,但这些Sovler在任何时候都不可见时,需要禁用它以提高性能。

  • Mode //模式
    Sovler可以在2D或3D模式下进行仿真。在二维模式下,模拟只发生在XY平面上。
    2D模式通常与2D碰撞器的使用结合在一起。但是,为了方便起见,你也可以将3D碰撞器与2D模式一起使用。

  • Interpolation //插值
    用于渲染粒子的插值模式。None拥有最快的速度,但Interpolate会产生更多的视觉效果。
    Interpolate 最适合慢镜头效果,它可以避免Unity的timescale<1时产生的停顿。

  • Gravity //重力
    在这个Sovler中施加于粒子的重力方向和大小,用Sovler的局部空间表示

  • Damping //阻尼
    速度阻尼应用于粒子速度。增加阻尼以减少粒子的动能。
    高阻尼值对模拟水下效应很有用。低的非零值(例如0.15)可以在大多数情况下提高模拟的真实性,代替空气的动力阻力。

  • Shock propagation //冲击传播
    值变高会人为增加支撑其他粒子的质量。可以实现更好的堆积稳定性。

  • Max Anisotropy //最大各向异性
    Obi中的流体粒子的形状可以是椭圆形的,而不是完美的球形。这是为了让它们的形状更好地适应它们所代表的物体表面,实现更精确的碰撞检测和更平滑的渲染。
    最大各向异性可以让你确定椭球体半径之间的最大比例:数值为1将迫使所有粒子都是球形的(停用各向异性),数值大于1将允许粒子变得更加椭球化。

  • 启用各向异性(最大各向异性>1)可以极大影响流体渲染。可以在使用较低的流体分辨率时获得更平滑的流体表面。

  • Sleep threshold //睡眠阈值
    任何动能低于这个值的粒子都会被冻结在原地。当你不想让速度或力的微小变化扰乱一个粒子,使它看起来像在抖动或缓慢移动时,可以开启这个功能。如果你想让粒子的位置受到任何作用在它们身上的力的影响,需要把它设置为零。

  • World linear inertia scale //世界线性惯性标尺
    控制Sovler变换的世界空间线性惯性有多少被应用到粒子上。值范围从0(无)到1(100%)。

    移动中的Sovler包含一块布,线性惯性标度设置为1。当解算器突然停止时,布根据惯性继续向前移动。当解算器恢复运动时,布收到惯性向后。

  • World angular inertia scale //世界角惯量表
    类似于前一个属性,但控制的是角惯性(旋转)而不是线性惯性(平移)。注意,离心力和科里奥利力都被计算在内。

    旋转求解器中包含一块布,角惯性刻度设为1。注意离心力如何在旋转时将布抬起。

  • Constraints //约束

  • 可以为Solver管理的所有Actor全局启用/禁用每种约束类型。以这种方式禁用约束将允许Solver完全跳过有关的计算。这可以摆脱不必要的开销。

  • Constraint parameters //限制参数

    ObiSolver为每个约束类型提供4个参数:
    1. Enabled
    2. Iterations
    3. Evaluation order
    4. SOR Factor

    • Enabled

      • 这些约束条件是否会更新?默认情况下,所有的约束类型都是启用的。你应该禁用任何对模拟的最终外观不重要的约束条件。
      • 有些约束在启用后,如果没有Actor使用,则不会降低性能。例如,密度约束只被流体使用。因此,如果你的场景中没有流体发射器,启用密度约束完全不会影响你的性能。
    • Iterations
      • 每个子步骤应该评估这些约束条件多少次?高迭代次数可以使仿真更接近于真实的情况。如果这些约束条件对你的特定目的不是很重要,而又想获得更好的性能,则设置较低的迭代次数。默认值是3。
      • 在某些情况下,将给定约束组的迭代量调高到3以上是有意义的。例如,使用距离约束迭代次数大于15的绳索。
    • Evaluation order
      • 告诉Solver以何种顺序来评估这种约束条件。有两种模式。
      • 在Sequential模式下,所有的约束都是按照创建的顺序进行评估的(这是由每个特定的ObiActor决定的),每个约束都会 "看到 "之前所有约束的调整。这确保了快速收敛,所以设置好的约束需要很少的迭代就能有不错的效果。然而,当几个约束争夺控制权时,就不是很稳定–有时会变得抖动–所以在一些使用情况下,这种模式不是一个好的选择。它是依赖于顺序的,所以在低预算的情况下(很少的迭代和/或大的时间步长),这可能会导致粒子排列的可见模式。
      • 在Parallel模式下,所有约束都会被评估,但它们的调整不会立即应用到粒子上。相反,它们被存储,平均,然后最终结果被用于调整粒子位置。这产生了一个非常稳定的模拟,即使一次应用了很多约束,但是对于 "硬 "约束需要更多的迭代。它也是与顺序无关的,所以它能保证粒子的平稳排列。如果你想用高迭代次数的性能或低迭代次数的质量来换取稳定性,请使用这种模式。
      • 并行模式收敛缓慢。所以,能用顺序模式的时候就用顺序模式,必须用的时候就用并行模式。
    • SOR Factor
      • SOR是Successive Over-Relaxation的缩写。当试图满足约束条件时,提高收敛性的一种方法是 "过度放松 "约束条件。也就是说,如果把一个粒子向左移动2个单位就能暂时满足约束条件,把它移动3个单位也并非不可?这正是这个因子的作用。1是默认值,完全不进行过度放松。2是最大值,可以对约束进行两倍的放松。高值可以用来帮助加快两种模式(顺序或并行)中任何一种模式的收敛速度,但请记住,仿真稳定性可能会降低。

【Unity】Obi插件系列(一)—— 总览、Actors与Solvers相关推荐

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

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

  2. 【Unity】Obi插件系列(三)—— Collisions

    Collisions 布料与地形和一些箱子碰撞. 大多数时候,我们会希望粒子能够与场景中的其他元素碰撞并做出反应:墙壁.地板.箱子什么的.它们也可以互相碰撞.这两种类型的碰撞(对碰撞器和对其他粒子)可 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. C++__conversion function,Non-explicit one argument constructor
  2. Http 协议 常用消息头
  3. http请求过程 Android,android HTTP网络请求回顾
  4. var arr = [] 与 var arr = new Array();
  5. 四阶混合累积量matlab_12m氢燃料电池城市客车电电混合动力系统设计方案
  6. apply()与call()的区别
  7. mysql aes encrypt_mysql加密函数aes_encrypt()和aes_decrypt()使用教程
  8. 报错,ERROR 8324 --- [io-12000-exec-8] c.y.cols.controller.CardTypeController
  9. 万维网之父:Facebook、Google 等硅谷巨头必须被拆分!
  10. Golang AES 加解密
  11. 机器学习常用公式(二)
  12. vuex的知识点笔记
  13. 网络营销行业十大看了就想吐的“滥词”
  14. Spring源码解析系列汇总
  15. 线性可变位移传感器行业调研报告 - 市场现状分析与发展前景预测
  16. 人工智能对学计算机的影响,计算机专业大学生对人工智能对人类的影响分析.docx...
  17. 国内首个开源网络流量可视化分析平台 -- 流影
  18. asp连接 Oracle
  19. BGP Next Hop Self简介
  20. JZOJ4808. 【NOIP2016提高A组五校联考3】书稿

热门文章

  1. Doug Lea是谁?谁知道
  2. unsw计算机专业排名,新南威尔士大学UNSW计算机科学Computer Science专业排名第54位(2021年THE世界大学商科排名)...
  3. 三年上一大台阶,联想凌拓做对了什么?
  4. 动态规划---石子游戏
  5. 淘宝下架苹果iOS充值业务,马云或在为支付宝扫除障碍
  6. 《高效的秘密》第五,六章读后感
  7. Openstack Zoning – Region/Availability Zone/Host Aggregate
  8. 可视化IDE低代码开发平台
  9. 淘宝如何打造承载亿级流量的首页?
  10. 办公局域网内的打印机如何做共享?