实现 Cloth布料系统旗帜飘动效果 及 模型双面渲染Double Sided
如何在Unity3D 实现布料旗帜的飘动效果呢?如下图:
目录
一、布料系统的使用方法
1、添加Cloth组件
此处以plane作为例子。
在场景中生成plane平面后,添加组件Cloth,会出现Skinned Mesh Renderer和Cloth组件,如下图所示。
2、添加顶点,控制材质根据此点飘动
点击下图按钮打开编辑Cloth Constraint模式,
点击Select,选择其中一部分点作为顶点,可以直接点击黑点选择,按Shift可以多选,也可以用鼠标左键框选,如图:
(要想将当前有数值的顶点设置为Unconstrained(自由点), 只需要选中那些带有数值的顶点然后将对应复选框取消勾选即可)
选择部分黑点后,可以发现黑点变亮。勾选Max Distance前方的复选框。
运行,即可看到plane像布料一样在飘动,而选择的那些点是不动的。
二、Cloth布料系统的属性设置
翻译如下:
下面举几个最常使用的属性:
1、Use Gravity 重力
是否使用世界重力,勾选后,材质会随着重力下垂。
2、Damping 阻尼
阻尼会应用于每个布料顶点. 要想打造看上去抖动更小或更大的布料, 可以设置这个属性.
3、布料的拉扯和弯曲程度
Stretching Stiffness: 拉扯硬度.
Bending Stiffness: 弯曲硬度.
4、Use Continuous Collision
使用Continuous Collision, 增加消耗, 减少直接穿透碰撞的几率,会增加系统开销。
5、添加碰撞体
Capsule Colliders: 要对布料产生交互的胶囊碰撞体。
Sphere Colliders: 要对布料产生交互的ClothSphereColliderPairs. 可以理解为他是按照一组来的, 一组中可以只有一个SphereCollider, 也可以有两个, 当有两个的时候, 那么这两个SphereCollider会在布料的碰撞系统中被”焊接”起来. 这样就允许通过两个大小不同的SphereCollider来组合成一个圆锥形状的碰撞体了。
至于碰撞体放在Cloth自生、子物体、外部都可以,根据需求来。
6、Cloth Unconstrained编辑面板
Max Distance可以设置每个顶点最大可移动距离. 最常用的用法是将不能动的顶点的Max Distance设置为0
Surface Penetration控制的是顶点最大可以嵌入到Mesh里面的程度. 在布料网格顶点比较稀疏的情况下可以明显对比出差别
Visualization这里能够选择当前在Scene视图中预览Max Distance还是Surface Penetration. (这两者二选一), 还能选择是否让操作影响视口背面的顶点
Select编辑模式要先通过框选, 或者Shift+点击来多选, 来选中顶点, 然后勾选Max Distance或者Surface Penetration前面的复选框, 代表我现在要改变选中的顶点的值了! 然后再在后面的数值里面输入想要的数值。
要想将当前有数值的顶点设置为Unconstrained, 只需要选中那些带有数值的顶点然后将对应复选框取消勾选即可。
三、使用布料系统的的注意事项
1、Cloth只能必须和Skinned Mesh Renderer搭配使用, 但是这不代表使用简单的物体时还必须在Max中导出一个带有蒙皮信息的FBX, 其实可以新建一个GameObject然后赋予Cloth组件, 这会自动添加Skinned Mesh Renderer组件, 然后在Skinned Mesh Renderer组件中赋予基本体的Mesh上去并且设置正确的材质也完全可以。布料可以接受外部影响,但完全不会将影响赋予外部刚体, 换句话说, 布料系统的物理模拟是单向的。
2、布不会对场景中的所有碰撞体做出反应,也不会将力施加到世界。 当它被添加时,布组件将不会反应或影响任何其他身体。 因此,布和世界不会相互识别或看到对方,直到你手动添加碰撞者从世界到布组件。 即使在那之后,模拟仍然是单向的:布料对这些物体做出反应,但不施加力。
3、您只能使用三种类型的碰撞器给Cloth:球体,胶囊和锥形胶囊碰撞,使用两个球碰撞器构造。 这些限制都有助于提高性能。
球体碰撞器数组可以包含单个有效的SphereCollider实例(第二个为空)或一对。在前一种情况下,ClothSphereColliderPair只代表一个单一的球体碰撞器,用于布料碰撞。在后一种情况下,它表示由两个球体限定的圆锥形胶囊形状,并且锥体连接两个球体。圆锥形胶囊形状对于模拟人物的肢体是有用的。
4、以后再补充 bulabulabula。。。
四、双面材质的制作
在MaYa等建模软件中制作好布料材质之后,打开Render states属性面板,有个Double Sided选项,勾选后即可成为双面材质,如下图所示