為什麼虛幻4的渲染要比unity強,強在哪裡了,想知道底層原理解釋?
作為一個白天整Unity,晚上學習UE4 KlayGE等引擎的業餘選手路過(其實我還弄過cocos2d-x,不過這玩意兒對我來說都是毫無收穫的記憶...從 @叛逆者 龔大那邊學到了非常多東西,咳咳順便打個小廣告)
其實很多點都是前面的大大都提到了,從我最大的感受來說:兩個引擎的定位就不一樣。
Unity是一個更加側重於通用的引擎,UE4是一個更加偏重於真實感 FPS類的引擎。Unity更多側重的是靈活性,小團隊愛咋整咋整;UE4有一套成熟的方法鏈和工作流,你在它的架子里乾的很爽但是想自己倒騰點東西就比較麻煩。
ps. 我之前寫過一段時間UE4的Plugin,那個C++ Hot Load完全無效...我猜測是因為啟動引擎的時候就handler註冊進去了,最後導致我改一點就要重啟一下Editor。Unity用C#寫Plugin就非常的爽,它那套序列化機制能基本滿足我所有的需求(對我這裡就不吐槽UE4的編譯速度了...畢竟我窮)
就題目所說的『渲染』哪家強,這裡先提一個容易誤解的地方是:一個引擎的效果,一方面是這個引擎能提供的功能,也就是上限;另一方面是對應的美術資源的質量,也就是下限。很多時候容易把美術資源的質量與引擎的效果等價了,這樣就容易淪為比較純畫面比較黨了...
舉個栗子: 以前菊總做了一個3D場景,然後有人問這個效果圖裡的GI這麼牛逼,啥引擎整的?菊總表示我只不過是打了很多的點光源補光而已hhhh
ok回到題目,純粹功能上來說,其實這兩家的覆蓋都差不多,該有的都有。之前我試過把UE4的模型、貼圖、shader和GI搞到Unity里,其實是能復現的七七八八(這裡沒考慮後處理)
所以結論是只要你足夠蛋疼哦不肯下功夫,都可以搞;但是說實話,很多細節處理上我發現Unity是被碾壓了...當然了Unity確實也在飛速追趕,包括但不限於(其實裡面有些東西Unity已經實現了,但是我試了下還是存在一定的差距...)
- linear colorspace
- signed distance shadow
- PBR相關的,譬如物理光照強度、一些BRDF模型等
- post process stack (github上Unity官方放出來那個我看了,但還是推薦看一下UE4有一個叫Next-gen Mobile Rendering的分享)
很多細節累計起來就造成了不少的差距...
ps. 還有一點想吐槽的是,UE4的門檻高一些,而且流程相對固定;而U3D的易上手+靈活導致一些開發者會濫用,然後把鍋甩給引擎。那個,我再舉個栗子就是譬如什麼泰坦什麼隕落什麼6...可以參考挖坑不填的 @Vinjn張靜 的完爆四路泰坦的《仙劍奇俠傳六》技術評測(一)
話說技術上的話,這個是純個人感覺 貌似UE4的老司機還是多一些;U3D最近貌似砸錢招了不少,今年還發了兩篇SIGGRAPH感覺好羨慕 Unity Labs | Articles. 感覺就像一方是自成一系工程經驗賊豐富的老司機;另一方是剛從野路子轉出來然後有點學院派混搭風....
總結:刨除美術資源帶來的影響之外,Unity為了適配靈活損失了不少表現空間,同時在細節上也有很多需要提高的地方
利益相關:Unity開發者 (啊哈哈哈黑了半天還是因為愛之深對不對,不管你信不信反正我信了)
Unity因為更多的時間花在了如何跨平台上,開發者往往會將就低端平台,寫一份在哪裡都用。這樣高端平台發揮不出來。
另一方面是性能。比如我曾經在KlayGE里實現了一個皮膚渲染。 @錢康來 想在Unity里實現一下。發現性能差4倍。原因在於當時Unity沒法那樣自由控制stencil buffer,必須全屏處理。比起我先用stencil buffer把皮膚的區域標出來,再光處理皮膚,性能肯定要低了。
所以其實好好做的話,不見得有太多畫質上的區別,性能可能有區別。
整體開發實力和產品方向就不一樣。
Unreal的開發人員不少是有幾十年工作經驗的人,他們見證了遊戲發展史,開發最初就是以高性能,高畫質為目標,工程能力世界頂尖,學術論文也是發了不少。
Unity是後起之秀,完全是以用戶體驗和易用性為目標設計的,起初並沒有在意性能。
打個比方,Unreal就是航母,需要上百人的專家才能發揮應有的實力。而Unity就是艘小帆船,幾個人就能自由操控。
關於你要的底層分析,可說的實在是太多。就比如Unreal的RHI,這玩意是底層的渲染介面,據說從Unreal3起就一直在用。設計之初就針對多線程渲染優化。而Unity的多線程渲染才出沒多久,現在還寫著Expirenment,需要手動開放。
邏輯層也是,Unreal的藍圖從開始就開發了強有力的編譯器,直接設計了一門現代化"語言",而非僅僅畫幾個Node連幾根線。
Unity用的C#卻是依託第三方的mono,最開始並沒有專門為遊戲優化(劃重點)。說句題外話,capcom的新引擎也是用C#,但他們重寫了一個完全面向遊戲用的GC系統,和其他大量優化。當然不可否認Unity後來推出的IL2CPP非常厲害。但這裡只想說明在對技術和性能的追求上,兩個引擎不可同日而語。PS:並不是在黑Unity,前段時間聽了Unity工程師的一個講座,他直說了想追求性能就別用Unity,Unity最強大的地方在AssetStore。強答一發,有一次和公司的渲染大牛討論問題,他提到一個觀點我非常贊同:
「Unreal的做法是給了你一套他定義的不可改變的規則,例如Skeleton Mesh,又如渲染管線,而Unity的做法是兼容各種平台各種規則的最大公約數,進行比較基本的封裝再給你,再往上就是靠你自己制定規則了——你可以自定義渲染管線,也可以自定義Skinning」。
「但是其實不只是針對於遊戲開發,針對於世界上的很多事情也一樣——如果有了嚴格的規則,那麼能力比較高的人會感到束手束腳,有些定製化的東西很難實現;而如果沒有嚴格的規則,那麼就會強迫很多新手或者那些不懂怎麼制定規則的人去制定規則,也會有很多人不講規則。」
放在這裡也一樣,如果是渲染大神來操刀,那麼相信在他手下兩個引擎的渲染效果不會相差太多;但如果是新手,那麼顯然是有嚴格規則的Unreal更加友好……
強在大多數搞unity的開發者, 關注的點都不在畫面上,大都都拿去開發手遊了,結果肯定是犧牲效果來換性能。
而且有時候同樣的效果 確實是unreal跑的比unity性能更高,比如後處理
其實渲染這兩個字太大了。如果unity你有源代碼,應該還是可以搞些名堂的,而且從最終效果來說大部分unreal的unity也能實現。這兩天看了下inside的gdc演講,他們對unity的渲染應用的就很好。只是unreal一直都有團隊潛心實現各種高端的效果,這個就帶動了從內部完善渲染系統的動力。unreal內部的美術和技術美術團隊應該比unity強大很多。unity其實還在全工具鏈完善的階段,加上前年開始賭VR和AR,內部花在渲染效果上的資源並不是很多。但是從渲染支持的廣度上來講,unity的跨平台和易用性上來說比unreal好很多。簡單比喻就是你在unity里加一個自己的shader整個過程比unreal輕鬆太多了,在各平台上的效果的處理也基本自動完成了。以上只是個人使用後的一些淺見,有不對之處還請大家多多包涵。
最初的定位不一樣,產品肯定不一樣。
不過你可以關注一下unity2017的scriptable render pipeline。當unity效果起來的時候,ue好像真沒什麼玩頭了。補充一下,這種題目容易把人帶歪,至少目前所有的回答都跑題了。底層的原理,肯定就是渲染的演算法不一樣了,目前unity也玩pbr,但是最底層的渲染方式unity肯定是比ue弱,就算都是pbr,應該也只是大致的演算法,具體的細節估計也會有差異,ue研究這麼多年了,肯定在原來的基礎上有些優化。而unity從5以後才開始追效果,還需要時間,ue做出來原生就很好,unity需要各種調,各種插件調,但是誰來調呢?程序?美術?技美?unity對於一般的開發需求比ue快的多,但是到了高效上,就很費勁了。底層原理跟全世界的其他行業都一樣:有多少頂尖的科研人員在研究!
我來上個例子,在3D渲染裡面(離線渲染,用3D軟體的渲染的功能),大概15年前就有IBL,Image Base Lighting,電影里的渲染場景真實,很關鍵的一點就是光源,而IBL就是這一切的基礎。
雖然Unity里說是能用HDR文件來實現IBL,但是差距是很大的。
因為哪怕是同樣是GI,但是UE4里的和Unity里的完全不是一個層次。
過去了10幾年,UE4才比較完美的實現了離線渲染的光影:
這是4.18里的圖,跟離線引擎們不分上下了。
然後回到前面說的IBL,也是上圖看結果。
首先是提供照明的圖片:(截圖來自油管,原視頻鏈接:https://www.youtube.com/watch?v=rzdNkqLDNTg)
然後是UE4.17的效果:
看起來好像也不錯,一般人也不會覺得有什麼問題,挺好的,確實也是,只有一個天空光,還想怎麼樣?
再看看裡面:
基本上是比較黑,沒啥看的。
然後就是4.18的IBL了,先看外面:
有人看了可能會說,這不行啊,半邊亮,半邊黑啊,是不是有問題啊?
繼續,看看裡面:
這就是傍晚夕陽西下時的感覺,沒錯吧,很多人都肯定見過這個時候的光影,就是這麼真實。
雖然是花了10多年時間才在UE4上實現出來,但是這也得有足夠的頂尖科研人員去研究和開發,哪怕直接從論文上照搬照抄,這個時間和精力還是要花費吧。而Unity更多的是強調gameplay,遊戲性,畫面雖然重要,但是還沒必要到喧賓奪主的地步,所以畫面就慢慢來,可以緩下。
========================================
2018.1.1更新
我是一個製作人,只關注整體效果和最終結果,所以像圖形學方面,確實是不怎麼懂,早幾年還關注,後面發現不可能有那個精力。
像離線渲染,我雖然是02年就開始接觸,但是也要到09年才能做出不閃爍的GI場景,離線渲染跟實時渲染差別太大,很多概念也要很多年後才能帶到實時渲染里。
這裡上一個我09年獨立做的片子,客戶因為相信我,並沒有提什麼要求,他們負責人就提了4個字:美國大片,這肯定不可能,只能盡量做就好了。全片的策劃,概念,建模,渲染、合成剪輯都是我獨立完成,前後花了4個月時間,2台電腦,僅僅是渲染就花了差不多2個月時間。
鏈接:
未來廚房v.youku.com產品定位問題,UE做PC和console起家的,底層渲染機制追求效果,工作流水線適合大量資源,多部門合作的產品,技術特點也多往PC用顯卡上靠,很多技術使用起來比較靈活,保證效率的情況下能得到不錯的效果。用UE的團隊怎麼也得3,50人往上,資源GB級。
unity就是手機跨平台開發環境,要兼容多家硬體,以及跨度較大的API版本,基本都是挑能用的技術將就用,不求最好,關鍵是大家都能使,效果都一樣,手機那麼小屏幕給你高精度渲染也沒什麼用啊,而且不說手機GPU跑不跑得動,跑得起來那電和發熱你也耗不起。單人和小團隊上手比較快,使用方便,幾百mb資源了不起了,幾G資源在unity里你切個平台試試,看看得等多久,而且資源屬性配置不搞死你。
這個問題我跟一些朋友討論不過不知道多少次,總是經常遇到類似的問題,覺得Unity能實現的效果,UE一定能實現,UE能實現的,Unity則不一定。
但其實很少有人去反駁這個觀點。
主要原因我覺得是Unity一開始被用於移動遊戲開發導致的先入為主的觀點。渲染性能強弱,沒有直接對比,不能直接下結論。有人提到了Unity2017,但哪怕現在Unity2017的scriptable render pipeline,其實也一直在完善,不能以現階段來舉例。
在以同樣性能要求來對比,效果表現上,Unity下限無限低,上限很高。而UE4則是,下限比較高,上限非常高。在一些技術能力比較厲害的人手裡,Unity其實能作為一個神器去使用。而UE4,亦然。
所以不能以大部分人看見的結果,就說「虛幻4的渲染要比Unity強」,這個跟使用者真的是息息相關的。
至於技術上來說,作為同樣看過UE跟Unity源碼的人,真的不得不承認,UE4碾壓Unity,不管是從技術能力,還是代碼風格,大部分代碼簡直不是一個級別的。
團隊技術選型的時候做過Unity和UE的測試,同樣從substance導出的測試用例,PBR材質,Unity的Roughness表現錯誤,UE表現正確;金屬光澤表現均正確,但是UE更接近substance里的效果;然後Unity不開源,不知道錯在哪,選UE
你先看Epic的老闆,Tim Sweeny,遊戲引擎之父,拿GDC終生成就獎,再看這兩家的CTO,Epic的Kim當初是做黑客帝國的,拿過兩次奧斯卡獎。Unity的Joachim原來是做獨立遊戲的,連AAA的都沒做過.其實這個問題很難從技術細節上一個一個去推,否則的話,Unity 按照知乎的list改一遍就好了.理念,經驗,方向不是短時間內可以改變的。不要妄圖在肯德基里吃到大董烤鴨
我感覺效果還是可以的。。。布料用的1886的InverseGGX,皮膚是SSSSS,普通PBR是自帶的Standard。陰影是實時陰影加Enlighten RealTime Gi。用的Unity的PostProcessStack。。
逃離塔克夫
作為一個開放源碼的ue4,需要擔心哪裡不強?
unreal engine的源碼開放是最大的優勢,深度定製可以最大程度適配你的項目。而渲染管線的優勢嘛就仁者見仁智者見智了!
完全負責人的告訴你,底層一模一樣,都是基於各個平台的圖形介面。並且現在顯示差距也不大,兩個引擎用的物理光照系統都是一個公司的。你感覺虛幻好,是因為虛幻在編輯器中就套用上了批處理、實時烘培等unity需要操作來製作的效果。還有若干鏡頭特效。如果是菜鳥。因為虛幻擁有完整一套製作方案。包括藍圖、材質節點等方便門外漢使用的工具。並且是漢化的。但當你寫個幾年,兩個引擎就沒有區別了。
正是因Unity的存在才給了很多技術大牛機會,Unreal只是給了很多美術大牛機會!
覺得是unity那套entity component system 導致的低效,不如面向對象來得直接。
推薦閱讀:
※軟體渲染有沒有辦法提高紋理採樣速度?
※在遊戲引擎中常用的光照模型有哪些?
※3D 渲染中使用 Accumulation Buffer 實現景深(Depth of Field)效果?
※如何評價國產3D動畫《墓王之王》?