父物体挂载
Obi Solver //布料控制
是一个执行物理模拟的组件。ObiSolver暴露了一些全局模拟参数,如重力、惯性尺度或速度阻尼。
Obi Late Fixed Updater //刷新频率
ObiUpdater是一个组件,可以推进一个或多个ObiSolver的模拟,使它们与Unity自己的物理引擎保持同步。Obi中包含了几种类型的ObiUpdater,以覆盖常见的用例,但如果你需要精确控制模拟更新周期,可以自行编写ObiUpdater。
布料挂载
Obi Skinned Cloth Renderer
Obi SkinnedCloth
Obi Cloth Proxy
需要创建的
Skinned Cloth Blueprint
Triangle Skinmap
ObiSolver
ObiSolver组件是Obi中最重要的组件。它负责模拟粒子物理和强制约束。关于ObiSolver,要记住三个重要的事情
1,ObiSolver可以被添加到场景中的任何GameObject中,并且在同一场景中可以有多个ObiSolver同时工作。
每个Actor都需要成为Solver的孩子,才能获得其模拟的更新。
2,每个Solver都是完全独立于其他Solver的。因此,被不同Solver更新的Actor不会相互影响/碰撞。只有同一Solver中的Actor才会相互影响。
3,Solver总是在局部空间进行模拟。这意味着,平移、旋转或缩放Solver将僵化地改变整个模拟。
但是,可以将Solver线性/旋转运动的一定比例以惯性力的形式注入到模拟中。例如,若想控制整体角色运动对服装模拟的影响程度。为此,Solver暴露了两个参数来独立控制线性和旋转惯性力。
Backend // 后端
Backends只在Obi 5.5.及以上版本可用。以前的版本只有一个后端可用(Oni),所以在求解器中没有后端下拉。
Backends是Solver用来推进模拟的实际物理引擎。不同的Backends可能有不同的平台兼容性,性能和能力配置文件。虽然你可以为场景中的每个Solver选择不同的后端,但大多数情况下,还是希望所有的Solver使用同一个后端。要为Solver选择不同的Backends,请使用Solver的Inspector中的 "Backends "下拉菜单。
Oni
- Oni是自Obi 2.x以来使用的 "经典 "Backends。它是一个用C++11编写的本地库,为每个平台预编译。因此,它只支持少数几个平台。Windows, Mac, Linux, Android, iOS. 它是一个完全基于CPU的后端,大量使用多线程和SIMD固有技术(单指令,多数据)。它可以用于在各种设备上进行小到中规模的仿真。
- 当对Oni支持的仿真进行剖析时,将ObiProfiler组件添加到你的Solver中是很有用的。这将在游戏模式下,在游戏视图上覆盖剖析数据。
- 请注意,在编辑中进行剖析对性能有明显的影响。
Burst
- Burst是Obi 5.5中引入的一个新的Backends。它完全用高性能的C#编写,利用Unity的Burst编译器和作业系统。它支持所有 可以运行作业的平台,并且Burst编译器可以为之编译。和Oni一样,它也是完全基于CPU的,并且大量使用多线程和 SIMD(分别得益于作业系统和Burst)它的性能与Oni非常相似。
- 使用Burst后台需要安装以下Unity包
Burst 1.3.3 or newer
Collections 0.8.0-preview 5 or newer
Mathematics 1.0.1 or newer
Jobs 0.2.9-preview.15 or newer
Mode //模式
Sovler可以在2D或3D模式下进行仿真。在二维模式下,模拟只发生在XY平面上。
2D模式通常与2D碰撞器的使用结合在一起。但是,为了方便起见,你也可以将3D碰撞器与2D模式一起使用。
Interpolation// 插入
/
Simulation settings
模拟设定
Gravity space //重力空间
self //自身 world //世界
Gravity //重力
在这个Sovler中施加于粒子的重力方向和大小,用Sovler的局部空间表示
Sleep Threshold //睡眠阈值
任何动能低于这个值的粒子都会被冻结在原地。当你不想让速度或力的微小变化扰乱一个粒子,使它看起来像在抖动或缓慢移动时,可以开启这个功能。如果你想让粒子的位置受到任何作用在它们身上的力的影响,需要把它设置为零。
Damping ///阻尼
速度阻尼应用于粒子速度。增加阻尼以减少粒子的动能。
高阻尼值对模拟水下效应很有用。低的非零值(例如0.15)可以在大多数情况下提高模拟的真实性,代替空气的动力阻力。
World linear inertia scale //世界线性惯性标尺
控制Sovler变换的世界空间线性惯性有多少被应用到粒子上。值范围从0(无)到1(100%)。
移动中的Sovler包含一块布,线性惯性标度设置为1。当解算器突然停止时,布根据惯性继续向前移动。当解算器恢复运动时,布收到惯性向后。
World angular inertia scale //世界角惯量表
类似于前一个属性,但控制的是角惯性(旋转)而不是线性惯性(平移)。注意,离心力和科里奥利力都被计算在内。
旋转求解器中包含一块布,角惯性刻度设为1。注意离心力如何在旋转时将布抬起。
Max Anisotropy //最大各向异性
Obi中的流体粒子的形状可以是椭圆形的,而不是完美的球形。这是为了让它们的形状更好地适应它们所代表的物体表面,实现更精确的碰撞检测和更平滑的渲染。
最大各向异性可以让你确定椭球体半径之间的最大比例:数值为1将迫使所有粒子都是球形的(停用各向异性),数值大于1将允许粒子变得更加椭球化。
启用各向异性(最大各向异性>1)可以极大影响流体渲染。可以在使用较低的流体分辨率时获得更平滑的流体表面。
Simulate When Invisible //不可见时仍保持模拟
当所有摄像机都不可见时,这个Sovler是否还保持模拟?如果模拟要求需要随时更新,则需要开启此功能。当场景中存在多个Sovler,但这些Sovler在任何时候都不可见时,需要禁用它以提高性能。
Collision settings //碰撞设定

Constraint settings //限制设定

可以为Solver管理的所有Actor全局启用/禁用每种约束类型。以这种方式禁用约束将允许Solver完全跳过有关的计算。这可以摆脱不必要的开销。
- Distance 距离
- Bending 弯曲
- Particle Collision 粒子碰撞
- Particle Friction 颗粒摩擦
- Collision 碰撞
- Friction 摩擦
- Skin 皮肤
- Volume 体积
- Shape Matching 形状匹配
- Tether 栓 链
- Pin 钉住
- Stitch 缝合
- Denstiy 密度
- Stretch Shear 拉伸 剪
- Bend Twist 弯曲扭曲
- Chain 链
ObiSolver为每个约束类型提供4个参数:
- Enabled
- Iterations
- Evaluation order
- SOR Factor
Evaluation order
告诉Solver以何种顺序来评估这种约束条件。有两种模式。
–在Sequential模式下,所有的约束都是按照创建的顺序进行评估的(这是由每个特定的ObiActor决定的),每个约束都会 "看到 "之前所有约束的调整。这确保了快速收敛,所以设置好的约束需要很少的迭代就能有不错的效果。然而,当几个约束争夺控制权时,就不是很稳定–有时会变得抖动–所以在一些使用情况下,这种模式不是一个好的选择。它是依赖于顺序的,所以在低预算的情况下(很少的迭代和/或大的时间步长),这可能会导致粒子排列的可见模式。
–在Parallel模式下,所有约束都会被评估,但它们的调整不会立即应用到粒子上。相反,它们被存储,平均,然后最终结果被用于调整粒子位置。这产生了一个非常稳定的模拟,即使一次应用了很多约束,但是对于 "硬 "约束需要更多的迭代。它也是与顺序无关的,所以它能保证粒子的平稳排列。如果你想用高迭代次数的性能或低迭代次数的质量来换取稳定性,请使用这种模式。
并行模式收敛缓慢。所以,能用顺序模式的时候就用顺序模式,必须用的时候就用并行模式。
Iterations
每个子步骤应该评估这些约束条件多少次?高迭代次数可以使仿真更接近于真实的情况。如果这些约束条件对你的特定目的不是很重要,而又想获得更好的性能,则设置较低的迭代次数。默认值是3。
在某些情况下,将给定约束组的迭代量调高到3以上是有意义的。例如,使用距离约束迭代次数大于15的绳索。
Enabled:
这些约束条件是否会更新?默认情况下,所有的约束类型都是启用的。你应该禁用任何对模拟的最终外观不重要的约束条件。
有些约束在启用后,如果没有Actor使用,则不会降低性能。例如,密度约束只被流体使用。因此,如果你的场景中没有流体发射器,启用密度约束完全不会影响你的性能。
SOR Factor
SOR是Successive Over-Relaxation的缩写。当试图满足约束条件时,提高收敛性的一种方法是 "过度放松 "约束条件。也就是说,如果把一个粒子向左移动2个单位就能暂时满足约束条件,把它移动3个单位也并非不可?这正是这个因子的作用。1是默认值,完全不进行过度放松。2是最大值,可以对约束进行两倍的放松。高值可以用来帮助加快两种模式(顺序或并行)中任何一种模式的收敛速度,但请记住,仿真稳定性可能会降低。
Cloth blueprint editor
右键点击你的一个项目文件夹,进入创建–>Obi–>Obi Skinned Cloth Blueprint
在Cloth blueprint editor中主要有三种模式,可以通过顶部的3个按钮进入。
- 粒子选择 Particle selection
- 属性绘制 Property painting
- 纹理导入/导出 Texture import/export

Selection/editing - 在粒子选择模式下,你可以选择粒子来修改它们的属性,创建粒子组,并生成约束。要选择粒子,请在场景视图中点击并拖动它们。要取消选择粒子,请按住shift键同时拖动。
你可以通过拖动画笔大小滑块来改变画笔大小。 - Culling你可以将粒子剔除模式改为三个选项之一:
- off:所有的粒子都将被绘制并可选择。
- back:背对camera的粒子,不会被绘制,也不能选择。
- front:朝向相机的粒子不会被绘制,也无法选择。
- 还有一些可用的工具对当前的选择进行操作:
- Invert selection:反选
- Clear selection:清除选择
- Optimize selection:删除所有选定的与任何未选定的粒子没有共享约束的粒子。当你打算将一组粒子附加到一个变换上,并想删除那些在附加后不会对模拟做出贡献的粒子时,这个功能很有用。
- Remove selection:删除所选项
- Restore removed:将使所有因优化或删除而删除的颗粒恢复
- Particle groups
- 你可以将那些对你有特殊作用或意义的粒子分组。例如,你可以将矩形布片四角的4个粒子创建一个组,以便以后将其挂在另一个对象上。分组主要用于创建粒子attachments时,但也可以在运行时在自定义脚本中访问。
- 要从当前选择中创建一个新组,只需按列表右下角的 “+“按钮。要删除一个组,从列表中选择它并点击”-”。您也可以通过点击选择按钮选择该组中的所有粒子(使用shift键多选组也可以),您可以通过点击设置来替换当前选择的粒子。
- Tethers
- 系绳约束可以防止布中的粒子与其他粒子分离,起到长距离约束的作用。它们通常被用作一种廉价的方法,在低预算模拟中尽量减少不必要的拉伸。
- 要生成系绳,从下拉列表中选择一个或多个粒子组,然后点击生成系绳。这将把所有不在任何组中的粒子拴在组中最接近的粒子上。要删除所有系留,请点击清除系绳。
Property painting
在属性绘制模式下,可以使用画笔工具直接在布面上绘制粒子属性。绘制时建议启用网格渲染模式工作。

- 画笔有一个内半径和一个外半径。内半径内的画笔不透明度可以通过改变画笔不透明度值来设置。不透明度在内半径外平滑衰减,在外半径处达到零
- Paint: 将当前的属性值移到proprerty字段中设置的值。刷子的不透明度决定了值向目标值移动的速度。
- Add: 将属性字段中设置的值添加到网格中的属性值。同样地,画笔的不透明度决定了改变数值的速度。您可以按住键盘上的shift键来减去而不是添加。
- Copy: 模仿
- Smooth: 平滑属性值
Texture import/export

-
在导入/导出属性时,请确保你的网格具有非重叠的纹理坐标。对于具有重叠UV的顶点的行为是未定义的,因为多个值可能会映射到同一个顶点。
-
Import
当从纹理加载属性值时,我们需要知道如何将像素值映射到属性值。Obi从0-255像素值范围线性映射到用户定义的属性值范围。
- Source: 用于读取属性值的纹理。
- Source channel: 虽然有些属性(如颜色)使用了所有4个纹理通道(红、绿、蓝和阿尔法),但大多数属性(质量、半径…)都是浮点值,所以只需要一个纹理通道来存储/检索它们。使用这个下拉菜单,你可以选择从哪个通道读取数值。
- Min value: 从像素中读取的属性值,值为0。
- Max value: 从像素中读取的属性值,值为255。
- Export
导出颜色属性时,会使用所有4个纹理通道。导出浮点属性时,网格中的最大属性值被映射为白色像素(255),最小值为黑色像素(0)。值总是存储在红色纹理通道中。
- Texture width: 纹理的宽度,单位为像素。
- Texture height: 纹理的高度,单位为像素。
- Padding: UV接缝处的像素填充量。确保从纹理导入数值时,在UV接缝处读取准确的数值。
Cloth Proxies
代理可以让你将高质量、复杂的网格 "粘 "到任何模拟的布网格上。这是用来解除模拟和渲染的:你可以模拟一个低分辨率的网格并渲染一个高分辨率的网格。当您要渲染的网格具有复杂的形状,而这些形状应该尽可能完整地保留(如口袋、孔洞、可变厚度),或者是非歧管的,不能直接模拟时,它也很有用。
要设置一个代理,你需要有:
一个源对象,并附加一个ObiCloth,ObiSkinnedCloth组件。
一个目标对象,并附加一个ObiClothProxy组件。

skin map。
右键点击你的一个项目文件夹,进入创建–>Obi–>Obi Triangle Skinmap
编辑皮肤图

-
在皮肤地图编辑器里面,你需要调整两个网格的相对位置/旋转/比例,因为这将是它们的绑定姿势。现在,如果你只是想让整个目标网格与整个源网格进行绑定,只需点击 “Bind”。这将使目标网格与源网格以当前姿势绑定,并生成相应的皮肤信息。
-
一旦你生成了皮肤图,你可以通过点击 "完成 "退出编辑器。这将关闭编辑器,并返回到你之前的场景。
-
将皮肤贴图反馈给ObiClothProxy组件,同时提供目标网格拓扑和源布,就可以了。如果你播放你的场景,目标网格将跟随源模拟。在某些情况下,你会希望禁用源对象的MeshRenderer,这样只有目标网格是可见的。
-
你可以使用同一个布对象来驱动多个代理,只需创建多个ObiClothProxy对象,并将同一个布对象设置为它们的 “粒子代理”。这可以用来为基础布网添加细节。
-
你可以在有皮肤的网格和普通网格中使用代理,它们既可以作为源,也可以作为目标。它们可以同时作为源和目标。
ObiSolver是Unity3D中用于布料物理模拟的重要组件,它可以设置全局模拟参数如重力、惯性尺度和速度阻尼。ObiUpdater推进模拟并与Unity物理引擎同步。布料挂载涉及ObiSkinnedClothRenderer、ObiSkinnedCloth和ObiClothProxy。关键概念包括Solver的独立性、线性和角性惯性控制以及后端选择,如Oni和Burst。此外,模式设定、碰撞和约束条件的管理对模拟行为有显著影响。ClothBlueprintEditor则提供了粒子选择、属性绘制和纹理导入/导出功能,便于创建和编辑布料属性。


被折叠的 条评论
为什么被折叠?



