游戏工厂:正文卷 第23章 难题
吐槽完之后,文羽拿着PS游戏光盘进了地下室,将这盘《龙珠斗士Z》扔进了拆分者。
虽然动漫风格的材质球文羽是能研究出来的,可万代仅仅给出了5天时间,想要自己研究出来需要花费太多的时间,况且接下来还有更多的技术问题需要去解决。
好在拥有拆分者,那种独特的漫画材质球很快被拆分者拆解了出来,文羽将材质球交给了温斯顿,让他根据原有的制作思路,重新再优化一次。
3D美术机器人的工作已经完成,文羽打开了模型进行查看。
独角兽模型算是比较中规中矩的传统高达外形,但最特殊的在于独角兽高达拥有特别的精神骨架。
总所周知,精神骨架被一般装甲覆盖,进入战斗会后会暴露在外,而颜色也根据机体不同而又有不同的区别。因此这个部分将拥有变形的动画,以及颜色变化的特性。
骨骼技术是3D动画中最广泛使用的动画技术,将一套骨骼套入模型,使其与3D模型绑定,然后通过对骨骼点的控制来实现3D模型的运动。
3D美术机器人将精神骨架和外部装甲做了一个简单的骨骼变化作为子骨骼,而在上面再套入一层父级别骨架,作为独角兽机体的主要动作骨骼。这便是传统的复合动画设定。
文羽丝毫没有怀疑这些游戏工厂里的机器人,工作效率和质量高的令人发指。
仅仅10多个小时的时间,居然连高达模型的骨骼都已经绑定完成,动画也都调节完成。这样也就只需要将模型导入进UE4虚幻引擎,就可以测试模型动作和原动画的匹配度了。
文羽随后又查看了温斯顿的工作情况,特殊的动漫材质球已经写好,温斯顿为材质球设置了5层贴图,以此来达到动画的特殊效果。
但“动态遮盖技术”的程序却依旧没有完成。
这个看似简单的程序,其实是极难实现的,毕竟场景中的模型,贴图,灯光,特效等等,都会进入到GPU进行计算,想要动态的遮盖,更是难上加难。
为此温斯顿已经开始在重新修改摄像机的基本工作原理。
UE4虚幻引擎提供了多种摄像机,这也算是非常重要的一个元素。
通俗的讲,这个摄像机就是玩家视角。摄像机所捕捉到的画面将是最终游戏的画面。
因此必须更改原有引擎中的默认摄像机程序,才能实现最难的“动态遮盖”技术。
温斯顿不得不返回底层开始尝试修改基层代码,加入特殊的函数,才能进行特殊的实时动态计算,以此来打通摄像机和模型贴图之间的动态数据计算。这样反反复复,耽误了太多的时间。
这就好比现在的安卓阵营手机厂商,他们都拥有自己的一套系统,就如小米的MIUI,华为的EMUI,魅族的FLYME。这些系统的底层都是安卓原生系统,在这之上进行修改,加强,优化,从而变成了自己独特的,富有更多完善功能的自制安卓系统。
UE4虚幻引擎同样如此,只要拥有优秀的程序员,你就可以基于UE4引擎开发出更具独特功能的程序。
美术方面没有什么大问题,文羽简单的测试了下独角兽的骨骼动画,又与动画中的打斗分镜头反复进行了对比。
不知不觉,一天的时间又过去了。
时间很快来到了第4天。
温斯顿已经完成第一版的动漫效果材质球,只是动态遮盖技术依旧没有完成。
文羽查看了下程序的总体进度,大概在80%左右,要知道在这几天中,温斯顿几乎是超负荷工作,但依旧还有很多技术问题需要解决。
没有办法,文羽只得先将动漫材质球应用到完成好的独角兽模型上。这样他才能浏览最后的渲染效果。
期初的测试非常好,画面和文羽自己预计的一样,完完全全还原了动画片中高达模型的质感。而且这还是高清画质,1080P模式下,画面保持在了40-50帧。
可当来到动画的最后阶段,独角兽机体觉醒,一块块的外部装甲被弹开,暴露出了独角兽独有的精神骨架,随后精神骨架开始爆发出青色的光芒,配合上巨量的光影特效,这一幕可谓拥有不亚于科幻大片的震撼感。
虽然震撼,可文羽一点也高兴不起来,画面的FPS参数已经掉到了15帧。。。随着特效的不断变化,画面也从顺滑变成了幻灯片!
文羽揉了揉太阳穴,无奈的叹出了一口气,看来这个动态遮盖技术不完成,玩家也无法体验到这极具震撼力的动画。
晚上11点50,温斯顿虽然是火力全开,可最关键的动态遮盖依然无法实现。而问题的关键就出在了这个“动态”上面。
在程序里面,只要牵扯到动态问题,无疑都会让程序员头痛不已。
程序内部,各条指令环环相扣,动态函数不计其数,越多的使用动态函数无疑会加大CPU的运算负担。
假如独角兽的正面为1,那么为1的部分进入GPU进行运算。背面则为0,不进行计算。
当独角模型转动的时候,正面转到了背面,那么要如何让计算机来判定呢?
温斯顿的做法是调用模型的旋转坐标函数,根据坐标的变化,来判断模型的朝向,以此来判定那个部位应该进入GPU进行计算。
那么独角兽变形的时候呢?独角兽作出各种战斗动作的时候呢?
这个时候就需要调动更多的坐标,方向函数,乃至于缩放函数。
如此一来,CPU的运算负荷极具增加。
凌晨3点,温斯顿完成了动态遮盖技术,文羽在测试了效果以后,也是无奈的摇了摇头。
在进入最后阶段,FPS只能维持在23-26帧左右,虽然有了很大的提升,可依然无法满足30帧的最低要求。画面一旦低于30帧,给玩家造成的伤害可是致命的。
文羽抓着头皮,在地下室反复的踱步,时间不停的在流逝。这时外面响起了鸡鸣声。
文羽打开UE4引擎后台,开始查看硬件工作数据信息。一大串的数据像是刷屏一般的快速掠过屏幕。
按了下暂停,文羽拿出眼药水滴了几滴,眨巴了眼见,然后重新按下开始,继续快速查看。
文羽知道目前“动态遮盖”其实已经完成,他确实可以减少当前场景40-45%GPU占用率,而且程序起到了该有的作用,将一开始的15帧提升到了几乎25帧。
其实问题出在“动态遮盖”程序自己的身上,由于大量的调用各种动态函数,因此这个程序在运行的时候,降低了GPU的负载,却增加了CPU的负担,因此这个卡顿是来自CPU的。