Home > 程序/算法 > 高跟鞋问题的骨骼动画解决方案

高跟鞋问题的骨骼动画解决方案

September 13th, 2009 Leave a comment Go to comments

解释一下标题,所谓高跟鞋问题是指女性3d角色的动画如何根据穿的是平底鞋或高跟鞋(甚至是任意高度的鞋跟)进行自动调整的问题。因为显而易见地,如果不做调整的话脚部的姿态不可能同时适应平底鞋和高跟鞋。而如果对角色的每个动作都分别制作平底鞋和高跟鞋两个版本的话无疑极大加重了美术的负担,况且高跟鞋的鞋跟还可以不止一个高度。

highheel

去年我刚加入现在这个项目不久的时候曾经跟设计师讨论过高跟鞋的实现,当时没有在短时间内想到一个很好的简单方案,而且同时又有大量其他更有价值的特性有待实现,于是就暂时搁置了这个课题,也就是说先不做高跟鞋了,所有的鞋跟都一样高。

现在回头看,有哪些方法可以解决呢?

方案1:仅仅在模型上体现平底鞋和高跟鞋的区别,骨架和动画则沿用同一套这样看起来不错,因为既在视觉上体现了高跟鞋的区别,而且几乎可以实现任意高度鞋跟,又不用花精力调整动画。但缺点是骨架和动画没变,所以角色的身高并不会因为穿了高跟鞋而变高(女生肯定会问:那穿高跟鞋干啥?),其实站在开发人员角度来看或许这也可以是优点,如果考虑到角色间交互动作的话。等会,身高不变那脚掂起来这个高度去哪里了呢?仔细看下图你会发现,是小腿变短了!确切说是小腿模型变短了,骨骼还是一样长的。

highheel1

拙作见笑了。另外一个问题是由于脚的模型掂起但骨骼不动,脚关节运动时蒙皮看起来一定会不自然。

据我观察目前几个跳舞类的休闲网游(抱歉实在分不清哪个是哪个)好像都是用的这个方案,貌似看起来却也不觉得别扭,我猜一是因为角色的小腿已经做的比较长,稍短一点也看不出来;而且脚部两个关节一般情况下也不会有太大的动作(即使是舞蹈),所以蒙皮的瑕疵也不容易被人注意到。

方案2:用大腿/小腿/踝关节的IK来实现。什么意思呢?读者可以站起来(或者坐着也行),在保持髋关节位置不动的前提下,感受一下掂起脚后跟再放下,你会感觉到大小腿的角度会有些变化,但身体其他部分不受影响。这是个典型的IK应用。

highheel2

上图深蓝色骨骼是正常(平底鞋)姿态,浅蓝色则是经过IK计算后的高跟鞋姿态。这个方案的优点和前一个差不多,不用美术修改动画(只要运行时加一个简单而且开销不大的双脚IK计算),适应任意鞋跟高度,而且看起来身高也没有变化(优点或缺点);但是物理上更正确一些,因为小腿没有变短。多出来一个缺点是,当角色直立时,穿着高跟鞋的双腿膝盖却是弯的,看起来一定很别扭。正巧前几天看了一个h-game就是用的这个解决方案,证实了我的担心。除了角色站立的情况外无论坐,躺,跑步我觉得应该看起来都不会有太大问题。当然,膝关节产生的额外弯曲可能会造成美术不可控的模型穿帮,比如两边靴子撞到一起,但想来不会太严重。

之前玩过的xbox360上的DOA4,里面女性角色不同的cos有平底鞋也有高跟鞋,我猜测也是用这个方法,因为格斗游戏里的角色姿态一般都是马步半蹲,不大会直愣愣站着所以挺合适的。可惜俺的360已经红了无从证实。

方案3是对方案2的改进,就是在角色站立时将身体重心(根骨骼)向上抬起一个鞋跟的高度,这样能避免膝盖的弯曲。但是只修改站立是不够的,否则穿上高跟鞋一走路人就变矮岂不是很奇怪?我们应该修改所有以脚支撑身体的动作,比如走,跑,以及所有站着做的动作。那为什么不能对所有动作都这么处理呢?因为当支撑点在其它部位时(比如坐,躺),如果也向上抬质心那么就会出现坐着但是屁股离椅子十公分,或者躺着但是离床十公分这种荒唐的场面。

这个方案引入的一个特殊问题是角色身高改变以后,交互动作会出问题。例如角色之间的握手,亲吻,拥抱等等,如果不修改动作就会出现握手时双方的手上下距离10公分,接吻时嘴相差10公分的情况。处理这种状况比较麻烦,偷懒的方法是当角色和别人交互时不采用本方案提及的抬高质心的方法而直接采用方案2,也就是说穿上高跟鞋平时比别人高,但是和别人握手或接吻时就蹲下来一点点以便配合对方,如果双方都穿了高跟鞋就都蹲下来(汗……),看起来可能会有点奇怪但比动作配合不上还是好一点;如果比较完美主义的话就多费一点劲,再次搬出IK,为每个交互动作定义一个交互部位(比如手,嘴唇或者那啥)和一个交互位置/方向,这样双方都用IK控制交互部位去reach那个位置,当然也不排除一个动画包含多个交互部位(握手并接吻?)。最好的情况是,你的游戏没有交互动作,那就万事OK了,不过我不能想象什么样的游戏连高跟鞋都做了会没有角色交互……

btw,IK交互的方案貌似也可以用来解决定制角色身材比例引起的交互动画问题。可惜我看过的那个h-game只能定制肤色和胸部大小形状,不能定制诸如腿的长短肩部宽度等等,还没看到哪个游戏实现了这套东西。

还有,方案3还要求记录每个动作是否是脚部支撑身体的信息,运行时从动画数据自动检测应该不大可能,因为我即使能知道你是蹲着也没法知道你是在大便还是坐在一个小马扎上。

Categories: 程序/算法 Tags: ,
  1. yuxuehua
    November 16th, 2009 at 16:24 | #1

    《孢子》的骨骼动画挺不错

 

Spam Protection by WP-SpamFree