Notifications
Article
Morph Controller 使用教程
Updated 8 months ago
47
0
Morph Controller
Morph Controller是一款集网格骨骼编辑、顶点权重编辑、骨骼动画编辑、自定义骨骼动画状态机为一体的动画插件,主要适用于一些低精度模型的变形动画,并不适合高复杂度的人体(或其他动物)骨骼动画,目前只支持FK(正向动力学)动画,暂不支持IK(反向动力学)。

教程一、创建Morph Controller

导入插件后,在任意MeshFilter(静态网格)组件和SkinnedMeshRenderer(蒙皮网格)组件下,都可以看到一个Generate Morph Controller按钮,点击按钮就可以创建一个Morph专属网格并保存至本地,如果目标是SkinnedMeshRenderer组件,则会试着转化该网格原由的骨骼及蒙皮信息,这些信息都将保存在Morph Controller中。

点击Generate Morph Controller按钮,会弹出一个选择框,用于选择存放Morph网格的位置,选择位置之后就会正式开始转换并将Morph网格保存在选定的位置(这里请务必要选择到当前工程的Assets目录下)。

保存成功以后,目标都会转化为一个SkinnedMeshRenderer组件,组件的Morph Controller参数项如下。

教程二、编辑骨骼

展开SkinnedMeshRenderer组件的Morph Controller参数项,点击Bone开关按钮可切换至骨骼编辑模式,此模式下可以编辑网格的骨骼(新建、修改、删除等)。
下方的五个横排按钮为控制柄工具,类似场景控制柄工具,可以对当前选中的骨骼进行操作(移动、缩放、旋转等)。
再下方的四个按钮:
1、Create创建根骨骼:创建一块隶属于骨骼总结点,而不依附于其他任何骨骼的根骨骼(注意:根骨骼在动画中可以随意运动,不受任何限制)。
2、CreateSub创建子骨骼:创建一块隶属于当前选择的骨骼的子骨骼,必须选中一根有效骨骼后才生效,红色按钮标识的骨骼为无效骨骼(注意:子骨骼在动画中不可以随意运动,他与其父骨骼在距离上不可被拉伸)。
3、ReName重命名当前骨骼:重命名当前选中的骨骼。
4、Delete删除当前选中骨骼:删除当前选中的骨骼,如果骨骼存在子骨骼,将无法被删除,需要先删除子骨骼。
我们选中BoneRoot(初始化时默认创建的骨骼,因为Morph Controller至少得拥有一条骨骼),点击CreateSub为其创建一条子骨骼。
我们再选中新建的这条NewBone1骨骼,点击ReName重新命名,比如这里我将之命名为Head。
在参数面板选中Head,同时场景中标记为红色线框的就是当前我们选中的骨骼。
然后我们可以创建更多的骨骼,请密切注意骨骼间的父子关系,因为这将完全影响骨骼的运动。
同时要记住,在调节骨骼的位置觉得满意了之后,必须要点击一下Reset Bindposes按钮,重新设置当前骨骼的姿势为绑定姿势(就好像大部分的人物模型,他们的绑定姿势总是笔直站立两手平伸),同时,Restore To Bindposes则为还原到绑定姿势,当你乱动了骨骼,又不想将他们保存为绑定姿势的话,就返回到当前的绑定姿势。

教程三、编辑顶点

展开SkinnedMeshRenderer组件的Morph Controller参数项,点击Vertex开关按钮可切换至顶点编辑模式,此模式下可以编辑网格的顶点(修改顶点绑定骨骼、权重等)。
我们在场景中的物体上点击鼠标左键,选中一个顶点,同时会在Scene视图左上方展现顶点的属性面板,包括他所属的四条骨骼(需要在工程的质量设定中将最大绑定骨骼数改为4:Project Setting -> Quality -> Blend Weights),以及对于每条骨骼的权重值,四条骨骼的权重和必须等于1,权重值越大的骨骼,对此顶点的影响力越大。
我们在这里可以试着将这个顶点的第一条骨骼设置为NewBone5,且权重值为1,其他骨骼为空,也就是让其完全受NewBone5的控制。
然后我们切换到骨骼编辑模式,选中NewBone5骨骼,移动他看看,你会发现刚才我们编辑的那个顶点完全跟随着他在移动了。
不过,我们当然不会采用这种一个一个顶点单独设置权重的最愚笨的方式来蒙皮,再次回到骨骼编辑界面,我们选中一条骨骼,同时在Scene视图左上角也会有这条骨骼的属性面板。
1、Internal Range为骨骼外封套半径,所有在骨骼此半径内的顶点的四条骨骼都将绑定该骨骼,也即是完全受该骨骼控制。
2、External Range为骨骼内封套半径,所有在骨骼此半径内并大于内封套半径的顶点,若顶点的四条绑定骨骼存在空位,则该空位绑定此骨骼,否则不绑定,也即是部分受该骨骼控制。
骨骼周围的青色外圈为内封套半径,黄色外圈为外封套半径,当调节好半径大小后,点击Apply Range应用半径,骨骼会自动筛选他周围符合他封套规则的顶点,完全被其控制的顶点标记为青色,部分被其控制的顶点标记为黄色,无法被其控制的顶点(已经拥有四条绑定骨骼)标记为红色。
现在,我们移动NewBone5骨骼试试(如果骨骼位置乱动了移不回去,记得点击Restore To Bindposes)。
我想我们想要的控制效果是有了,但蒙皮是一个繁琐的工作,想要做出自己理想中的效果还是太费时间了,当然,一些简单模型的基本形变动画还是很方便做的,这里我就省略之后的流程了。

教程四、编辑动画

当我们将骨骼和蒙皮工作都完成以后,接下来我们就可以制作一些简易的动画了(当然,只要你肯花时间,任何复杂的动画都可以在这里完成,只是复杂的动画在这里使用起来不是很方便)。
我们点击Open Animator Window按钮,打开动画编辑窗口。
首先,你会发现动画编辑窗口是空的,什么也没有,我们最先要做的就是新建一个动画剪辑,可以鼠标右击创建,也可以点击窗口右上角的创建剪辑按钮。
新建一个动画剪辑以后,鼠标左击选中这个剪辑,我们发现左上角依然还有提示需要我们添加关键帧,此时我们点击右上角Add Keyframe按钮即可为当前选中的剪辑添加新的关键帧,多个关键帧依顺序排列,播放动画时依次播放,这里我们添加三个关键帧。
选中第一帧,左上角面板为第一帧的属性面板,主要包括此关键帧的播放时间(Time),这里是1,也即是动画从第一帧播放到下一帧需要1个单位的时间(如果时间速率正常,这里即为1秒),Event Target为事件发送目标,Event Method为事件发送方法,当此项存在时,动画播放到此关键帧便会发送该事件(存在事件的关键帧会在面板显示为青色背景)。
接下来我们在Bone List中选中NewBone5骨骼,同时场景中可以控制该骨骼移动或旋转,然后点击标题栏红色圆形图标(开启记录动画),此时我们针对模型骨骼的改变都将被记录到当前选中的关键帧(这里也即是第一帧)。
重复以上的步骤,我们可以定制动画剪辑的每一个关键帧,当一个剪辑拥有至少两个关键帧以后,点击标题栏播放按钮,就可以预览动画,同时,我们可以选中某一剪辑之后,在窗口右上方的属性面板点击Make Transition按钮,为此剪辑建立一个过渡,使他在动画播放完成后过渡到下一剪辑。

教程五、播放动画

当我们打开动画编辑窗口的时候,Morph Animator脚本已经被自动挂载到了物体上,Morph Animator会播放我们在上一步制作的动画,默认会自动播放初始动画(Default Clip),如果想停止动画,设置其速度为0就可以了。
在代码中控制也很简单:
Animator.SwitchState(string state); 便可以切换到指定名称的动画剪辑。
https://www.assetstore.unity3d.com/cn/#!/content/109180

HuTao
Unity,C# - Programmer
2
Comments