【Unity】Obi插件系列(六)—— Obi Cloth
Cloth blueprints
- 有3种不同的Cloth blueprints类型,每一种都是专门设计的。每一种都有相匹配的Actor类型
- cloth:普通布 不能撕裂,不能与动画网格(animated meshes)一起使用。这是3种中效率最高的
- Tearable cloth:可以撕裂,不能与动画网格(animated meshes)一起使用。这种撕裂功能会产生内存和时间成本
- Skinned cloth:设计用于角色布的骨骼动画网格,不能撕裂
- 要生成基本的Cloth blueprint,请到asset->create->Obi->Cloth blueprint,或者右键点击项目文件夹,选择create->Obi->Cloth blueprint。其他2种蓝图类型可以用类似的方式创建。
生成蓝图
- 布料蓝图需要一个网格作为输入。因为是用于表示布料的内部数据结构,输入网格必须是2-manifold。非manifold是不支持的,虽然Obi会尽最大努力,但使用非manifold网格有可能会给流水线带来不少麻烦,所以尽量避免使用。
- 当你按下蓝图inspetor中的 "Generate "按钮时,Obi就会这样做:
1. 生成合并后的网格顶点列表,忽略 UV 和法线接缝。
2. 生成合并后的三角形边和边界边的列表。
3. 每个合并的顶点生成一个粒子,每个合并的egde生成一个距离约束。
4. 分析生成的粒子/距离约束网络,生成弯曲、体积和空气动力学约束。
5. 将所有约束条件分门别类,进行有效的运行时评估。 - 这个过程可能需要相当长的时间。一旦完成,编辑按钮将被激活。将进入cloth blueprint editor。
Cloth blueprint editor
- 在Cloth blueprint editor中主要有三种模式,可以通过顶部的3个按钮进入。
- 粒子选择 Particle selection
- 属性绘制 Property painting
- 纹理导入/导出 Texture import/export - Particle selection
-> Selection/editing- 在粒子选择模式下,你可以选择粒子来修改它们的属性,创建粒子组,并生成约束。要选择粒子,请在场景视图中点击并拖动它们。要取消选择粒子,请按住shift键同时拖动。
- 你可以通过拖动画笔大小滑块来改变画笔大小。你可以将粒子剔除模式改为三个选项之一:
- off:所有的粒子都将被绘制并可选择。
- back:背对camera的粒子,不会被绘制,也不能选择。
- front:朝向相机的粒子不会被绘制,也无法选择。
- 还有一些可用的工具对当前的选择进行操作:
- Invert selection:反选
- Clear selection:清除选择
- Optimize selection:删除所有选定的与任何未选定的粒子没有共享约束的粒子。当你打算将一组粒子附加到一个变换上,并想删除那些在附加后不会对模拟做出贡献的粒子时,这个功能很有用。
- 优化前
- 优化选择后,只剩下被选择的粒子与未选择的粒子共享约束
4. Remove selection:删除所选项
5. Restore removed:将使所有因优化或删除而删除的颗粒恢复 - 你可以获取/设置当前选定粒子的任何属性:
- Mass: 粒子的质量:决定了粒子在受到任何约束(碰撞、距离、弯曲…)时的表现。决定了当粒子与另一个粒子或刚体发生任何约束(碰撞、距离、弯曲…)时,粒子的行为。
- Radius: 粒子半径。主要用于碰撞检测。
- Phase: 粒子相位,用于确定何时应忽略与刚体和其他粒子的碰撞。深入的解释,见碰撞。
- Color: 粒子颜色。用于存储其他信息,或用于自定义渲染。
- Particle groups
- 你可以将那些对你有特殊作用或意义的粒子分组。例如,你可以将矩形布片四角的4个粒子创建一个组,以便以后将其挂在另一个对象上。分组主要用于创建粒子attachments时,但也可以在运行时在自定义脚本中访问。
- 要从当前选择中创建一个新组,只需按列表右下角的 “+“按钮。要删除一个组,从列表中选择它并点击”-”。您也可以通过点击选择按钮选择该组中的所有粒子(使用shift键多选组也可以),您可以通过点击设置来替换当前选择的粒子。
- Tethers
- 系绳约束可以防止布中的粒子与其他粒子分离,起到长距离约束的作用。它们通常被用作一种廉价的方法,在低预算模拟中尽量减少不必要的拉伸。
- 要生成系绳,从下拉列表中选择一个或多个粒子组,然后点击生成系绳。这将把所有不在任何组中的粒子拴在组中最接近的粒子上。要删除所有系留,请点击清除系绳。
- Visualization
- 所有三种蓝图编辑器模式(选择、绘制和贴图导入/导出)都有一个可视化选项部分。在这里,您可以更改渲染模式,该模式决定了应在场景视图中绘制的元素。一些选项是:
- Nothing:只有粒子选择句柄才会被渲染。
- Everything: 所有的渲染模式都会同时启用。
- Particles:粒子被完全渲染,显示其形状、大小和颜色。这使用了与ObiParticleRenderer运行时组件相同的渲染管道(见粒子渲染)。
- Mesh:用于生成蓝图的源网格被渲染。当前选定的粒子属性被用来驱动顶点颜色。你可以使用可视化部分的范围选项(见下文)来确定属性值如何映射到颜色。
- Constraints:多种约束渲染模式可以让你在蓝图中可视化约束。
- 所有三种蓝图编辑器模式(选择、绘制和贴图导入/导出)都有一个可视化选项部分。在这里,您可以更改渲染模式,该模式决定了应在场景视图中绘制的元素。一些选项是:
- 当网格渲染模式处于活动状态时,当前选择的属性(质量、半径等)会被映射到一个颜色梯度上,并用于绘制网格。默认情况下,计算出最小和最大属性值,并将其值映射到颜色梯度上。
->Property painting- 在属性绘制模式下,可以使用画笔工具直接在布面上绘制粒子属性。绘制时建议启用网格渲染模式工作。
- 画笔有一个内半径和一个外半径。内半径内的画笔不透明度可以通过改变画笔不透明度值来设置。不透明度在内半径外平滑衰减,在外半径处达到零
- 大多数属性提供3种模式:
- Paint: 将当前的属性值移到proprerty字段中设置的值。刷子的不透明度决定了值向目标值移动的速度。
- Add: 将属性字段中设置的值添加到网格中的属性值。同样地,画笔的不透明度决定了改变数值的速度。您可以按住键盘上的shift键来减去而不是添加。
- Smooth: 平滑属性值
- Selection mask
- 如果当前有一些粒子被选中,可以启用选择遮罩。当选择遮罩激活时,画笔将只作用于被选择的粒子。如果您只想绘制网格的某些部分,这很有用
- 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接缝处读取准确的数值。
- 输出的粒子半径没有填充
- 导出的粒子半径以16个像素为填充
Cloth Tearing
- ObiTearableCloth组件与普通的ObiCloth非常相似,但是它可以动态地被撕裂。由于它的可破坏性,与普通的ObiCloth相比,有一些限制。
- 不支持系绳约束。
- 不支持skinned meshes
- Tear capacity
- 可以被撕裂的初始粒子的百分比。值为0意味着在初始化时不会分配额外的粒子,值为1意味着将分配足够的粒子,以确保布中所有的三角形都能被撕裂。
- Tear Resistance Multiplier
- 在布匹撕裂之前,必须对其施加多大的力。用牛顿表示。注:该值受每颗粒 "抗撕裂性 "属性的影响。
- Tear debilitation
- 将入射到撕裂粒子上的所有边缘的撕裂系数相乘。高值会增加连贯撕裂路径的形成。0.2和0.6之间的数值往往能得到最现实的结果。
- 高抗撕裂倍数
- 低抗撕裂倍数
Cloth Proxies
代理可以让你将高质量、复杂的网格 "粘 "到任何模拟的布网格上。这是用来解除模拟和渲染的:你可以模拟一个低分辨率的网格并渲染一个高分辨率的网格。当您要渲染的网格具有复杂的形状,而这些形状应该尽可能完整地保留(如口袋、孔洞、可变厚度),或者是非歧管的,不能直接模拟时,它也很有用。
要设置一个代理,你需要有:
一个源对象,并附加一个ObiCloth组件。
一个目标对象,并附加一个ObiClothProxy组件。这样,模拟将从源对象网格转移到目标对象网格。请注意,源对象和目标对象可以是相同的:你可以只对网格的某些三角形进行模拟,并使用结果来驱动其余部分。现在我们将看到如何详细设置代理。
Setting up proxies
- 假设你已经设置了一个源对象(添加了ObiCloth组件并正确初始化),现在你必须决定哪个对象将是代理。然后,为该对象添加一个ObiClothProxy组件。
- 代理有三个输入:
- Particle proxy: 这是用来驱动代理的源对象
- Skin map: 这是一个asset,它告诉Obi源对象的哪些部分应该驱动目标对象的哪些部分
- Target topolgy: 这是目标网格的拓扑结构, 它用来加速skinning过程
- 特殊情况下只有粒子代理可用:有一个布对象,将用于驱动代理。生成目标拓扑的方法和生成布的拓扑完全一样:右击任意项目文件夹,创建–>Obi–>Obi Mesh拓扑,设置输入网格,然后点击检查器中的 “生成”
- 我们仍然缺少skin map。右键点击你的一个项目文件夹,进入创建–>Obi–>Obi Triangle Skin Map
它有两个输入:源拓扑和目标网格。源拓扑是你用来生成布的同一拓扑,目标网格是你的代理对象的网格。
提供这两个输入,点击 "编辑皮肤图 "进入皮肤图编辑器
在皮肤地图编辑器里面,你需要调整两个网格的相对位置/旋转/比例,因为这将是它们的绑定姿势。现在,如果你只是想让整个目标网格与整个源网格进行绑定,只需点击 “Bind”。这将使目标网格与源网格以当前姿势绑定,并生成相应的皮肤信息。
一旦你生成了皮肤图,你可以通过点击 "完成 "退出编辑器。这将关闭编辑器,并返回到你之前的场景。
将皮肤贴图反馈给ObiClothProxy组件,同时提供目标网格拓扑和源布,就可以了。如果你播放你的场景,目标网格将跟随源模拟。在某些情况下,你会希望禁用源对象的MeshRenderer,这样只有目标网格是可见的。
你可以使用同一个布对象来驱动多个代理,只需创建多个ObiClothProxy对象,并将同一个布对象设置为它们的 “粒子代理”。这可以用来为基础布网添加细节。
你可以在有皮肤的网格和普通网格中使用代理,它们既可以作为源,也可以作为目标。它们可以同时作为源和目标。
Character clothing
- Obi也可以用来为有皮肤的网格添加布料模拟,比如–但不限于–角色。在任何含有蒙皮网格渲染器的对象中添加Obi Cloth组件,并像往常一样进行设置(为蒙皮网格创建Obi网格拓扑,并将布艺演员添加到求解器中)。最初,蒙皮后的Obi Cloth中的所有粒子都是固定的,并且会跟随网格动画。你必须取消固定那些你想要模拟的粒子。
- 在模拟蒙皮布时,每一帧都会检索所有蒙皮顶点位置。为了获得最新的顶点位置,动画必须在Obi开始模拟该帧之前更新,否则Obi将使用前一帧的值。在Unity中,Animator组件默认会在LateUpdate之前更新动画。应该将Animator的更新模式属性设置为 “Animate physics”。如果你不这样做,模拟将比动画延迟一帧。
- 然后,固定的粒子会直接移动到它们被skinned的顶点的位置,而自由粒子会像往常一样被模拟。皮肤约束尽量确保自由粒子最终不会离它们被完全skinned(固定)的位置太远。这种算法可以让Obi有效地模拟角色服装,同时避免剪裁、隧道和类似的伪影。
- 你可以使用粒子编辑器来设置皮肤约束的每粒子值:
系绳、弯曲、空气动力学、碰撞等继续以与普通布料相同的方式工作。因此,你可以,例如,使你的角色的披风在风中波浪或与环境碰撞。
【Unity】Obi插件系列(六)—— Obi Cloth相关推荐
- 【Unity】Obi插件系列(一)—— 总览、Actors与Solvers
链接:https://pan.baidu.com/s/1Q9OiM_nwMyeApEhEzsCemw 提取码:1234 Obi框架 Obi是一个基于粒子的Unity物理学插件的集合.Obi的内容一切都 ...
- 【Unity】Obi插件系列(六)——Obi Rope
Rope/rod blueprints Rope: Ropes是通过使用距离和弯曲约束将粒子链起来建立的.由于常规粒子没有方向性(只有位置),因此无法模拟扭转效应,而且绳索无法保持其静止形状.然而,与 ...
- 【Unity】Obi插件系列(八)—— Obi Softbody
Softbody blueprints 有2种不同的软体蓝图.这两种类型的蓝图都可以赋给ObiSoftbody actor Surface softbody:会在网格顶点位置随机分布粒子,确保它们不重 ...
- 【Unity】Obi插件系列(七)—— Obi Emitters
Emitters Emitters器,顾名思义,发射流体粒子到场景中.它们类似于Unity的内置粒子发射器,但它们并不发射常规粒子.取而代之的是,它们发射的是Obi粒子,这些粒子可以相互作用,也可以与 ...
- 【Unity】Obi插件系列(三)—— Collisions
Collisions 布料与地形和一些箱子碰撞. 大多数时候,我们会希望粒子能够与场景中的其他元素碰撞并做出反应:墙壁.地板.箱子什么的.它们也可以互相碰撞.这两种类型的碰撞(对碰撞器和对其他粒子)可 ...
- 【Unity】Obi插件系列(二)—— Backends、Updaters、Simulation
Backends Backends只在Obi 5.5.及以上版本可用.以前的版本只有一个后端可用(Oni),所以在求解器中没有后端下拉. Backends是Solver用来推进模拟的实际物理引擎.不同 ...
- 【Unity】Obi插件系列(五)—— 约束
距离约束 距离约束将成对的粒子连接在一起,迫使它们之间保持一定的距离(我们将这个距离称为约束的 "休息长度").Obi为你的布网的每一个边缘,或者为你的绳索的每一段创建一个拉伸约束 ...
- 【Unity】Obi插件系列(四)—— Distance Fields、Particle attachments、Particle rendering
Distance Fields 距离场 距离场是一种特殊的碰撞基元,可以和Obi一起使用. 每当一个Obi粒子靠近一个collider时它必须计算出到collider表面的最短距离, 以确定它是否会与 ...
- Unity Obi插件修改到支持URP
Obi插件修改适应URP 属性 值 Unity版本 2021.18f1c1 Obi 版本 Obi Fluid v6.43 系统版本 Win10 64位 16G内存 操作 找到水的发射器并修改shade ...
最新文章
- pku 1077 Eight
- NLM 公布了一个新的重新设计的 PubMed 数据库
- 2019 Mac装Cocoapods的步(cai)骤(keng)记录
- 图片尺寸对分类迭代次数和准确率的影响
- android 滚动动画效果代码,Android Scroll滑动效果实例
- 微信小程序window的配置
- Linux驱动设计ioctl函数的cmd参数不能为2
- math.asin_JavaScript中带有示例的Math.asin()方法
- java 集合操作工具包_java之操作集合的工具类--Collections
- 500万相机芯片尺寸_MGS二代系列500万像素新品面世
- EMR 配置纪录(不断更新)
- Docker从理论到实践(一)------基础知识必备
- linux修复u盘的软件下载,修复U盘合集工具
- R语言绘图基础篇-线图
- windows10系统插耳机有回声解决办法?
- Gin简单明了的教程---上
- python中整数类型取值范围有没有限制_python 数据库取值范围内
- 手机qlv转mp4工具
- 文件搜索(File)
- Pycharm浏览器打开报错解决