性能上,UE沒有對(duì)所有模塊做全部測(cè)試,但是Unity經(jīng)歷了90%以上手游的考驗(yàn),相信可以保證影片的流暢性;同時(shí)因?yàn)橛懈嗟囊苿?dòng)開發(fā)案例,所以小勝UE。
操作上,UE更強(qiáng)大的功能必然會(huì)導(dǎo)致編譯時(shí)間較長(zhǎng);對(duì)于喜歡改裝引擎的老司機(jī),修改UE代碼需要對(duì)它所有的模塊都熟知;加上是基于C++的開發(fā),程序需要格外小心內(nèi)存、指針等各種問題。再看Unity,Unity把一些固定代碼做了封裝,改裝引擎最多只能是對(duì)某些模塊進(jìn)行重寫(當(dāng)然,這樣改裝的結(jié)果可能導(dǎo)致性能略低,但是對(duì)于我們項(xiàng)目而言,不涉及過多硬件交互),不太容易出現(xiàn)問題;Unity是基于C#的開發(fā),程序也相對(duì)耐操一些,對(duì)于支持VR的PC硬件,內(nèi)存不是最致命的問題,但怕GC太多。 綜上所述,我建議團(tuán)隊(duì)采用Unity引擎。盡管后來被幾個(gè)大坑坑得鼻青臉腫,但是從項(xiàng)目進(jìn)度以及結(jié)果來看,這個(gè)引擎基本上達(dá)到了我們想要的效果。 二、技術(shù)創(chuàng)新 Unity引擎本身的畫質(zhì)相對(duì)來說是較為簡(jiǎn)樸的,但是對(duì)于電影來說,藝術(shù)家希望能有一些更豐富的畫面表現(xiàn)。 在這里我們舉個(gè)簡(jiǎn)單小例子: 如上圖這個(gè)光影效果,上面窗戶衍射效果就有很多種實(shí)現(xiàn)方法。先對(duì)Depthmap做邊緣的blur,然后計(jì)算光照是一種辦法;直接對(duì)Render Target做局部的bloom也是一種方法;OffScreenRenderTarget,渲染一張低分辨率的光照貼圖,然后合成回MainTarget,也不失為一種好方法。 對(duì)于地上陰影的邊緣效果,怎么實(shí)現(xiàn)呢?CookieTexture?錯(cuò)誤,你沒有辦法用CookeTexture去解決不規(guī)則的陰影衍射,更何況陰影的邊緣顏色是藝術(shù)家幻想的。那怎么辦?其實(shí)不難,它是軟陰影算法的變種,所以,利用概率采樣ShadowMap的方法得到陰影邊緣,然后在邊緣地區(qū)做顏色疊加即可實(shí)現(xiàn)。 我們?cè)倥e一個(gè)小例子: 這狗的耳朵是不是有點(diǎn)透明?其實(shí)這就是個(gè)SSS效果,實(shí)現(xiàn)方法是:對(duì)于一個(gè)表面,沿著視線方向做一個(gè)延伸,取到次表面的光照,再疊加到前表面的顏色上。仔細(xì)看Unity樹葉的Shader(Unity內(nèi)置Terrain里的Shader),有個(gè)變量backcontrib,是把樹葉背面的顏色疊到前面來,其實(shí)也是sss的變種。 三、重重阻礙 我們項(xiàng)目的開發(fā)進(jìn)程充滿艱辛,在此列舉部分,給可能要入坑的同學(xué)提個(gè)醒: 1. 普通物件Standard材質(zhì) 因?yàn)檫M(jìn)度原因,我們?nèi)匀徊捎昧薝nity自帶Standard里的PBR光照模型,這個(gè)光照模型是經(jīng)典模型的簡(jiǎn)化版,對(duì)于大多數(shù)渲染對(duì)象來說還是可行的。但Unity自帶的StandardShader在支持半透物件時(shí),就會(huì)出現(xiàn)癱瘓的情況。如下圖: 左圖為正確效果,右圖為UnityStandard的錯(cuò)誤效果。這是由于StandardShader里Transparent 沒有 Z Buffer 導(dǎo)致。那么有同學(xué)又會(huì)問“我用cut out不就行了么?”但是cut out是用RenderQueue來解決問題的,我希望上面這個(gè)腿和靴子來個(gè)半透明效果,它就沒辦法實(shí)現(xiàn)了。比如下圖這個(gè)淡出效果: 此外,Unity還有一個(gè)致命的“優(yōu)化”,就是在OpaqueQueue之后會(huì)把ShadowMap給銷毀掉。所以半透明物件無法接受陰影。另外,關(guān)于點(diǎn)光源,如果光源范圍內(nèi)沒有任何物體,Unity會(huì)把Lightmap也“優(yōu)化”掉。類似這樣的小細(xì)節(jié)Bug比較多,但需求不會(huì)因?yàn)橐娴腂ug而減少或者降低標(biāo)準(zhǔn)。一個(gè)坑一個(gè)坑地填起來,也花費(fèi)了我們相當(dāng)大的精力。 2. 特效 如果說普通物件的材質(zhì)是被Unity坑了一下,那么特效就是被VR的SDK給坑得鼻青臉腫。當(dāng)時(shí)我們用的是HTC VIVE的Steam VR的SDK。研發(fā)完成之后才發(fā)現(xiàn),這個(gè)SDK對(duì)RenderCommand OffScreen Camera支持極差(OffScreenCamera沒有辦法左右眼矯正),也就是說所有的特效必須寫在固定管線里,比如這種Volumetric Light。我們需要離線烘焙好ShadowMap,然后再前向渲染時(shí),用RayTrace去模擬它的attention。 上面兩張圖中,左圖是正確的效果,右圖是SteamVR里可能看到的效果(因?yàn)镺ffScreen Camera位置沒有經(jīng)過左右眼矯正,所以位置看上去是偏移的,甚至不在屏幕里)。 3. 其他 在VR的開發(fā)中,相機(jī)也是個(gè)坑。因?yàn)閭鞲衅鲿?huì)實(shí)時(shí)地重置相機(jī)位置,所以你沒有辦法去動(dòng)態(tài)改變相機(jī),只能通過反向移動(dòng)場(chǎng)景的方式來實(shí)現(xiàn)相機(jī)的動(dòng)態(tài)切換。這也消耗了我們很多的時(shí)間來填這個(gè)坑。投稿/爆料:tougao@youxituoluo.com
稿件/商務(wù)合作: 六六(微信 13138755620)
加入行業(yè)交流群:六六(微信 13138755620)
元宇宙數(shù)字產(chǎn)業(yè)服務(wù)平臺(tái)
下載「陀螺科技」APP,獲取前沿深度元宇宙訊息
上一篇: Unity印度員工數(shù)量增加兩倍 大力進(jìn)軍VR和AR領(lǐng)域
下一篇: 深圳市科創(chuàng)委劉一平:2017年深圳市擬投VR/AR產(chǎn)業(yè)專項(xiàng)資金2.1億元