May 7

喷一波Live2D

Lrdcq , 2017/05/07 10:57 , 雜談 , 閱讀(6096) , Via 本站原創
第一次写这样的博客请见谅。最近在对博客下的nana伪春菜做更多的技术常识,除了存2D加动画的形式和全3D模型3渲2之外,突然想起近两年有一个从日本舶来的流行的技术Live2D,于是昨日就调研了一波,并且按照教程试用了一下对应软件,调研内容主要是人物开发成本,技术底层实现(实际性能,可替代性,可拓展性),和弱点不足。本来满心欢喜的想出一个类似于“Live2D调研报告”之类的东西,但是从结果上来看,我认为,没啥好写的,这种东西直接开喷吧(下面打开喷子模式)。(本文所说的Live2D都是指的Cubism即传统的2D模型部分)


點擊在新視窗中瀏覽此圖片

技术

首先我们来看看Live2D到底是什么。其实看完编辑软件的人物模型开发过程后,稍微熟悉3D开发或者3D模型制作的朋友一样就能知道——这不就是mesh动画么。

大家都知道,贴图通过uv坐标映射到mesh网格上,如果mesh中的点出现了移动,那么uv坐标上的图像自然就发生了扭曲——Live2D其实100%就建立在这个基础上的。那么从中,我们可以获得以下关键信息。

1. Live2D确实是纯2D实现的,一点3D都没有

2. 所有的动画都是建立在mesh点动画和2D层面的mesh整体移动和旋转。

够了,从这写东西,我们就可以开始喷了:

1. 应该看了描述,所有的会3D建模的人都会立刻知道它的实际模型是什么样子的并且我敢保证,完全一模一样的东西,普通3d软件手动实现这个模型和动画并不比用Live2D慢,说不定能快30%以上。也就是说,Live2D真正就像它的定位一样,是为了方便画师或者不会3D的人制作类似效果用的——因为会3D的人压根不需要它。就光凭借这一点,Live2D就是垃圾了。

2. 那么Live2D的动画到底有多不方便——我能说它99%的效果都只有通过mesh动画实现么。首先,mesh动画在人物设计场景下的本质,就是劣化的IK动画,IK动画就是把关节拆成mesh然后来扭曲嘛——然而Live2D要我们手动调整扭曲——诚然,手动调整当然比IK自动做的有更多自由性和主动性,那么,就先假设Live2D和普通IK动画在技术上不分宗伯吧。但是接下来就不能忍了,IK动画以骨架为基础最关键的是可以通过骨架牵一发而动全身的方便的实现各种复杂的东西和效果,特别是搭建上了适当的物理效果之后能很方便的做各种事情。而Live2D有啥,所有的关键帧的mesh到什么位置都是我们手动一个点一个点的调整出来的,没有任何稍微高级一点或者智能一点的工作可以完成——甚至像做一个头发重力效果都没有,只有手调——玩你妹啊。

3. 再说回来,mesh动画或者IK动画在实现大幅度全身的动作还游刃有余,但在实现细微的动作,比如眨眼,动嘴,各种表情之类的,就非常吃力了——因此在实际人物模型开发过程中,我们看到大量的奇技淫巧来实现各种2D动画中常见的效果,而这些奇技淫巧会大大增加这个本来就不智能的工作的工作量。

拆开技术后,我们得到的结论是:在这个技术实现下,开发成本过高!

性能

Live2D常常被赞誉到性能非常棒,除了用作游戏,在各种生放送时时交互场景下也各种不虚——那是当然的啦,看了上面的实现我们就可以知道,就一张贴图和一个百来个点的mesh,启动后显卡通道和显存几乎没有什么大数据量的操作——当然高性能了。因此,我们反过来想想,就是几百个点的mesh的话,似乎不需要gpu一样可以实现较高的性能哦。

现在我需要利用的场景是在网页上,在网页上开一个webgl还是挺大费周章的。如果可以验证不需要webgl就可以在canvas上性能合理的进行渲染,这个技术的适应性也许更强,我这里好感度+1哦。阅读它的webgl实现后,本来就没啥高深的算法,当然也没啥麻烦的shader,我认为这个工作是可以做的。当然没有之前,先喷是没错的,喷点是——浪费GPU资源哦。

可拓展性

Live2D的一个人物往往分为2部分,1是模型,2是动作。不过事实上并不是1是静态的mesh,2是描述mesh怎么动的,而是1包涵了这个人物所有状态的所有mesh动画,而2只是描述这些动画播放的。这个设计其实是非常合理的。另外1中的基本动画是软件预设好了不少关键词模型开发人员自己去实现的,当然自己也可以增删。了解这个feature下,我们来看它的可拓展性。

1. 首先,模型本身,由于模型是贴合贴图手动建立的,所以依赖换贴图来实现换肤,就几乎不可能了(相对于IK动画)。因此从贴图层面,拓展性gg。同时,由于贴图限定,我想在部分贴图上通过逐帧动画来实现也是不可以的。

2. 当然模型层面更不用考虑也是gg的。甚至我想加一个在个别动作头上飘一个问号也是不行的,所有的mesh都是固定不变的,有什么突然出现的东西一定一开始隐藏在了什么鬼地方。

3. 那么剩下的拓展性也就是动作上。由于所有的预设动作其实都塞进模型了,所以只要预设基础动画够丰富,就可以播放更复杂的组合动画。看起来没啥问题,不过马上就可以意识到——这样确实很方便动画开发了,但是动作的拓展其实就是0了——毕竟基本动作都塞在模型里了。综合起来,只能说将就了。

4. 输出结果可拓展性。最后Live2D产出的结果,出了渲染视频,主要是一个模型文件和一系列动作文件。然后再通过具体的sdk迁移到各个使用场景中去。因此,这个层面上的拓展性取决于暴露接口的丰富性——毕竟如果能在真实的业务3D环境对Live2D模型进行魔改,有多了好几分乐趣。不过从事实上看,现在这个,还是0。

综上所述,受限于Live2D的技术实现和实际产品设计,这个东西的拓展性真的很差诶。

可替代性

如果哪一天我希望从Live2D迁移到其他技术实现上。这个迁移成本到底怎么样呢。首先,我们知道Live2D这种东西最关键的数据是——动作和动画,其中动画包括手动调整的和各种捕捉软件捕捉到的。

首先这里提到现在我看来Live2D剩下的最大优势,就是可以很方便的从各种动作捕捉软件导入数据并且呈现。在这种情况下,这些动作数据的实际来源其实是第三方软件,那这些数据的可用性并不受Live2D控制,只是如果我来做迁移的话,需要手动开发对应的数据解析,这将是一个艰巨的工作。

另一个情况是Live2D保存出的动作文件。纯文本打开看,可以看到动作文件是用json描述的模型各个动作,变换的百分比。这个描述看起来非常依赖模型数据,因为比如模型预设的左偏头角度是20度的话,25%的动作就是5度,这个数据是依赖模型本身算出来的。不过话说回来本来模型就是我们自己控制的,只要这个模型设计合理的话,问题并不大。

因此,综上所述,可替代性ok没问题。

总结

怎么说呢,与其说Live2D不咋样,还不如说是Live2D令人失望吧,说好的日本黑科技呢,原来是这个鸟样,心理落差太大了不得不喷一波。可以想象到,用过Live2D开发的创业者们,一定还踩过不少大坑。考虑到以上情况下,我认为,在不需要动态捕捉实时交互的场景下,使用Live2D做东西就是图个噱头,实际自己去实现说不定反而效果会更好,开发效率也会更高。

不过现在业界动作捕捉确实是热潮,考虑到Live2D已经布下的产业对动作捕捉的良好支持,Live2D应该会继续在业界称王称霸,知道实际顾客对Live2D坐的小人审美疲劳为止吧。

附:我想要的东西

对于一个熟悉3D建模也熟悉2D动画制作的人来说,如果Live2D往以下方向改善,我也是非常期待的。

1. mesh编辑不限于2D,开放z轴给用户编辑。这样会方便很多,也更利于做出更逼真的伪3D效果。
2. 动画不限于mesh动画,请支持逐帧动画,在眼睛,嘴等细节表情部分用逐帧动画显然更合适。
3. 请依赖mesh作为刚性骨骼,简单的支持一下物理效果,这在做头发等需要模拟重力的场景下,会大大提升工作效率和效果真实性。
4. 请支持阴影效果,现在几乎没发做阴影,要做要么和实际不匹配,要么单独做一层mesh,简直是噩梦。

嗯,以上4点算是向传统的IK动画和3D建模的一个折中吧(跪了
logo