能够实现模拟布料效果的现在通常使用的有两种:

  1. DynamicBone
  2. MagicaCloth (https://magicasoft.jp/magica-cloth/)

一般现在使用的布料模拟,会选择这两种,第一种是直接对骨骼节点添加脚本进行操作,这里就不再赘述。重点讲一下MagicaCloth。

DynamicBone
https://www.bilibili.com/read/cv4338788/
https://blog.csdn.net/dengshunhao/article/details/105165215
https://zhuanlan.zhihu.com/p/526285709

DynamicBone是基于软骨骼实现的,而MagicaCloth则实现了一套布料系统。

当前游戏中使用的大部分还是DynamicBone,稳定性好。而MagicaCloth的布料模拟会模拟的更加精细,根据其不断的迭代,相信其在未来会成为主流。

布料模拟实现原理:
基于Mass-Spine模型(质点-弹簧)
质点:粒子,有质量的点,会受到外力的影响。
弹簧:链接两个质点,受质点影响,会造成拉伸,旋转,弯曲等情况。
所谓的质点-弹簧模型,就是仿真一些有质量的质点,再在质点之间构建出来一些虚拟的弹簧,模拟当前网格的运行。
在模型当中,布料被当做网格上的质点来进行模拟,这些质点会被弹簧进行连接。弹簧会连接两个质点,并基于质点的位置和速度来产生作用力。
我们可以通过修改质点的质量参数,弹簧的类型以及阻尼因子等参数,实现丝绸,棉麻等等不同的布料模拟。

使用MagicaCloth的具体流程:

  1. 生成虚拟的Mesh,减少计算的面数,节约性能。
  2. 生成质点弹簧结构体,可以通过Open Cloth Monitor 进行对生成的结构进行查询,可以查询质点 弹簧等相关信息。
  3. 设置相关的碰撞体,防止布料穿插进入身体等。
  4. 调节参数,设置理想效果。

接下来进入具体操作流程:

  1. 选中当前需要设置的模型节点

这里我准备对这个女性角色的胸前的头发,添加上物理效果。

首先添加一个MagicaRenderDeformer脚本,添加这个脚本以后,标示着,这个模型会参与布料模拟计算。注意,如果面数超过了6w面,将无法计算。

第二步,添加MagicaVirtualDeformer,这个脚本主要用于生成虚拟的网格,简化计算内容。

添加了以后,需要将当前模型拖拽到Render Deformer List 上面,用于生成用于计算的原始网格。

然后在下面Reduction Setting下面,我们可以根据顶点距离和三角形距离进行合并,来生成虚拟网格,也可以设置相同面角度相同合并。
如果你需要原始的网格模型的结构,推荐使用面合并,如果不需要,那就使用顶点合并。根据顶点距离合并生成的数据更轻量化一些。

设置数据,后,上面不会再显示No Data,而是显示生成的虚拟网格的数据,我们发现三角面数从之前的1.5w变成了当前的2000等等。

最后,就是使用虚拟网格生成质点弹簧了,这里需要添加一个脚本,MagicaMeshCloth

将虚拟网格脚本挂载的对象拖拽到第一个选项。
然后点击Start Point Selection,进行顶点设置,这个是用来控制质点的可移动性,绿色为可移动,红色为不可移动。

这里我将头发贴近头的部分全刷成了红色

下面还可以添加与当前质点弹簧交互的碰撞体,以及相关参数配置。还有一些预设

设置完成后,将显示当前生成的质点弹簧数据

然后我们点击 Open Cloth Monitor,可以看到当前的生成的质点弹簧数据


数据查看面板

关于质点深度的生成,是从不动的质点往动态质点渐变的,所以,动态质点最远的深度为1,这样会有一个渐变。
旋转弹簧可以看到根据面片生成的一根根的单独的线,这些弹簧也是从静态质点到动态质点有个动态的变化。

接下来就是设置碰撞体,碰撞体可以防止衣料模拟时和其它模型进行穿插,限制其位置。

Merge Avatar Collider 可以实现自动合并碰撞体,让我们设置在角色模型上的碰撞体也可以影响到衣料模拟。
我们还可以在碰撞体列表中添加一些碰撞体节点,还实现额外的碰撞体交互。
在给模型添加碰撞体时,可以在需要添加的骨骼节点下面创建一个空节点,可以在空节点上面调节它的大小和位置,然后挂载碰撞体脚本,可以挂载的脚本有 MagicaCapsuleCollider 胶囊体碰撞体 MagicaPlaneCollider 平面碰撞体 MagicaSphereCollider 球型碰撞体
查询当前场景内的碰撞体,在搜索框输入:t:magicaSphereCollider t:magicaCapsuleCollider t:magicaPlaneCollider

设置参数
最后一个步骤就是调节参数,让布料模拟达到一个理想的效果。

下面一个个解释当前参数设置。

Algorithm 为当前布料模拟的算法实现。

Radius 质点的半径 设置质点碰撞体的大小。

Mass 质量 较重的质点更难移动,而较轻的质点更容易移动。基本上,如果起点较重,终点较轻,布料模拟会更稳定

Gravity 重力 自然界重力值为9.8,个人建议调低此数值,或者直接设为0,用来模拟地球引力效果

External Force 设置外力的影响程度,比如风力,还有物体甩动的力。

Drag 空气阻力 该值越高,空气阻力越大,质点惯性衰减越快

设置质点的最大速度

物体在世界空间运动对质点的影响程度,可以手动指定节点。
Influence Target:默认为空时,将选择该布料组件的Transform作为参考物。一般建议将人物的盆骨hip骨骼作为参考物
Movement 相关属性是控制Influence Target位移时对其产生的影响。
Rotation 相关属性则是在物体旋转时对其产生影响的程度配置。
Reset After Teleport 在节点发生瞬移以后,是否需要重置,默认勾选会重置,或者根据需求调节它下面的属性。

远离目标节点多少距离以后,会关闭掉布料模拟效果,可以设置根据相机距离来优化性能。
Reference Object 布料模拟和目标的位置
Distance 多少距离内需要模拟
Fade Distance 缓冲区域,当前的值为 20-5 到 20 内

设置粒子可以从起点移动的最大距离。当前数值为百分比
前两个值是和起点的最大百分比和最小百分比。
Velocity Influence 速度影响 将其设置为较低的值可以减少粒子响应突然移动而移动的问题。 然而,粒子的惯性也会丢失。


限制质点和原来位置的距离

限制质点的旋转度


调节弹簧的特性,还可以开启或者关闭某种弹簧的特性。
Struct Stiffness 用来调节弹簧的刚性,值越大弹簧恢复的就越快,值越小,恢复速度就越慢。
Blend Point 开启弯曲弹簧
Blend Stiffness 用于调节弹簧弯曲性
Near 可选,弹簧是根据质点之间的距离生成的弹簧,忽略原始结构,简单地连接那些靠近的粒子。这种连接使形状保持牢固,但也使其不易变形。

对应Monitor上面的三种显示

弹簧旋转的恢复

对应Monitor里面的Rotation Line

为一个恢复默认形状的一个强度,可以通过这个值来调节恢复两个连接三角形的角度恢复到其原始角度的一个力度。

对应Monitor里面的Triangle Bend 显示

对于碰撞相关的调节
Dynamic Friction 动态摩擦力 作用在切线方向上的力 增加该值会导致质点很难移动
Dynamic Friction 静态摩擦力 作用在法线方向的粘合力 增加该值会导致物体立刻停止在碰撞体上面
光滑的表面可以将两个值减少到 0.05左右,棉麻物体可以适当增加到0.1 0.2

设置这个可以防止布料模拟插入碰撞体内部
具体文档请查看此处
https://magicasoft.jp/en/prevent-penetration-2/

Fixed Non-Rotation 启用时,固定粒子将完全不旋转。 设置为“OFF”时,固定粒子将沿链接的移动质点的方向旋转。
Line Avarage Rotation 开启时,质点将平滑的进行旋转,推荐一直开启。关闭时,质点将固定朝向弹簧方向,如果是耳环等物体,效果还可以。

unity 骨骼物理 头发 布料模拟相关推荐

  1. Unity 布料模拟插件Magica Cloth

    依赖包 Magica Cloth 使用 Job System 和 Burst compiler 加快布料模拟,所以需要先安装这两个依赖包 Burst 可以直接下载 在这里插入图片描述 Job Syst ...

  2. Unity —— 针对DynamicBone插件的迭代来实现布料模拟

    这篇博客介绍了我在近期针对于Unity的DynamicBone插件进行迭代,从而实现近布料模拟的方法. 由于部分涉及到工作内容,因此询问了部门老大后决定本博客将只介绍迭代思路,不涉及到具体实现,也不会 ...

  3. 虚幻引擎图文笔记:使用布料模拟(Cloth Simulation)系统制作一面可以随风飘动的旗帜(更新)

    本文使用引擎版本:UE4.26 UE4的布料系统真是强大,可以在游戏运行时实时解算布料出动画.本文以一面随风飘动的旗帜的制作为例,带大家了解一下UE4布料模拟(Cloth Simulation)系统的 ...

  4. 用JavaScript玩转游戏物理(一)运动学模拟与粒子系统

    系列简介 也许,三百年前的艾萨克·牛顿爵士(Sir Issac Newton, 1643-1727)并没幻想过,物理学广泛地应用在今天许多游戏.动画中.为什么在这些应用中要使用物理学?笔者认为,自我们 ...

  5. Unity 3D 物理引擎简介 || Unity 3D 物理材质|| Unity 3D 力(AddForce)

    Unity 3D 物理引擎简介 早期的游戏并没有强调物理引擎的应用,当时无论是哪一种游戏,都是用极为简单的计算方式做出相应的运算就算完成物理表现,如超级玛丽和音速小子等游戏. 较为常见的物理处理是在跳 ...

  6. 【Marvelous Designer】布料预设汉化+布料模拟流程

    Marvelous Designer 布料预设汉化 在做之前,我们先替换一下Marvelous Designer材质中文库.免得后面改材质看不懂英文很头疼. 下载汉化资源链接: 百度网盘链接 打开MD ...

  7. 用Unity实现简单的绳子模拟(一)

    用Unity实现简单的绳子模拟(一) 说到Unity物理,一般都会想到内置的physX物理引擎.其实我们也可以用Unity的API去实现一些简单的物理算法. 本文会介绍如何从头实现一个简单的绳子模拟的 ...

  8. unity 骨骼击碎_保证击碎$ 100挑战的创新策略

    unity 骨骼击碎 by Glenn Gonda 由Glenn Gonda 保证击碎$ 100挑战的创新策略 (A Creative Strategy Guaranteed to Crush the ...

  9. UA MATH575B 数值分析下 统计物理的随机模拟方法5

    UA MATH575B 数值分析下 统计物理的随机模拟方法5 Ising Model Gibbs Sampling Glauber Dynamics 这一讲介绍Ising Model,它是MCMC与G ...

最新文章

  1. 教程 | 单级式目标检测方法概述:YOLO与SSD
  2. 2021HDU多校第一场 zoto(莫队+分块)
  3. 一次gitlab无法使用ssh登录的问题解决
  4. redis setnx实现分布式锁
  5. ABAP简介以及OpenSQL与NativeSQL的区别
  6. windows下挂载ext4_WSL2 支持挂载物理磁盘,Windows 可直接访问 ext4
  7. 点击预览,有时可以打开,有时不可以
  8. 理论基础 —— 树 —— 树的存储结构
  9. hortonworks/registry配置详解
  10. find命令用法集锦
  11. self-sizing cell的一个问题
  12. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_06-vuejs研究-vuejs基础-v-on指令...
  13. 数据挖掘RapidMiner工具使用----聚类K-Means案例分析
  14. html几种美丽的分割线
  15. 计算机管理 压缩卷,windows10系统下c盘压缩卷只能压缩一半如何解决
  16. 5. Podspec 文件分析
  17. 按快捷键进不去bios问题解决
  18. Lync 2010升级到Lync 2013之更新CU2!
  19. 7-33 统计素数并求和 (20 分)
  20. Windows删除文件的打开方式

热门文章

  1. android studio中注解处理器的调试配置
  2. 解决:java.sql.SQLException:Value ‘0000-00-00‘ can not be represented as java.sql.Date
  3. css文字高光,CSS实现文字高光水波渐变的动态效果实例
  4. 面试题:460道Java后端面试高频题答案版「模块九:Spring」
  5. creo6.0安装教程
  6. Impala优化基本方案
  7. 南华大学计算机系宿舍,2021年南华大学新生宿舍条件和宿舍环境图片
  8. 如何在Python中用集合实现随机的1~100的20个数字
  9. 程序员工作中用一机多屏或者大显示器的好处
  10. 宏基因组公共数据挖掘基因组集再发Nature