最水的一集,因为当你知道变身插件怎么用之后,这个部分完全就没有任何技术含量了......
但是有人想看变身效果是怎么实现的;并且作为一篇更偏向于入门级的教程,在这里除了讲变身效果之外,我还会简单讲一下我对骨架、骨骼、网格、顶点、顶点组、权重等概念的个人理解。这部分如果你不想看可以直接跳过。
注意是我的个人理解哈,如果有错的是很正常的,你也大可以指出来然后教教我正解是什么,我会很感谢你的。千万不要说一句“这样不行”“你错了”就一击脱离了,这样除了让人感到迷惑不解之外,没有任何建设性意义。
先看大纲视图,一个部位的mod3文件,在导入之后的结构是这样的:
- 骨架
用于控制模型的变形。你可以把它类比成人体的“肌肉和骨骼”,作用是驱动“皮肤”(也就是模型)的运动。
- 骨骼
骨架的基本构成单元。骨骼自身有长度和方向,区分头尾部,然后和其他的骨骼之间可能还会有子父级关系。骨骼除了自身会产生位移和旋转之外,还会依靠FK/IK这两个动力学机制,跟随子/父级运动。
FK:Forward Kinematics,正向动力学。子级骨骼会跟随父级骨骼进行运动和旋转。整体的运动表现比较像一个刚体,姿态模式下MHWI的骨骼就是这样运动的,可以自己试试。
IK:Inverse Kinematics,反向动力学。根据子级骨骼的位置反向计算出父级骨骼的位置和方向。比如MHWI角色的腿部就是有在用IK作为驱动的。如果你做腿比较长的二次元模型,可能会遇到弯腿的问题,因为人物的基点和地面之间的距离是固定的,计算机通过计算得出来,人物只有弯腿才能实现这样的位置关系,所以才会产生弯腿。
那么对于物理骨骼呢?物理骨骼和基础骨骼其实差的并不是太多,首先物理骨骼是通过FK跟随基础骨骼运动的,然后物理骨骼再在这个基础上,通过ctc的参数进行物理模拟,最终实现物理效果。基础骨骼是直接驱动,而物理骨骼是通过物理模拟来驱动,只是驱动的来源不一样。
- 网格(模型)和顶点
其实大家一般都管网格叫模型。我喜欢说网格的原因,除了blender本身就这么翻译以外,还因为我个人喜欢把整个3D模型叫做“模型”,而这整个3D模型的某个局部部位叫做“网格”,这样不容易混淆概念。
网格简单来讲就是一系列顶点、边、面的集合:
它本身和骨架之间并没有直接的联系;不同网格之间也是相互独立互不影响的。
- 顶点
顶点就是网格上的一个个点,但是顶点本身除了位置,还有一个属性是经常被忽略的,就是顶点权重:
网格能跟随骨骼运动,就是因为网格的顶点有这个东西。我们做mod总会用到总限值4、总限值8,限制的也是这个东西。顶点组的深浅颜色,反映的还是这个东西。
前面的名称,表示一个顶点权重归属的顶点组(以及将要控制它的骨骼名);后面的数字,就表示顶点的一个权重值(或者影响程度)。
这个其实很好理解,比如左边名字叫bone.1,权重值为0.5,就是当bone.1移动1m时,这个顶点就移动0.5m;bone.1旋转180度,这个顶点就旋转90度。
- 顶点组
顶点权重虽然是指当前顶点受特定骨骼的影响程度,但是网格并不包含骨骼,和骨骼也没有直接联系,所以就要通过顶点组这个桥梁来实现。
顶点组就是由特定的一些顶点构成的组合,而在权重绘制模式下显示出来的各种颜色,就是这些顶点的顶点权重。所以我们绘制权重其实是在改变一群顶点的权重,直观表现是对网格进行上色。
有了顶点组这个东西,骨架就可以通过匹配顶点组,确定它到底要控制哪些顶点,控制程度又是多少,最终实现通过骨架控制网格运动的结果。
至于为什么骨架要和网格分开,可以想想,到底是你穿衣服,还是衣服穿你?总不能每换一件衣服都要给自己变个形吧,这根本不可能。反过来,只要你的体型合适,你就能根据自己的体型选择S,M,L,XL,XXL,XXL不同码数、但是款式一样的衣服了。
- 权重
相信在你看过顶点和顶点组的概念之后,就知道为什么我要坚持在比较严肃的讨论下把顶点组和权重区分开来了。在当前的语境下,权重指的是这个东西:
而顶点组,是这个东西的容器。
- 各组成的关系
总结起来就是,骨架由骨骼组成;网格由顶点、边、面组成,同时还包含了顶点组;顶点组则是包含了权重。
然后,骨架通过找到网格上的顶点组,确定它需要控制哪些顶点、控制程度如何,然后骨骼进行什么运动,这些顶点就依据它们的权重进行相应程度的运动。
对于物理骨骼,就只是在最前面多了一个物理模拟驱动骨骼运动的环节而已,后面依然是骨骼驱动模型,所以物理和模型严格来讲也没有直接关系,“模型拥有物理效果”只是一个表象。
再然后,骨架和网格(顶点组从属于网格)之间其实并没有直接的联系,只是通过顶点组这个“桥梁”关联起来了。
从这一点,我们就知道,网格不管长什么样,不管有多少个,只要顶点组和骨骼对应上了,对应的顶点就会跟随骨骼运动。一个骨架可以控制多个网格,反过来多个骨架也能控制一个网格,只不过多个骨架同时控制一个网格比较少见而已。
总之,做MOD不要局限在“骨骼对齐,权重刷好,模型就会自己动!”这个表象上,对这些概念有基本的了解,你就能通过简单的刷权重、安排骨骼、控制变身效果实现意想不到的效果。
想~象~力~
羽酱的变身插件是通过控制网格的自定义属性visibleCondition实现变身效果的:
变身的机理就是,当满足某个条件后,该模型才会显示,否则一直隐藏。显示条件如下:
和其他的东西没有任何联系,只要满足这些条件就会显示,不满足就会隐藏,千万不要想复杂了。MHWI本身就是有这个东西的,不过一般都用在武器上,比如从崛起移植过来的火龙玩偶大剑MOD,其实现原理就是收刀时使用一个模型,拔刀时使用另一个模型,两个模型在mod3里是叠在一起的,你打开文件一看就懂了:
在安排变身时,你只需要考虑在满足某个条件的时候,对应的模型要怎么放就行了,其他不相关的模型你完全可以H键隐藏掉,不用管。
所以,现在终于到了正题了——我的机甲Maya MOD的变身效果是怎么制作的?你能不能自己实现呢?
那么,我们就回到7月17日那天,一步步来看Maya的变身效果到底是怎么实现的吧!
首先,这是一个没有任何变身效果,始终显示的模型:
然后,我们需要规划一下,哪些部位需要实现变身效果,然后某个部位想实现什么样的变身效果,想想它应该在哪几个条件下显示,然后就复制几份,改成相应的名字。
比如我想要这个模型收刀时是果的,拔刀时穿一层,白刃、黄刃、红刃再各穿一层,实现“进化”效果。
虽然说收刀是果的,但是身体实际上是一直显示的,后面穿衣服也是在果体的基础上加,所以果体应该保持显示——visibleCondition是0,不需要额外复制。
拔刀时穿上贴身的黑色衣物,“拔刀”这个条件是部分包含无/白/黄/红刃的,visibleCondition=31本身就是拔刀即显示,而有刃状态是收刀状态也显示,所以不需要复制5份分别将visibleCondition设为31、32、33、34、35。只需要将visibleCondition设为31,并且不需要额外复制。
白刃开始穿上白色衣服,“白刃开始”这个条件包含白、黄、红刃,但是visibleCondition=33是仅白刃显示,黄刃和红刃状态下就会消失。所以我们需要额外复制两份,一共三份,分别将visibleCondition设置为33、34、35就可以了。
黄刃同理,复制一份,一共两份,设为34、35;红刃只需要设置成35,不需要额外复制。
至于黄刃不发光,红刃发光是怎么实现的?这个嘛,都说了要有想~象~力~,你把需要发光的部位单独切出来,然后单独用一个发光材质不就可以啦,只是会麻烦点。
还有另一种方法更简单(不过当时制作这个MOD的我还不知道),就是不进行模型的剪切,直接使用一个新的贴图,不发光部位涂黑,然后把材质的自发光拉高。(仅适用于部分材质)
如之前所说,不要把一个东西局限在它的表象上。既然变身的原理是条件显示,那么我们就不要局限在“变身”这个概念上。要有想~象~力~,发散一下,完全实现可以收刀是一个人,拔刀是另一个人的效果——所谓“大变活人”。
你以为是老婆吧?
——居然是黑曼巴! Man, what can I say? Maya out!
但是,这种类型的“变身”实现的条件必须得要两个模型差不多大才行,因为是相当于两个模型共用一个骨架,如果两个模型差得多,肯定有一个没法和骨架对齐,游戏里动作就会变得很扭曲。
另外就是物理骨骼了,如果两个模型的物理部分不是十分相似的,那么你就要分别给这两个模型做物理。不仅是两份的工作量,而且两个模型还要共用50个物理骨骼,怎么想都不合适。
再然后,物理是作用在骨架上的而不是作用在模型上的,所以模型的隐藏与否,和物理没有任何关系,不是说模型隐藏了就不做物理了或者需要也给物理加个“显示条件”。你就当做是两个始终显示、共用基础骨架的模型,正常做两份物理就是了。
再发散一下,武器和人物都是有条件显示的,所以我们完全可以将这两者联系起来,实现将装备上的组件“拿出来”当作武器的效果。
例子就是我的迷迭香mod,武器在收刀时隐藏,其中的一个歼灭战装备在拔刀时隐藏:
几种机制简单的组合,再加上一点想~象~力~,就能实现意想不到的效果。而其他的天才应用一定是存在的,只不过尚未被发现——这就要交给天才的你了。