• 发文
  • 评论
  • 微博
  • 空间
  • 微信

专访|《Dance Dance Maker》吕阳鹏:如何打造VR界的MMD

VR陀螺 2020-09-22 22:54 发文

「哦~耶!!!」就在Novia准备起身走向领奖台的一刹那,他的身边响起阵阵欢呼声。

这里并不是在开明星演唱会,而是高通公司举办的第二届XR创新应用挑战赛颁奖典礼现场。突如其来的欢呼声吸引了所有人的目光,台下观众纷纷回头张望。

为颁奖典礼平添几份活跃气息的,是一个胖乎乎、身着星战主题黑色短袖、戴个黑边眼镜的年轻小伙,他在众人的目光“护送”下正迈着八字步向台前方向走去。他的身后,一块硕大牌子上写着——独立游戏开发者之光。

随性、阳光、粉丝成堆~没错,这就是Novia给我的第一印象。他的获奖作品叫做《Dance Dance Maker》,其主打功能是自定义虚拟角色导入、舞蹈动画编辑及播放,其玩法和功能更像是基于VR硬件运行的MMD(MikuMikuDance)。

从宣传视频来看,浓浓的二次元风扑面而来,似乎也能解释这小伙为啥有这么多粉丝助阵了吧!


这次的偶然碰面,让我对这位名为Novia的独立开发者颇为好奇,当然,这其中不光包括想弄清他身后那群忠实粉丝的来路。 毕竟,在国内VR内容生态尚未成熟的情况下,团队生存尚属不易,哪类型VR游戏能挣到钱也并非定数。作为独立开发者来说,依靠一款爆款游戏长期坐收鱼翁之利的情况显然不存在。 那么,Novia为何会选择成为VR游戏独立开发者;他究竟是怎样的一个人;又出于怎样的初衷创作出《Dance Dance Maker》的呢?顶着一脑袋的“黑人问号”,我决定亲自和他聊聊。   独立VR游戏开发者Novia  
「Dance dance maker一共开发了三个月,这三个月是没有任何收入的,和之前上班相比,相当于损失了三个月的工资」 在我再三逼问下,Novia用他的自黑式幽默说出了上面这一段话。Novia的真名叫做吕阳鹏,截至目前,他已经做了九个月的VR游戏独立开发者。  

《Dance Dance Maker》开发者Novia(图左) 起初,吕阳鹏还仅仅是一名每天和代码打交道的程序员。正所谓不想开发游戏的码农不是好程序员,那时候的吕阳鹏就对游戏开发抱有极大兴趣,只是他当时定位是在手机和PC端。 他告诉陀螺君,那会就有计划成为一名独立游戏开发者,公司的事情不算很多,便利用业余时间学习各种游戏开发方面的知识。因为兴趣在这,加上有作为程序员的基础在,学习游戏开发的过程并没有想象中那么艰难。 当时,吕阳鹏使用的是LibGDX,这是一款基于java 的OpenGL游戏引擎。放在今天,已经很少有人知道或者使用这款游戏引擎做开发了,但的确有几款基于它开发的像《Kingdom rush》、《Pokemon Go》这样的游戏被人们所熟知。

可惜的是,早期上传的游戏随着应用平台的更新有些已经下架无法下载到了。在成为VR游戏独立开发者之前,吕阳鹏就职于小米公司。 当时作为小米探索实验室小米VR的主程,他参与了小米VR一体机Mi VR(海外成为Oculus Go)的UI系统开发。我们在Mi VR一体机里看到的Launcher、应用商店及浏览器均出自吕阳鹏之手。 在职小米期间,吕阳鹏首次尝试了VR游戏开发。 2019年1月,一款名为《Dance.VR》的游戏上线小米VR商城,玩家可以在里面选择任意角色的二次元女主角,自定义场景和舞蹈类型,然后以身临其境的第一人称视角观看小姐姐们跳舞。

《Dance.VR》游戏画面截图 《Dance.VR》提供了11个人物模型、9个场景和12段舞蹈,除了观看舞蹈玩家还可以在游戏场景中随意移动。这成了当时小米VR论坛里的热议话题,大家会讨论最佳的观舞视角。当然,由于靠太近会导致穿模,玩家若用某些奇怪视角观看定会下一大跳,正所谓:行车不规范,亲人两行泪。  

《Dance.VR》游戏画面截图 加入小米,让吕阳鹏第一次接触到VR。他觉得VR游戏行业目前的环境和Google Play诞生之初十分类似,在没有各种硬性规定等条条框框的制约之下,其给到开发者的发挥空间十分巨大。 今年年初,疫情肆虐。宅在家的吕阳鹏依旧闲不住。他制作了一款名为《口罩侠》的抗疫主题手机游戏,并发布在itch.io(新兴游戏开源独立游戏平台)。  

《口罩侠》游画面内截图 “我是个东北人,所以特别爱看《乡村爱情》。《口罩侠》的故事正是发生在大脚的超市,去超市采购的人是谢广坤、刘能、赵四,他们会把采购的物资送到一辆卡车上,送货员小哥会把货物送到派出所,”吕阳鹏解释说。 1月27日,安徽省六安市公安局裕安分局小华山派出所内,一位小伙子匆忙丢下500个口罩,说了句:“你们辛苦了!”转身就跑。民警急忙追赶,却并未追上,只得用敬礼表示谢意——这款游戏正是根据该真实事件改编。

游戏一经发布便引起玩家共鸣,上线后的一周时间内位居榜首。吕阳鹏觉得,结合《乡村爱情》素材的玩法和幽默风格让玩家暂时从紧绷心态中解脱出来,通过游戏将积极乐观的态度传达给玩家,这也是他喜欢做游戏开发的原因之一。 与此同时,吕阳鹏开始了对于VR游戏开发的新一波尝试。这次,他将目光落在了MRTK上。

MRTK全称为Mixed Reality Toolkit,这是一个包含脚本和组件的工具集合,微软设计MRTK的目的在于加速基于Hololens及Windows平台MR头戴设备应用的开发。MixedRealityToolKit_Unity是基于MRTK(https://github.com/microsoft/MixedRealityToolkit-Unity)设计的,因此结合Unity来开发更简单方便。 MRTK原生支持Hololens,但拓展兼容性很强。吕阳鹏在自学MRTK期间翻阅网站论坛时发现,有人已经将MRTK移植到Oculus Quest平台上,这激起了他极大兴趣。 这是因为,VR、AR游戏内容的通用性一直是让开发者头疼的问题。对于一款VR游戏来说,想要原生支持AR平台是不可能的事情。一来两种平台的底层支撑算法并不一致,其次其交互方式也是大不相同。 MRTK的强兼容性,或许允许玩家打造一款可以从底层算法和交互层面原生支持部署到VR、AR双平台的应用内容。2020年2月,高通公司宣布启动基于高通骁龙XR2芯片技术的“2020届Qualcomm XR 创新应用挑战赛”,吕阳鹏觉得这是一次验证想法的绝佳机会。

吕阳鹏决定以去年发布在小米VR平台的《Dance.VR》作为基础,加入交互操作、动态加载模型、场景创作等新功能。由于一开始定位就是打造类似MMD的VR平台编辑工具,于是新版本将其名称缩写倒置,由此得名《Dance Dance Maker》(DDM)。  
DDM背后,MRTK和VRM的融合之路  
有了想法,剩下的事情就是撸起袖子加油干。 《Dance Dance Maker》要实现动态加载模型并不容易,首先它需要能够调用支持通用格式的人物模型,其次要能识别出这些模型的骨骼绑定、碰撞体,最后还要能够加载出与舞蹈动作匹配的运行算法。 吕阳鹏觉得,这些问题都是需要一个开源的通用接口作为支撑。由于DDM更容易令人联想到目前大火的虚拟主播和虚拟偶像,他很快锁定了一个理想的解决方案——VRM。 视频:VRM宣传视频VRM宣传视频 VRM是由VRM Consortium公司推出的VR软件人物3D建模标准格式,该公司希望普及VRM格式能够降低VR游戏、Youtube虚拟人物化身和其他VR软件的开发门槛。 参与该公司运营的13家公司背景复杂,涵盖领域全面,典型公司包括Unity日本(游戏引擎)、VR技术公司IVR and XVI Inc.、youtube虚拟主播公司Wright Flyer Live、直播平台howroom和 Mirrativ、通讯公司Dwango等等,任天堂也以观察员身份参与VRM Consortium公司运作。

然而,将MRTK与VRM相结合并不是件容易的事情。 VRM基于gITF2.0协议,后者是由OpenGL推出的一种3D物体跨平台分享协议。对于任何导入VRM的模型,都会被自动识别并转换为支持gITF2.0协议的格式。然而,MRTK拥有一套自己的gITF协议标准,吕阳鹏自己实现了glTF的一个子集。两个gITF的实现过程中存在公共部分,就会导致运行冲突。 为了让两套gITF实现能够并行,需要修改部分MRTK的代码实现兼容。 此外,VRM模型对于缩放操作需要每次执行都需要重新计算碰撞体的大小,但是由于MRTK本身没有提供一个在缩放过程中的实时更新,就导致操作过程中的一些参数数据无法调用和显示。 举个例子,当玩家操作模型进行放大和缩小时,如果缩放一半的时候不松手,那这时候的模型尺寸是多少玩家并不清楚。严重的是,在玩家缩放模型的时候,VRM的计算依旧是基于原模型执行,使得碰撞体计算出错而出现模型缩放时头发飞到天上的情况。 这一点,也需要对MRTK代码进行修改才能实现, 让MRTK能在缩放过程中实时更新大小。

非人类模型依旧绑定人类骨骼系统,匹配部分带动模型运动,其余部分隐藏。
值得一提的是,《Dance Dance Maker》中载入的不光是人物模型,还有类似龙、鸟、章鱼之类的非人物类模型。 VRM的tricky之处在于,对于非人物类模型,作者可以选择部分人体骨骼进行绑定,例如只绑定头部或者手部的部分骨骼,这样可以在非人类模型上加载运行人类模型的动作文件。因此,章鱼的骨骼绑定的其实是一个人物模型的头部,如果玩家使用替换材质的功能,则有几率能够看到隐藏之后人体骨骼的其他部分。


看似流畅、简洁的交互方式,背后其实是一整套复杂的底层算法逻辑在做支撑。 俗话说不打不相识,MRTK的交互方式在VR中实现对吕阳鹏来说是整个开发历程中最难熬的阶段,而在打通之后却又成为了DDM最具吸引力的创新玩法之一。 先来说挑战,VR模型以MRTK支持的交互模式显示,首先要实现在模型外部遮罩一层boundingbox。在保证完全包裹物体的情况下,要尽可能控制boundingbox的大小(boundingbox过大或过小会给操控带来麻烦,视觉上也不美观)。 为保证流畅运行,吕阳鹏首先要在VRM优化上下苦功夫。 未优化情况下,一个模型渲染一次需要199个DrawCall(指OpenGL的描绘次数)。优化则需要从三个方向入手: 1、简化Shader复杂度 原有的默认渲染通道Shader是MultiPass,如果直接用在移动VR运行会占据较大内存,去掉卡通渲染过程中没用的Pass,进而形成新Pass的Shader可以有效解决这一问题。  

值得一提的是,吕阳鹏去掉了OutLine Pass,这是因为他发现其在运行应用的阶段不光没有增加人物的卡通感,反而增加了人物的锯齿感。因此去掉OutLine Pass不光是基于优化考虑,更是结合显示效果考量。 此外,他还去掉了外部光照计算的Pass。因为DDM的场景比较简单,其中只有一个静态光源(平行光),所以可以省去。由于没有额外的光源,Forward pass的光照计算也可以省去。

优化前199个DrawCall(上图)

优化后100个DrawCall(上图)
修改后的Shader复杂度大大降低,原本需要199个DrawCall渲染的模型,现在只需要100个DrawCall即可,相较之前降低一半。 2、VR人物模型Submesh动态合批问题 人物模型的绘制,在默认情况下时间全部用在了角色头部一刘一刘的头发上,而腿部和衣服的绘制非常迅速。 对于一个人物模型来说,一个整体的头发Meshes内嵌包含了82个submesh,后者又共享了同一个材质资源。


简单来说,这是因为头发的绘制需要根据发丝数量绑定DrawCall,而四肢和服装只要一个DrawCall即可。这就像是用笔画画,衣服和四肢只需要点一下就可以全部画好,而头发部分却要精细到从每一根发丝画起,这必然是耗时耗力的。 对于有Unity优化经验的人来说,会使用动态合批将其整合为一个或者几个DrawCall,但在实际运行中却发现,这一方式却行不通。这是因为Unity的动态合批有很多的限制要求,比如Meshe的顶点个数不能超过900个,Meshe上应用的Shader不能是Multipass等等,最终导致动态合批失败。 视频:VRM渲染shader简化教程(1)优化前视频:VRM渲染shader简化教程(2)优化后 为了解决这一问题,吕阳鹏尝试在逆向Submesh的过程中将其重新还原为Mesh,然后把它重新分配到GameObjects上,之后通过很多已知插件对其重新进行合批(当时实际是自己写的合批逻辑,但其实也可以用assetstore上提供的现成插件,例如《Skinned Mesh Combiner》,能达到同样的效果),到这里可以得到一堆共享材质资源的GameObjects,就很容易用插件进行合批。 完成上述操作,再次调用人物模型时头发一次出来了。这次优化带来的效果是将需要100个DrawCall的人物模型优化到16个DrawCall,相较之前降低尽7倍。

优化后16个DrawCall(右图) 3、降低运行对于内存的占用 在DDM未优化的时候,其基于VR一体机运行时占用的运行内存达到500M左右。实际上,吕阳鹏使用Pico Neo2进行测试,发现当运行内存达到600M的时候会很容易引发设备内存溢出错误。 根据分析,这些高占有内存的VR内容在载入过程中加载的纹理实际上都是没有经过压缩的ARGB或者RGB32那种纹理。根据Oculus官方给出的压缩纹理的方式提到:在编译的时候,建议把纹理直接压缩成ASTC格式。  

ASTC是一种压缩率比较高,且对于纹理损耗比较小的一种方式。但吕阳鹏并不建议在运行时把纹理动态压缩成ASTC格式,这是因为Unity官方并没有提供这样的API支持在运行时压缩纹理为ASTC格式,另外ASTC格式压缩时间很长,人物身上纹理越多,加载时间越长。 这里建议直接用Unity官方提供的API Texture2D.Comprees,它可以把纹理在运行时压缩成DXT格式。具体的压缩方法,是修改VRM的底层代码,让gITF在加载texture的时候对它打一个补丁,补丁可以让其在加载完后立刻进行压缩,以实现纹理压缩。 这一步优化之后,压缩前纹理为64MB压缩后变成16MB,降为原来的1/4。

反复测试后,吕阳鹏将纹理大小限制在512范围内。这个数字对于VRM中卡通形象纹理已经足够。这样的限定条件进一步通过压缩纹理节省出更多内运行内存,其结果就是DDM中可以加入更多炫酷的粒子特效,但整体运行依旧流畅如初。 经过对人物模型加载的四重优化,吕阳鹏总算完成了VRM和MRTK融合的最难一步。

再来说创新,成功融合后的VRM和MRTK可以基于boundingbox碰撞体交互逻辑流畅运行,并且支持实时导入VRM、GLTF格式模型。这才有了《Dance Dance Maker》中,玩家可以通过拖拽和碰撞让游戏中的人物手持光剑或者头戴眼罩。 基于MRTK的交互逻辑,吕阳鹏开发出通过拖拽方形魔盒来改变材质的方式。玩家可以选择具有不同外表特征的魔盒,将其与希望改变外形的人物或者物体进行碰撞,后者外貌便会被赋予魔盒上的材质。

吕阳鹏觉得,这样的交互方式更为直观且无需玩家付出学习成本。原本在Hololens中才能实现的直观交互方式,通过MRTK终于也被带入了VR世界。接下来,他准备继续基于这一创新点进行完善,后续会加入更多类似的交互体验,比如玩家可以直接拿起磁带放进收音机听歌或者端起水壶给自己面前的杯子倒满水......  《Dance Dance Maker》的未来    
《Dance Dance Maker》的确充满了二次元风格,但吕阳鹏却并不是我以为的“二次元大佬”,那些在颁奖典礼上为他欢呼的人,其实是他VR圈的一些朋友。 他们虽然没有直接参与这款游戏的研发,但是在项目早期处在原型阶段的时候最先体验并且为《Dance Dance Maker》提供了反馈。面对推动这款游戏开发进度的“功臣”们,吕阳鹏内心也是憋着一股劲——你们的diss我收下了,我要用实际行动证明这款游戏真的可以! 2020年9月5日,第二届XR创新应用挑战赛颁奖典礼现场,吕阳鹏开发的《Dance Dance Maker》获得VR应用组白金奖。而他身后的欢呼声,正是源自于朋友们对他三个月努力开发的认可。 吕阳鹏告诉陀螺君,《Dance Dance Maker》的优势在于是第一款尝试将MRTK和VRM结合,打造易于在VR、AR全平台移植的内容。接下来,他将考虑为应用加入多人交互模式和自定义AI调用功能,以满足玩家的多人创作和与虚拟人物交互的需求。

之后,他将基于DDM建立玩家社群,并结合其二次元特性与B站UP主、抖音等平台合作推广内容,并基于反馈进行内容的进一步升级。目前这款应用已经上线SideQuest并且支持手势追踪,很快就会上线Pico Neo2。 吕阳鹏说:“身为独立游戏开发者,可以不受开发团队条条框框的限制,更不会因为养不活团队而感到百感交集。至于将来是成立游戏开发团队走创业路,还是找份稳定工作维持自己的爱好,唯独专心做好感兴趣的事情这一点是不会变的。”

 



声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    VR陀螺

    VR陀螺,是游戏陀螺旗下关注VR...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码