MagicaCloth2
本文最后更新于4 天前,其中的信息可能已经过时,如有错误请留言

官方文档:如何使用 BoneSpring – Magica Soft

Magica Cloth 中的三种解算对象

Mesh Cloth(网格布)

  • 粒子来源:SkinnedMeshRenderer 的顶点。要刷 Move / Fixed / Invalid
  • 效果:直接变形网格表面,细节最丰富;可开自碰撞;适合片状/卡面。
  • 成本:三者里最高(粒子=顶点数,需用 Reduction 降采样)。
  • 适用:披风、裙摆、围巾、头发卡面、软组织(胸部、肚皮等)、飘带整片。
  • 没刷好固定环会“滑/拉长,要配 Stretch/Tether + 固定环 + 碰撞体

Bone Cloth(骨骼布)

  • 粒子来源骨骼/Transform 链(以骨链为粒子并加约束)。
  • 效果:驱动骨链再由蒙皮带动网格,稳定、省算力;可做链条的长度/弯曲约束与碰撞。
  • 成本:中,远低于 Mesh Cloth。
  • 适用:马尾、长辫、尾巴、绳子/挂带、衣摆骨骼条、旗子骨条等细长物
  • :不是片面解算;想要“整片布”的皱折感就不如 Mesh Cloth 真实。

Bone Spring(骨骼弹簧)

  • 粒子来源单个或少量骨骼的弹簧式抖动(不构网格/链约束,配置最少)。
  • 效果:快速给骨头一点弹性/回弹;可配简单限角/惯性,成本最低。
  • 成本:三者里最低
  • 适用:小幅“抖动”与点缀:胸部骨/耳朵/额前呆毛/小饰物根骨、衣角小骨等。
  • :不适合长链或大片;形状控制与自碰撞能力最弱(更偏“微抖动器”)。

流程

  • 0. 检查工作:模型启用Read/write
原因

Read/Write 打勾时,Unity 会在内存里同时保留两份 Mesh 数据:

  1. GPU 端的数据(用来渲染模型)
  2. CPU 端的数据(脚本或运行时可以访问和修改的网格顶点/UV/法线等)

这样脚本就能调用 mesh.verticesmesh.normalsmesh.RecalculateBounds() 等 API 来修改网格

对于Cloth / MagicaCloth / 动态布料系统(需要访问并修改顶点位置)。变形动画 / Procedural Mesh(代码生成或实时修改 Mesh)。GPU 烘焙 / 特殊计算(比如在脚本里读顶点数据做碰撞检测)都需要启用

如果模型只作为静态渲染对象(不会在运行时改动顶点),可以关掉。关掉后 Unity 只在 GPU 上

Magiaca Cloth – Mesh Cloth

  • 1.确保模型有骨骼节点结构(如果用MMDTools导出FBX文件的话,应该能看到自动配置好的日文描述的空游戏物体的空游戏物体),如果没有可以手动创建需要添加碰撞体的骨骼节点,即在对应位置创建空游戏物体
  • 2.如果有Mesh节点结构,直接在Magica cloth的Source Render中拖入不同的结构,在用画笔将全部节点Fill 为Move,再选择不需要受Mesh影响的节点为Fixed。
    • 如果只有唯一的Mesh节点,则在每个Magica Cloth的Source Render中拖入唯一的Mesh(通常将PMX转换为fbx时会出现这种结构),需要在使用画笔前将不需要的Mesh部分涂成Invalid,后面步骤同2,但在实际中很难从全部Mesh中选取 – 不推荐
  • 3.添加碰撞体:此时需要为各个Magica cloth设置需要考虑的碰撞体列表,注意碰撞体不能设置为Mesh游戏物体的子物体,而应将碰撞体设置为在第一步添加的骨骼节点的子物体,建议开启unity的网络视图
理由

SkinnedMeshRenderer(Mesh)本身只是显示网格的容器,它的 Transform 大多数情况下不会随局部动画(点头、挥手)而变化,只会随整个角色根节点一起移动/旋转。

网格顶点的形变是通过「蒙皮(Skinning)」计算出来的:骨骼矩阵 * 顶点绑定权重 → 得到最终顶点位置。但 Mesh 的 Transform 不会更新

所以:把 Collider 放在 Mesh 的子物体 下,它只跟 Mesh 的 Transform 走,而 Mesh 的 Transform 没有局部摆动信息 → 碰撞体不会动

骨骼节点的 Transform 才有“动画数据”,Animator 在播放待机/攻击动画时,会不断修改 HeadNeckSpine 这些骨骼节点的本地 Transform。你把 Collider 挂在这些骨骼节点下面,它就会随骨骼的 Transform 更新 → 自然就跟着头点头、肩膀扭动而动。

5.按照物体特性调整参数

Magica Cloth – Bone spring

此处不是拖入Mesh的游戏子物体,而是拖入导出FBX时日文生成的日文名称的空游戏物体节点,对应着人物的各个部分节点,注意需要注册作为层级起点的变换。

然后用画笔选择Fixed和Move节点,注意一定要有Fixed的节点,否则不会有效果。详情可查看文档

参数介绍

Simple Distance

  • 作用:基于顶点间的几何距离来简化。“每隔多少距离保留一个点”
  • 数值越大 → 删除的点越多 → 粒子更稀疏、性能更好,但形变精度下降(布料会显得“块状”)。
  • 数值越小 → 粒子更密集、还原度高,但性能开销大

Shape Distance

  • 作用:基于表面形状差异来简化。
  • 数值越大 → 小的凹凸和局部细节会被忽略(粒子少、性能高);
  • 数值越小 → 更贴近原网格的细节(粒子多、计算更精细)。

通俗点:就是“形状保真度门槛”。高数值=忽略细节,低数值=保留细节。

Culling
背面剔除。开=只刷面向相机的面;关=相机背面的面也可能被刷到

Paint Attribute(Move / Fixed / Invalid)

  • Move:参与布料解算的顶点(会动)。
  • Fixed:锚点,只跟随骨骼(不动)。
  • Invalid:完全不参与布料(省性能、相当于“从布料网里剔除”)

Inertia 惯性

World Inertia(世界惯性强度,0–1)
让布料对“整个人物在世界里的位移/转向”产生滞后。越大越“跟在身后拖尾”,越小越跟得紧。

World Inertia Smoothing(世界惯性平滑,0–1)
对 Anchor 的世界移动做低通滤波。越大越平滑、反应越慢,能抑制抖动但会更“迟钝”。

Local Inertia(局部惯性强度,0–1)
局部骨骼相对 Anchor 的运动(例如头部点头、胸口起伏)施加滞后。越大越软、越晃。

Local Inertia(局部惯性强度,0–1)
局部骨骼相对 Anchor 的运动(例如头部点头、胸口起伏)施加滞后。越大越软、越晃。

Spring 弹簧 弹力

spring power设置弹簧的强度。值越大弹簧的抖动次数越少,幅度也越小

学习笔记如有侵权,请提醒我,我会马上删除
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇