新的骨骼动画系统终于初具规模

连续纠缠了动画师好几天,终于基本实现预想的效果了,感觉真的很棒。下一步就是加到游戏里面了。

回想起来可能受WOW影响太大了,也想做一样的上下身动作组合,也想做类似的武器多挂点,部件的局部动作(就是象高科技盾那样,自己带一个动作)加上更基础的骨骼动画帧间插值,自动过渡等等,这些都是原来的引擎不支持的,只能自己从头写。

算起来大约相当于一个专职程序员近半年的工作量(实际上不只一个人),包括设计文档,底层和中层编码,编辑器,max导出插件,美术制作说明文档等。

其实从大约2~3周后底层就基本搞定了,就是能在自己的小demo里看到动作插值和组合的效果,后来很长一段时间都在修改接口,就是怎样给出一套逻辑简单,又相对灵活的接口;哪些东西该由底层负责,哪些该由用户自己负责。当然代码优化上也花了一些功夫。

还有一个难点就是怎样尽量不对美术的制作习惯产生大的影响,比如原来设想是每一个可能挂接到不同部位的部件(比如匕首可以拿在左手也可以拿在右手,也可以挂在腰上),都需要绑定在一个特定的骨骼点上(这个骨骼点不属于角色骨架),然后再由程序负责把这个骨骼点挂在不同的地方,但是美术习惯了武器直接做在右手(因为以前的游戏没有现在的功能),后来考虑了一下还是由程序写了一个小工具来转换这样的mesh,就是把其中依赖于指定骨骼点的顶点改为依赖另一个骨骼点。美术做的毕竟是艺术活,对他们在流程上的要求越少越好。

值得一提的是,原来也想做动作加权融合,但考虑到会大大增加接口复杂度,而且效果不一定好,美术还很难控制,后来就放弃了。观察过WOW的角色动作,我能肯定用了动作融合的只有挨打,比如你正在出招的时候被打中,就会看到招式动作和挨打动作的融合,看起来效果有点古怪,但至少出招动作没有被打断,而且挨打了也有反应。一般的网游对于这种情况还有这样几种处理:最偷懒的是挨打时判一下如果角色在空闲状态才播放挨打动作,如果在出招就不播放挨打,而只播一个特效;或者即使角色在出招,也会打断招式动作而播放挨打动作,这样我觉得不好,因为毕竟出招动作应该还是比挨打动作重要一些;还有一种就是冲突的时候招式动作照样播,同时播放一个比如只包含腰部和脖子等少数几个骨骼点的挨打动作,这样不管原来在播什么动作,都会看到角色腰往后一折(当然幅度不能太大),脖子往后一仰算是挨打了,身体其他部分仍然在继续原来的动作。据我观察好像《热血江湖》是这么处理的,当然这个需要骨骼动画系统支持,美术调动作也需要一定技巧。

PS:虽然是人家早就已经实现的东西,做出来还是小有一点成就感的。但也没什么值得夸耀,做别人做不到的事情,才叫牛叉。

阅读更多
个人分类: 技术
上一篇HeapAlloc内部算法
下一篇新年前夕写点啥
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭