0


Unity 布料模拟插件Magica Cloth

依赖包

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

Job System 得通过 URL 添加,输入com.unity.jobs,设置中也要开启Enable Pre-release Packages
另外为了看到模型的骨骼节点,还要下载Animation Rigging

组件

名称图标介绍MagicaPhysicsManager在这里插入图片描述管理器,使用时会自动创建MagicaBoneCloth在这里插入图片描述控制骨骼(Transform)进行布料模拟,带骨骼的衣服和头发都可以用MagicaBoneSpring在这里插入图片描述控制骨骼(Transform)进行弹簧模拟,适合胸部抖动MagicaRenderDeformer在这里插入图片描述渲染变形器,用于对模型的网格进行变形,当使用 MeshCloth / MeshSpring 时需要,性能消耗大MagicaVirtualDeformer在这里插入图片描述虚拟变形器,通过结合多个渲染变形器进行顶点缩减,并重构为一个虚拟网格。使用MeshCloth / MeshSpring时需要,性能消耗大MagicaMeshCloth在这里插入图片描述对网格顶点进行布料模拟,适用于无骨骼的模型,可以实现比Bone Cloth更加精细的控制,是控制裙装的理想选择,与虚拟变形器一起工作,性能消耗大MagicaMeshSpring在这里插入图片描述对网格顶点进行弹簧模拟MagicaSphereCollider / MagicaCapsuleCollider / MagicaPlaneCollider在这里插入图片描述球形,胶囊形,平面形碰撞器,防止穿模,球形和胶囊形主要用于人体,胶囊形消耗更大,平面形主要用于地面MagicaDirectionalWind / MagicaAreaWind在这里插入图片描述全局的风,区域的风MagicaAvatar请添加图片描述用于换装,添加到身体部分MagicaAvatarParts请添加图片描述用于换装,添加到其他部分,如衣服,头发
Magica Cloth的物理引擎完全独立于Unity的物理学引擎,因此,它完全不干扰Unity的物理系统。

MagicaPhysicsManager

在这里插入图片描述
MagicaPhysicsManager这个prefab是插件中自带的,运行时使用插件相关的组件后就会自动创建
在这里插入图片描述
Update Per Second物理引擎每秒更新次数Update ModeUnscaled Time - 刷新率不受 Unity 的 time scale 影响Once Per Frame - 每帧更新一次,当使用这种模式时,Update Per Second 需要根据游戏的帧率来调整。Delay Unscaled Time - 延迟执行,与 Unscaled Time 一样,但在渲染时也能进行布料模拟,能大幅提高性能,但结果会晚一帧,这个延迟是通过未来预测来插值的Update Location在 Late Update 之前或之后更新Faster Write使用 Unity 的新 Mesh API 更新网格顶点,提高网格更新速度,版本要大于 2021.2OnPreUpdate / OnPostUpdate在布料模拟之前或之后注册事件

MagicaBoneCloth 模拟头发,衣服飘动

MagicaBoneCloth 和 MagicaBoneSpring 都是通过改变骨骼节点Transform的位置和旋转来实现飘动效果
在这里插入图片描述
把模型拖入场景,点击模型,选择Bone Render Setup显示模型的骨骼,方便选择对应骨骼
在这里插入图片描述
这个模型后面有长发和两边的侧发,长发和侧发的参数设置不同,这里以长发演示
在这里插入图片描述
在这里插入图片描述
右键创建一个 Magica Bone Cloth,并改名为长发
在这里插入图片描述
这里有错误提示是因为还没有生成数据,将长发的根节点添加到Root List,点击Start Point Selection进入节点编辑模式
在这里插入图片描述
在这里插入图片描述
红色表示固定节点(Fixed Point),它不会移动,但是会旋转,一般就是根节点,每个可移动的骨骼链上,第一个节点必须是固定节点。
绿色表示活动节点(Move Point),受物理系统影响
还有一种灰色节点表示无效节点(Invalid Point),不参与物理运算
在这里插入图片描述

如果需要修改节点类型,先选择节点类型,按住左键在场景中拖动即可改变节点颜色
调整完后, 点击 End Point Selection 结束编辑
在这里插入图片描述
下面就是物理模拟相关的参数,这里提供了一些预设,点击Preset选择长发类型的预设,会自动修改适合长发的参数
头发相关的预设:前发(FrontHair),长发(LongHair),脸两侧头发(SideHair),马尾(PonyHair),短发(ShortHair)
衣服相关的预设:柔软的裙子(SoftSkirt),硬裙(HardSkirt),长开衩连衣裙(LongSlitDress)
尾巴或身上飘动的装饰物:Tail
最后点击Create生成数据
在这里插入图片描述
上面的错误提示消失,显示了一些参数。现在运行时拖动角色,长发会有抖动的物理效果,但是会有穿模的情况,所以还需要处理下穿模的问题。

Magica Cloth提供了两种穿模的解决方法,表面穿模(Surface Penetration)和碰撞体穿模(Collider Penetration)。
在这里插入图片描述
如果衣服(头发)与身体上的骨骼有关联的话,衣服会随着身体动作跟着运动,如图腿动的时候,裙子也会跟着动,这种情况可以选择表面穿模,表现力更好。
在这里插入图片描述
如果衣服(头发)与身体上的骨骼没有关联,衣服(头发)完全由自己的骨骼控制,如图腿动的时候,裙子不会动,这种情况使用碰撞体穿模。
模型属于第二种情况,所以选择碰撞体穿模
在这里插入图片描述
正常情况下,应该在头部,躯干,四肢都加上球形(MagicaSphereCollider)或胶囊形碰撞体(MagicaCapsuleCollider),这里为了省事儿只在躯干上添加胶囊形碰撞体
在这里插入图片描述
为了长发和碰撞体进行碰撞检测,还需要把这个碰撞体添加到长发的ColliderList中,再次点击Create生成数据,运行查看效果
在这里插入图片描述
在这里插入图片描述

下面处理下裙子
在这里插入图片描述
模型前面的裙摆和后面的裙摆被处理成了几个独立的片,这里只处理下后摆,新建一个MagicaBoneCloth改名为后摆
在这里插入图片描述
将后摆的几个根节点添加到Root List,并修改连接模式(Connection Mode)为Mesh Sequential No Loop,表示这几个骨骼链形成一个不闭合的网格面,连接模式指定Root List中骨骼链的连接方式。
Connection ModeLine - 表示单条骨骼链从父级到子级是线性结构的,两条骨骼链是独立的Mesh Automatic - 自动连接附近的骨骼节点创建一个网格结构并进行连接,它不受Transform的父-子关系的影响,不适合太复杂的结构Mesh Sequential Loop - 按照在RootList中的顺序生成网格,并连接第一条和最后一条骨骼链Mesh Sequential No Loop - 按照在RootList中的顺序生成网格,但不连接第一条和最后一条骨骼链Same Surface Angle只在连接模式为网格时有,表示生成网格法线的角度(0-90)
在这里插入图片描述
连接模式选择Line,那么裙子上的每条骨骼链就分别单独进行碰撞检测,这样物体可能从两条骨骼链之间的缝隙穿过产生穿模

在这里插入图片描述
首尾相连的裙子选择Mesh Sequential Loop,生成闭合的网格面,这样碰撞检测更加精确

在这里插入图片描述
有的裙子不是闭合的就选择Mesh Sequential No Loop

在这里插入图片描述
在腿上创建碰撞体添加到Collider List,预设选择NormalSkirt,点击Create生成数据,运行查看效果
在这里插入图片描述

MagicaBoneSpring 模拟胸部抖动

在这里插入图片描述
与 MagicaBoneCloth 基本类似,Create Other -> Magica Cloth -> MagicaBoneSpring,右键先创建一个 MagicaBoneSpring 并改名为胸部
在这里插入图片描述
找到模型身上的胸部节点添加到 Root List
在这里插入图片描述
预设选择Breast,点击Create生成数据,运行时查看效果
在这里插入图片描述

MagicaMeshCloth 模拟裙子飘动

在这里插入图片描述
参考官方示例,使用Unity Chan模拟
在这里插入图片描述
首先,必须开启模型上的Read/Write选项,这是为了读取并修改模型身上的顶点,MagicaCloth不支持具有4个或更多顶点的多边形,所以Keep Quads必须关闭
在这里插入图片描述
在这里插入图片描述
在裙子,上衣,拉链这三个Mesh Renderer上都添加 MagicaRenderDeformer(渲染变形器),它能对网格进行变形,添加后会自动创建数据,如果上一步Read/Write选项没有开启,这里会报错
在这里插入图片描述
Create Other -> Magica Cloth -> MagicaVirtualDeformer,然后创建一个MagicaVirtualDeformer(虚拟变形器),把之前三个 MagicaRenderDeformer(渲染变形器)添加到Render Deformer List中,点击Create生成数据,如果这里报错,点击渲染变形器上的Create重新生成数据。MagicaVirtualDeformer的作用是将一个或多个MagicaRenderDeformer转换为一个虚拟网格,减少顶点,将高多边形网格转换为低多边形网格。这个虚拟网格只用于布料模拟,所以实际模型网格不会被减少。从Cloth Monitor中可以看到虚拟网格的顶点数和三角面数

Reduction Setting 调整下面的参数可以减少顶点数量,简化网格,修改后重新点击Create
参数描述Merge Vertex Distance在这个距离内合并顶点,忽略网格的连接性Merge Triangle Distance在这个距离内合并三角面,考虑网格的连接性Same Surface Angle如果两个连接的多边形小于此角度,则认为它们是相连的Use Skinning勾选会对所有顶点的骨骼权重进行重新赋值,取消勾选减少物理计算的负担
在这里插入图片描述
点击Open Cloth Monitor可以看到这个虚拟网格
在这里插入图片描述
Create Other -> Magica Cloth -> MagicaMeshCloth,然后创建一个MagicaMeshCloth并改名为衣服
在这里插入图片描述
这几个组件之间的关系

在这里插入图片描述
接下来的操作和MagicaBoneCloth差不多。添加虚拟变形器的引用,点击Start Point Selection修改顶点类型
在这里插入图片描述
这一步比较麻烦,它没有自动帮我们设置类型,需要手动设置,把裙子部分设置活动节点(Move Point),活动节点需要连接固定节点(Fixed Point)
在这里插入图片描述
在腿部添加两个胶囊形碰撞器并添加到Collider List中
在这里插入图片描述
预设选择Skirt,点击Create生成数据,运行时查看效果
在这里插入图片描述

MagicaMeshSpring 模拟胸部抖动

在这里插入图片描述
前面和MagicaMeshCloth差不多,先给胸部附近的Mesh Renderer添加MagicaRenderDeformer(渲染变形器)
在这里插入图片描述
Create Other -> Magica Cloth -> MagicaVirtualDeformer,创建一个MagicaVirtualDeformer,添加胸部附近的MagicaRenderDeformer,点击Create生成数据,可以调整参数适当简化网格
在这里插入图片描述
Create Other -> Magica Cloth -> MagicaMeshSpring,新建一个 MagicaMeshSpring 并改名为左胸
在这里插入图片描述
添加MagicaVirtualDeformer的引用,Center Transform 就是 MeshSpring 摆动的中心,选择左胸节点,如何没有合适的节点可以创建一个Transform节点,调整位置到中心,黄色箭头是摆动的前方向,差不多是z轴正向,所以Direction Axis选择Z
在这里插入图片描述
预设选择Breast,点击Create生成数据,右胸的处理一样
在这里插入图片描述
运行时发现摆幅比较大,还需要调整下Spring参数,参考下面参数说明

MagicaDirectionalWind / MagicaAreaWind 风

在这里插入图片描述
MagicaDirectionalWind 是控制全局的风
参数描述Main风量Turbulence风的湍流率,在0.0时,风总是从某一方向流动,在1.0时,风向会随机变化Frequency风向变化的速度,你可以改变湍流变化的速度Direction Angle X/Y绕X/Y轴旋转的角度
在这里插入图片描述
需要配合Unity的WindZone组件使用,修改MagicaDirectionalWind风量Main会同步修改Wind Zone的风量Main,可以将两者做成一个预制体在场景中使用
在这里插入图片描述
衣服,头发受到的风力通过External Force参数设置,参考下面的参数说明

在这里插入图片描述
MagicaAreaWind控制局部区域的风,可以设置方形或球形区域,用它可以实现爆炸时猛烈的气流效果
参数描述Main风量Turbulence风的湍流率,在0.0时,风总是从某一方向流动,在1.0时,风向会随机变化Frequency风向变化的速度,你可以改变湍流变化的速度Shape Type方形或球形Direction Type球形时有效,One Direction - 风吹向某一个方向,Radial - 风从中心径向吹来Attenuation球形径向风时有效,风从中心到四周的衰减率Is Addition当处于多个风场叠加的区域时,勾选表示叠加这几个风的影响,不勾选会选择区域最小的风场
在这里插入图片描述
这是官方示例中演示的爆炸气流效果,在红球上添加了MagicaAreaWind,设置为球形径向风,调整风量到最大并勾选Is Addition,这样红球出现时就会伴随强烈的气流,这时再配合爆炸的特效就有不错的表现效果

换装

在这里插入图片描述
把 MagicaAvatar 组件添加到身体部分,如果提示 No problem 就没问题,如果 body 下的 GameObject 的名称有冲突会显示警告
在这里插入图片描述
把 MagicaAvatarParts 添加到其他部分,如头发,脸,衣服等

MagicaAvatar 的主要方法

/// <summary>/// 附加 MagicaAvatarParts,返回部位id/// </summary>publicintAttachAvatarParts(GameObject avatarPartsPrefab,Action<GameObject> instanceAction =null){//.....}/// <summary>/// 分离 MagicaAvatarParts/// </summary>publicvoidDetachAvatarParts(int partsId){//...}

在这里插入图片描述
Attach 后会显示相关部分

在这里插入图片描述
在 MagicaBoneCloth 和 MagicaMeshCloth 上会有 Merge Avatar Collider 这个选项,勾选表示当 MagicaAvatarParts 附加到 MagicaAvatar 上时会合并主体的碰撞器

参数说明

下面补充下其他其他参数的说明

Update Mode

指定模拟的更新时间
选项描述Normal根据帧率更新Unity Physics基于 Unity 的物理更新,如果角色在 FixedUpdate 内移动,可以通过选择此项来抑制抖动

Culling

在这里插入图片描述
Culling是剔除相关的设置,当角色移出屏幕后如何影响物理系统的更新
首先需要将模型上的网格组件(Mesh Renderer或Skinned Mesh Renderer)添加到Cull Renderer List中,点击Auto Select即可自动添加,然后设置剔除模式
Culling Mode描述OFF不剔除,始终进行模拟Reset离开屏幕,停止模拟,再次出现时,会重置模拟Pause离开屏幕,停止模拟,再次出现时,从停止的状态继续模拟
Animator和Animation上也有类似的剔除设置
在这里插入图片描述
Culling Mode描述Always Animate不剔除,始终运行动画Cull Update Transforms不可见时会禁用重定向,ik,Transform变化Cull Completely不可见时停止模拟,再次出现时,从停止的状态继续模拟
在这里插入图片描述
Culling Type描述Always Animate不剔除,始终运行动画Based On Renderers与Animator的Cull Update Transforms一样,离开屏幕,内部动画仍在运行,但不会更新Transform组件
建议动画的剔除和 MagicaBoneCloth 的剔除模式相匹配,确保物理模拟与动画更好地同步
下面是推荐的匹配模式
Animator Culling ModeMagicaCloth Culling mode描述Always AnimateOFF不剔除,始终进行模拟和动画Cull Update TransformsReset离开屏幕,停止模拟和动画,再次出现时,会重置模拟和动画Cull CompletelyPause离开屏幕,停止模拟和动画,再次出现时,从停止的状态继续运行Animation Culling TypeMagicaCloth Culling mode描述Always AnimateOFF不剔除,始终进行模拟和动画Based On RenderersReset离开屏幕,停止模拟和动画,再次出现时,会重置模拟和动画

Algorithm

在这里插入图片描述
Algorithm中老的算法已经不再维护,新的算法解决了老算法的一些问题,一般就默认Algorithm 2算法

Radius

在这里插入图片描述
每个由物理引擎控制的点都被称为粒子(particle),Radius就是控制这些粒子的大小,从骨骼链的根节点到末端节点的大小变化
在这里插入图片描述
点击Open Cloth Monitor,勾选Particle Position和Particle Radius,就可以看到长发上的粒子,根节点是黄色,子节点是白色,粒子的大小会影响碰撞检测的判断

Mass

在这里插入图片描述
Mass 就是控制粒子的重量,较重的粒子更难移动,基本上,如果开始点比较重,结束点比较轻,MagicaBoneCloth 的模拟会更稳定

Gravity

在这里插入图片描述
Gravity 设置重力加速度的大小和方向,设置重力让衣服下垂,不容易飘起了会显得更自然一点

External Force

在这里插入图片描述
External Force 设置外力(如风)的影响
名称描述Depth Influence根据粒子在骨骼链上的深度指定受到外力的比率。1.0表示100%受外力影响,0.0表示完全不受外力影响Wind Influence风的影响率,1.0是100%受影响,0.0完全不受风的影响Wind Synchronization风的同步率,增加同步率,每个粒子将以同样的方式移动。降低同步率会使每个粒子更容易受到干扰Wind Random Scale风的随机率,增加随机性,也会增加运动的不规则性

Drag

在这里插入图片描述
Drag 设定粒子的空气阻力,阻力越大,粒子的惯性衰减越快
在这里插入图片描述
Max Velocity 粒子最大速度(m/s)

World Influence

在这里插入图片描述
World Influence 设置身体运动时,粒子受影响程度
名称描述Influence Target检测运动的主体,如果不设置,就会选择该组件所附加的TransformMax Move Speed粒子最大移动速度Movement Influence身体运动对粒子的影响程度Rotation Influence身体旋转对粒子的影响程度Reset After Teleport在一帧内大幅度移动或旋转称为Teleport,该选项设置是否在检测到Teleport时重置粒子的位置Teleport ModeReset - Teleport后重置一次模拟。Keep - Teleport后保持模拟状态Teleport Distance一帧内移动多远距离算一个TeleportTeleport Rotation一帧内旋转多大角度算一个TeleportStabilization Time After Reset重置时执行稳定化处理的时间(秒)

Distance Disable

在这里插入图片描述
Distance Disable 根据身体与指定对象(通常是摄像机)之间的距离,禁用/启用模拟
名称描述Reference Object指定要测量距离的目标,如果没有指定,将选择主摄像机Distance指定关闭模拟的距离Fade Distance淡化距离,如果Distance是20,FadeDistance是5,则在15到20的距离之间进行淡入淡出效果

Clamp Distance

在这里插入图片描述
Clamp Distance 设置粒子离根节点的距离范围,作为参考距离,设置从根节点到粒子的直线距离为1.0,并将距离增加或减少的程度设置为百分比。举例来说,当Min Distance Ratio为0.7,Max Distance Ratio为1.1时,移动限制范围如下
在这里插入图片描述
末端粒子只能在图中两条红线之间的范围内移动
Velocity Influence 速度效应,将此设置为低值可以减少粒子因突然运动而移动的问题。然而,粒子的惯性也会丢失。

Clamp Position

在这里插入图片描述
Clamp Position 限制粒子从原点移动的距离,原点是粒子的原始位置
名称描述Clamp Position Ratio X/Y/Z可以相对于原点X/Y/Z轴移动的百分比(1.0=100%)Velocity Influence同上

Clamp Rotation

在这里插入图片描述
Clamp Rotation 限制相对于父节点的旋转角度,上图直线表示根节点(固定粒子)不能弯曲,尖端可以弯曲25度

Restore Distance

在这里插入图片描述
Restore Distance 恢复距离,缩放连接的粒子之间的距离,使它们保持在原来的距离,其作用是保持原始形状。
有以下三种粒子连接方式:
类型描述Struct根据原始结构连接粒子,在Bone Cloth中,是由Transform的父子结构构建的,在Mesh Cloth中,是由Mesh多边形的连接信息构建的。必选的Bend从原始结构中连接更多的结构型粒子,可以使形状不容易坍塌。可选的Near忽略原始结构,仅连接那些靠近的粒子,这种连接可以保持形状的强度,但也使其不容易变形。可选的参数名称描述Struct StiffnessStruct 连接强度,该值越高,恢复速度越快Bend Point是否使用Bend连接Bend Max Connection一个粒子的最大连接数,连接数越多,形状稳定性越强,但负荷也更大Bend StiffnessBend 连接强度,该值越高,恢复速度越快Near Point是否开启Near连接Near Max Connection一个粒子的最大连接数Near Max Depth进行Near连接的粒子最大深度,骨骼链上起点深度为0,终点深度为1Near Point Length要链接的粒子之间的距离Near StiffnessNear连接强度,该值越高,恢复速度越快Velocity Influence同上

Restore Rotation

在这里插入图片描述
Restore Rotation 恢复旋转,当粒子产生旋转后恢复到相对于父节点的角度
参数名称描述Restore Power恢复的强度Velocity Influence同上

Triangle Bend

在这里插入图片描述
Triangle Bend 三角形弯曲,当Connection Mode设置为Mesh相关的选项,或者使用Mesh Cloth时会显示该参数
两个连接三角形受外力变形后,两个三角形的角度恢复到其原始角度
参数名称描述Bend Power恢复的强度,基本上设置为1.0就行,但具三角形数量比较少的时候,尝试降低该值Twist Correction会创建特殊的约束数据以防止扭曲问题,它会增加消耗,因此不建议使用它,除非有扭曲的问题Twist Recovery Power恢复扭曲的强度,如果值太高,形状可能会变得很硬

Collider Collision

在这里插入图片描述
Collider Collision 设置粒子与碰撞体接触时的摩擦系数
参数名称描述Dynamic Friction动态摩擦系数,与碰撞机接触的粒子很难移动,增加该值将增加摩擦力并减慢运动速度Static Friction静态摩擦系数,与碰撞器接触的粒子静止的强度,增加该值将导致粒子在碰撞器上立即停止

Penetration

在这里插入图片描述
Penetration 穿模
参数名称描述Penetration Mode碰撞体穿模/表面穿模Max Connection Depth最大连接深度Penetration Axis粒子可以穿透哪个轴Connection Distance搜索粒子所连接的碰撞器时,最大搜索距离Penetration Distance粒子可以穿透的距离Moving Radius粒子可以移动的最大半径,粒子只能在这个半径的球体内移动Penetration Ignore Collider List要忽略的碰撞器列表

Rotation Interpolation

在这里插入图片描述
Rotation Interpolation 旋转插值
参数名称描述Fixed Non-Rotation固定不旋转,当打开时,固定粒子(根节点)将完全不旋转Line Avarage Rotation根据连接线的平均角度调整粒子的旋转,将此功能打开会产生更平滑的结果

Spring

在这里插入图片描述
MagicaMeshSpring上调整弹簧的参数,指定弹簧运动的一个球形范围
参数名称描述Spring Radius球形区域的半径Spring Radius Scale X/Y/Z三个轴影响的比例Spring Power弹簧力Spring Direction Atten弹簧力阻尼率取决于与球体前端的角度,左边是前面的方向,右边是后面的方向Spring Distance Atten弹簧力的衰减率取决于与球中心的距离,左边是球的中心,右边是球的外缘Spring Atten Intensity阻尼率的整体调整

Adjust Rotation

在这里插入图片描述
可以根据弹簧移动的距离为根节点添加旋转
参数名称描述Adjust Mode指定检测运动的轴,通常是Direction Axis之外的两个轴Adjust Rotation Power旋转强度

性能优化建议

在这里插入图片描述

  1. Update Mode选择Delay Unscaled Time,实际的物理模拟会比画面慢一帧,为了解决这个问题,它通过上一帧和当前帧的物理模拟结果进行插值
  2. 尽量选择BoneCloth和BoneSpring进行模拟,如果裙子使用BoneCloth效果达不到预期就改成MeshCloth,但注意要简化网格在这里插入图片描述
  3. Virtual Deformer组件上需要关注的是Use Skinning选项,如果勾选了Use Skinning,则需要对所有顶点的骨骼权重进行重新赋值,取消Use Skinning可以极大地减少物理计算的负担。它的限制在于当取消了Use Skinning选项后,网格只会受到影响程度最大的Virtual Deformer的影响,可能在一定程度上会影响最终的表现,但是如果对于一个网格的Render Deformer只在一个Virtual Deformer中使用的情况下则可以放心地取消该选项的勾选

参考

up主IGBeginner0116

官方文档

【博物纳新】Magica Cloth

标签: unity

本文转载自: https://blog.csdn.net/sinat_34014668/article/details/128174513
版权归原作者 北海6516 所有, 如有侵权,请联系我们删除。

“Unity 布料模拟插件Magica Cloth”的评论:

还没有评论