第23章 難題
吐槽完之后,文羽拿著PS游戲光盤進(jìn)了地下室,將這盤《龍珠斗士Z》扔進(jìn)了拆分者。
雖然動(dòng)漫風(fēng)格的材質(zhì)球文羽是能研究出來的,可萬代僅僅給出了5天時(shí)間,想要自己研究出來需要花費(fèi)太多的時(shí)間,況且接下來還有更多的技術(shù)問題需要去解決。
好在擁有拆分者,那種獨(dú)特的漫畫材質(zhì)球很快被拆分者拆解了出來,文羽將材質(zhì)球交給了溫斯頓,讓他根據(jù)原有的制作思路,重新再優(yōu)化一次。
3D美術(shù)機(jī)器人的工作已經(jīng)完成,文羽打開了模型進(jìn)行查看。
獨(dú)角獸模型算是比較中規(guī)中矩的傳統(tǒng)高達(dá)外形,但最特殊的在于獨(dú)角獸高達(dá)擁有特別的精神骨架。
總所周知,精神骨架被一般裝甲覆蓋,進(jìn)入戰(zhàn)斗會(huì)后會(huì)暴露在外,而顏色也根據(jù)機(jī)體不同而又有不同的區(qū)別。因此這個(gè)部分將擁有變形的動(dòng)畫,以及顏色變化的特性。
骨骼技術(shù)是3D動(dòng)畫中最廣泛使用的動(dòng)畫技術(shù),將一套骨骼套入模型,使其與3D模型綁定,然后通過對(duì)骨骼點(diǎn)的控制來實(shí)現(xiàn)3D模型的運(yùn)動(dòng)。
3D美術(shù)機(jī)器人將精神骨架和外部裝甲做了一個(gè)簡(jiǎn)單的骨骼變化作為子骨骼,而在上面再套入一層父級(jí)別骨架,作為獨(dú)角獸機(jī)體的主要?jiǎng)幼鞴趋馈_@便是傳統(tǒng)的復(fù)合動(dòng)畫設(shè)定。
文羽絲毫沒有懷疑這些游戲工廠里的機(jī)器人,工作效率和質(zhì)量高的令人發(fā)指。
僅僅10多個(gè)小時(shí)的時(shí)間,居然連高達(dá)模型的骨骼都已經(jīng)綁定完成,動(dòng)畫也都調(diào)節(jié)完成。這樣也就只需要將模型導(dǎo)入進(jìn)UE4虛幻引擎,就可以測(cè)試模型動(dòng)作和原動(dòng)畫的匹配度了。
文羽隨后又查看了溫斯頓的工作情況,特殊的動(dòng)漫材質(zhì)球已經(jīng)寫好,溫斯頓為材質(zhì)球設(shè)置了5層貼圖,以此來達(dá)到動(dòng)畫的特殊效果。
但“動(dòng)態(tài)遮蓋技術(shù)”的程序卻依舊沒有完成。
這個(gè)看似簡(jiǎn)單的程序,其實(shí)是極難實(shí)現(xiàn)的,畢竟場(chǎng)景中的模型,貼圖,燈光,特效等等,都會(huì)進(jìn)入到GPU進(jìn)行計(jì)算,想要?jiǎng)討B(tài)的遮蓋,更是難上加難。
為此溫斯頓已經(jīng)開始在重新修改攝像機(jī)的基本工作原理。
UE4虛幻引擎提供了多種攝像機(jī),這也算是非常重要的一個(gè)元素。
通俗的講,這個(gè)攝像機(jī)就是玩家視角。攝像機(jī)所捕捉到的畫面將是最終游戲的畫面。
因此必須更改原有引擎中的默認(rèn)攝像機(jī)程序,才能實(shí)現(xiàn)最難的“動(dòng)態(tài)遮蓋”技術(shù)。
溫斯頓不得不返回底層開始嘗試修改基層代碼,加入特殊的函數(shù),才能進(jìn)行特殊的實(shí)時(shí)動(dòng)態(tài)計(jì)算,以此來打通攝像機(jī)和模型貼圖之間的動(dòng)態(tài)數(shù)據(jù)計(jì)算。這樣反反復(fù)復(fù),耽誤了太多的時(shí)間。
這就好比現(xiàn)在的安卓陣營(yíng)手機(jī)廠商,他們都擁有自己的一套系統(tǒng),就如小米的MIUI,華為的EMUI,魅族的FLYME。這些系統(tǒng)的底層都是安卓原生系統(tǒng),在這之上進(jìn)行修改,加強(qiáng),優(yōu)化,從而變成了自己獨(dú)特的,富有更多完善功能的自制安卓系統(tǒng)。
UE4虛幻引擎同樣如此,只要擁有優(yōu)秀的程序員,你就可以基于UE4引擎開發(fā)出更具獨(dú)特功能的程序。
美術(shù)方面沒有什么大問題,文羽簡(jiǎn)單的測(cè)試了下獨(dú)角獸的骨骼動(dòng)畫,又與動(dòng)畫中的打斗分鏡頭反復(fù)進(jìn)行了對(duì)比。
不知不覺,一天的時(shí)間又過去了。
時(shí)間很快來到了第4天。
溫斯頓已經(jīng)完成第一版的動(dòng)漫效果材質(zhì)球,只是動(dòng)態(tài)遮蓋技術(shù)依舊沒有完成。
文羽查看了下程序的總體進(jìn)度,大概在80%左右,要知道在這幾天中,溫斯頓幾乎是超負(fù)荷工作,但依舊還有很多技術(shù)問題需要解決。
沒有辦法,文羽只得先將動(dòng)漫材質(zhì)球應(yīng)用到完成好的獨(dú)角獸模型上。這樣他才能瀏覽最后的渲染效果。
期初的測(cè)試非常好,畫面和文羽自己預(yù)計(jì)的一樣,完完全全還原了動(dòng)畫片中高達(dá)模型的質(zhì)感。而且這還是高清畫質(zhì),1080P模式下,畫面保持在了40-50幀。
可當(dāng)來到動(dòng)畫的最后階段,獨(dú)角獸機(jī)體覺醒,一塊塊的外部裝甲被彈開,暴露出了獨(dú)角獸獨(dú)有的精神骨架,隨后精神骨架開始爆發(fā)出青色的光芒,配合上巨量的光影特效,這一幕可謂擁有不亞于科幻大片的震撼感。
雖然震撼,可文羽一點(diǎn)也高興不起來,畫面的FPS參數(shù)已經(jīng)掉到了15幀。。。隨著特效的不斷變化,畫面也從順滑變成了幻燈片!
文羽揉了揉太陽(yáng)穴,無奈的嘆出了一口氣,看來這個(gè)動(dòng)態(tài)遮蓋技術(shù)不完成,玩家也無法體驗(yàn)到這極具震撼力的動(dòng)畫。
晚上11點(diǎn)50,溫斯頓雖然是火力全開,可最關(guān)鍵的動(dòng)態(tài)遮蓋依然無法實(shí)現(xiàn)。而問題的關(guān)鍵就出在了這個(gè)“動(dòng)態(tài)”上面。
在程序里面,只要牽扯到動(dòng)態(tài)問題,無疑都會(huì)讓程序員頭痛不已。
程序內(nèi)部,各條指令環(huán)環(huán)相扣,動(dòng)態(tài)函數(shù)不計(jì)其數(shù),越多的使用動(dòng)態(tài)函數(shù)無疑會(huì)加大CPU的運(yùn)算負(fù)擔(dān)。
假如獨(dú)角獸的正面為1,那么為1的部分進(jìn)入GPU進(jìn)行運(yùn)算。背面則為0,不進(jìn)行計(jì)算。
當(dāng)獨(dú)角模型轉(zhuǎn)動(dòng)的時(shí)候,正面轉(zhuǎn)到了背面,那么要如何讓計(jì)算機(jī)來判定呢?
溫斯頓的做法是調(diào)用模型的旋轉(zhuǎn)坐標(biāo)函數(shù),根據(jù)坐標(biāo)的變化,來判斷模型的朝向,以此來判定那個(gè)部位應(yīng)該進(jìn)入GPU進(jìn)行計(jì)算。
那么獨(dú)角獸變形的時(shí)候呢?獨(dú)角獸作出各種戰(zhàn)斗動(dòng)作的時(shí)候呢?
這個(gè)時(shí)候就需要調(diào)動(dòng)更多的坐標(biāo),方向函數(shù),乃至于縮放函數(shù)。
如此一來,CPU的運(yùn)算負(fù)荷極具增加。
凌晨3點(diǎn),溫斯頓完成了動(dòng)態(tài)遮蓋技術(shù),文羽在測(cè)試了效果以后,也是無奈的搖了搖頭。
在進(jìn)入最后階段,F(xiàn)PS只能維持在23-26幀左右,雖然有了很大的提升,可依然無法滿足30幀的最低要求。畫面一旦低于30幀,給玩家造成的傷害可是致命的。
文羽抓著頭皮,在地下室反復(fù)的踱步,時(shí)間不停的在流逝。這時(shí)外面響起了雞鳴聲。
文羽打開UE4引擎后臺(tái),開始查看硬件工作數(shù)據(jù)信息。一大串的數(shù)據(jù)像是刷屏一般的快速掠過屏幕。
按了下暫停,文羽拿出眼藥水滴了幾滴,眨巴了眼見,然后重新按下開始,繼續(xù)快速查看。
文羽知道目前“動(dòng)態(tài)遮蓋”其實(shí)已經(jīng)完成,他確實(shí)可以減少當(dāng)前場(chǎng)景40-45%GPU占用率,而且程序起到了該有的作用,將一開始的15幀提升到了幾乎25幀。
其實(shí)問題出在“動(dòng)態(tài)遮蓋”程序自己的身上,由于大量的調(diào)用各種動(dòng)態(tài)函數(shù),因此這個(gè)程序在運(yùn)行的時(shí)候,降低了GPU的負(fù)載,卻增加了CPU的負(fù)擔(dān),因此這個(gè)卡頓是來自CPU的。