如何實現最佳的跨平臺遊戲體驗?Unity成亮解密實時渲染技術!
Unity大中華區技術經理成亮表示,實時渲染技術的跨平臺性能讓遊戲體驗變得更好
Unity大中華區技術經理成亮做了《解秘Unity2018最新實時渲染技術》的主題演講,分享了2018年Unity在實時渲染方面實現的三個重要技術,包括圖形相關的可編程渲染管線、基於渲染管線推出的Shader Graph、PostProcess工具以及ECS、Burstcom等性能相關技術。
成亮表示,Unity具有完整的生態環境,一直致力於解決圖形、網絡以及AR問題,讓越來越多的開發者做出炫酷的遊戲或者動畫。目前,Unity已經開發了大量耳熟能詳的遊戲,還為電影行業、工業、醫療、汽車等領域提供了遠程數據分析、數據追蹤、遠程調試、貨幣化等能力。而這其中,一個關鍵的技術應用就是今年推出的實時渲染相關技術。
Unity實時渲染技術具有強大的跨平臺能力,主要包括圖形相關的可編程渲染管線、基於渲染管線推出的工具、以及ECS、Burstcom等性能相關的技術。
成亮介紹到,隨著遊戲種類越來越多,傳統的渲染管線已經越來越難以滿足遊戲功能的需求。而Unity推出的可編程的渲染管線,不僅可以讓用戶自定義渲染流程,而且具有非常好的擴展性,在保留了經典C++內核的前提下提供了更多的接口。可編程渲染管線提供了兩套開源的模板,用戶可以根據需求來實現定制化的功能:
HD(High-Definition)主要針對高端的PC平臺,這一類管線提供了更加精確的模型和高級材質,在定制渲染管線時對用戶更為透明,對於燈光的配置也有所增強,能夠幫助用戶實現非常華麗的渲染效果;
? Lightweight主要針對移動模塊和XR平臺,讓用戶在兼顧性能的同時可以適配到更多的設備。它采用的Single-Pass Forward Rendering可以支持8盞像素光在一個批次內進行渲染,而且提供了非常便利的材質升級工具。
隨後,成亮還詳細闡述了Unity基於渲染管線所推出的Shader Graph、Progressive Lightmapper和Post-processing v2三個工具:
? Shader Graph是一種節點圖方式,能幫助用戶無需編程即可創作,極大降低了編程門檻;
? 後處理站提供了豐富的效果功能,支持設置不同的區域和靈活可拓展的框架,此外也兼容最新的可渲染管線;
? 漸進烘焙可以方便用戶實時看到烘焙的過程,給用戶的工作流帶來了非常大的便利和效率提升。今年還會推出基於GPU的漸進光照功能,效率將提升10倍以上。
在性能方面,成亮最後提到,Unity推出的一套新系統,可以幫助用戶實現性能上的巨大飛躍。這一系統包括三部分:Job System,幫助用戶利用GPU多核處理能力;ECS,讓數據的內存排列更為緊密,提高緩存的命中率;Burst Compiler,技術優化的編譯器。
以下是成亮演講實錄:
大家好!我是來自Unity的成亮。今天非常高興有這個機會來到杭州,跟大家分享Unity在2018最新的實時渲染技術。
今天主要分享的內容有四點,首先我會對Unity做一個基本介紹,後面則會介紹今年Unity在實時渲染方面比較重要的三個技術:一是圖形相關的可編程渲染管線;二是基於渲染管線推出的工具,包括Shader Graph、PostProcess;三是ECS、Burstcom等性能相關的技術。
首先介紹一下Unity。2014年Unity在丹麥哥本哈根成立,它有三個創始人,他們分別提出了三個公司理念:開發民主化、解決困難問題以及幫助開發者成功。民主化這個概念很好理解,就是降低技術的門檻,讓越來越多的開發者能夠做出很炫酷的遊戲或者動畫。相對應來說,就要求Unity公司解決比較困難的圖形、網絡以及AR問題。
Unity具有完整的生態,它有很強的實時渲染引擎,具備強大的跨平臺能力,除此之外還提供了遠程數據分析、數據追蹤、遠程調試、貨幣化等能力。截止到2017年統計數據,有200億應用軟件安裝量,有30億移動設備是用Unity軟件安裝的。在排名前1000名的遊戲中有40%是用的Unity,新的制作遊戲超過了50%,還有60%的VR和AR應用是用Unity來開發的。Unity開發了很多耳熟能詳的遊戲,以及在電影行業、工業、醫療、汽車等等領域,也有不少廠商用到Unity來做實時渲染的工具。
下面開始介紹實時渲染相關的技術。首先看一下圖形方面,今年我們最重點推出的技術是可編程渲染管線,相比之前的管線,可編程渲染管線提供了更多渲染的接口給到開發者,你可以按照自己的需求定義你的開發。當然我們為大家準備好了兩個模板:HD(High-Definition)主要針對高端的PC,這個管線提供了更加精確的模型,提供了非常高級的材質,幫助大家能夠實現非常華麗的渲染效果;Lightweight主要針對於移動模塊,讓大家在兼顧性能的同時適配到更多的設備。
這是目前的渲染管線,它可以定制的功能很少,你可以選擇Forward或者Deferred:Forward中物體接受的光照數量決定其渲染批次,當光照數量很多時就會遇到新的問題;Deferred中是在最後應用一次光照,但是Deferred有對硬件的要求,所以在某些移動平臺是不支持的。 除此之外,還可以編寫一些Command Buffer,也就是在渲染管線的時間點,比如上圖中綠點的地方,你可以插入自己的渲染。
隨著遊戲種類越來越多,傳統的渲染管線越來越難以滿足遊戲的需求。比如我們看到有非常3D的、光照非常多的遊戲,也有2D的卷軸遊戲,這些遊戲用一條管線很難兼顧到這樣的性能;又比如一個2D的遊戲或者一個FPS遊戲渲染的時候有很多權衡的點,2D根本不需要光照,材質也不用是基於物理的材質......等等。
所以Unity在今年推出了可編程的渲染管線,它可以讓用戶自定義渲染流程,比如你的剪裁或者繪制物體,這些流程都可以按照自己需要進行控制。新的渲染管線有非常好的擴展性,針對原來的渲染管線進行了有效的提升,保留了經典的C++內核,提供了更多的接口,幫助大家盡可能化地定制自己的功能。除此之外還提供了兩套模板,大家可以根據需要去定制功能,而且這兩套功能都是開源的,所以也是給了大家一個非常好的參考。
首先看一下Lightweight,它主要針對移動和XR平臺,提供了非常方便的材質升級工具,而且對於一些不需要光照的材質完全兼容,所以升級到這套管線非常方便。它的渲染也和原來有所不同,采用了Single-Pass Forward Rendering,可以支持8盞像素光在一個批次進行渲染。我們之前做了一個Trash Dash實例,它是一個3D遊戲,但實際上沒有利用到光照,所以它利用我們的材質升級工具,就非常容易從原來的管線升級到了現在的管線。
下面看一下High,High功能很多,在這裏就給大家做一個詳細的拆解和介紹。它分成六大塊功能,首先它的渲染管線有一個比較大的改變,渲染管線相對之前采用了新的模型,物理計算會更精確。它在定制渲染管線時對用戶更為透明,用戶只要關註設置的屬性就可以了,而不用關註選擇什麽樣的管線。它主要針對高端的PC平臺,對於燈光的配置有增強,光照和陰影方面可以采用色溫來控制光照的顏色。光線形狀也有很多選擇,還增加了新的區域光。材質比較多,提供了非常多的高級材質,供大家選擇。還有基於分層的材質系統,有變形的特效。調試方面,提供了新的可以觀察調試的窗口。
新的管線不用再去選擇配置,用戶根據自己的需求來設置渲染管線就可以了。一是增強了光照配置,能根據色溫來控制顏色,支持更多的形狀,包括錐形、方形或者金字塔形狀,支持光線顏色的效果;二是新增了區域光類型,支持實時區域光,而且區域光形狀包括了橘型、圓形等形狀;三是提供了新的光照模型GGX,在傳統模式下是單顯色模型,粗糙表現顏色不會飽和,而且會帶有發暗的現象;此外還新增了非常多的材質,包括彩虹色加透明漆材質的效果、雙面透明的效果、分層的模型、體積光和光速效果、No Occlusion Probe效果等等。
除此之外,新的管線還新增了調試窗口,在這個窗口中可以看到豐富的信息,包括材質、光照等等。如下所示,這個圖可以看到正在渲染的物體表面的發線,它不光可以在編輯器上面使用,還可以實時連到PC端上進行查看。
在調試窗口支持只顯示某一種光照,比如只顯示慢反射。還支持中間的渲染目標,比如Depht Buffer顯示,左邊只顯示了Diffuse Lightin。
以上給我們展示的是Unity可編程渲染管線所能夠呈現出的實時渲染的效果。下面我們看一下方便大家創作的工具,Shader Graph、Progressive Lightmapper和Post-processing v2。
Shader Graph是一種節點圖的方式,來幫助大家無需再用編程的方式進行創作。它帶來的好處是不用編碼,可能減少了一些語法或者調試的痛苦,降低了大家編程的門檻。
後處理站有非常多可以選擇的效果,可以設置不同的區域,還支持靈活可拓展的框架,因為這也是一個開源的功能,所以大家可以根據需要去看,一方面提供了自定義的API,大家可以自定義,另外也可以看到整個代碼。另外也兼容最新的可渲染管線。
再看一下漸進光照烘焙,實時渲染場景有很多燈光是先靜態烘焙上取得,尤其是像間接光照,都是烘焙上去的,因為如果實時計算肯定來不及,所以通常在做項目的時候有光照烘焙的功能。而漸進烘焙可以實時看到烘焙的過程,而且可以優先看到視圖窗口顯示的效果,這樣給大家工作流就帶來了非常大的便利和提升。除此之外,今年應該還會推出基於GPU的漸進光照功能,這樣光照烘焙效率就會提升10倍以上。
今年在性能上面Unity推出了一套新的系統,可以幫助大家在性能上面有質的飛躍。最新的系統包括三個部分:一是Job System,幫助你利用GPU多核處理能力;二是ECS,能夠讓我們數據的內存排列更緊密,提高緩存的命中率;三是Burst Compiler,是技術優化的編譯器。
如上所示,這是現在的系統。其中會引用到各種各樣的組件,它就是一個引用列表。這樣一來,這些引用類型沒有辦法控制它在內存中的排布,所以它是分散在內存中的,這樣數據分散的結果是導致緩存命中率比較低。還有一個問題,如果單核的情況,一旦任務比較多,它處理的速度就會越來越慢。
Entity Component System中,我們把數據和函數分開,Render包含了數據,通過對數據進行分類處理,再派發給不同的任務進行處理。如下所示,這就是一個結合的架構圖。
來看一個實際的例子,來看它具體提升了多少性能。如下圖顯示,傳統方式下飛船包含了Movemen組件,在這種情況下,同屏渲染了18500個飛船。但是再加入變形,在飛船裏面就沒有了任何的應用。所有的任務都是通過函數來執行的,所以把它Job system變形化之後,性能大概可以提升到25000個,提升了三分之一的性能。
再看ECS With Job system,數據緊密化加上並行化之後,在ESC With Job system情況下,我們從最開始的18000個變成了96000個,性能提高了5倍。再加上Burst Compiler,數量達到了156000個,比最開始的做法性能提升了接近10倍。
以上就是Unity最新的關於實時渲染的技術進展,希望能夠幫助到開發者能夠實現更炫酷的效果,謝謝大家。
點擊免費試用網易雲易盾安全服務請添加鏈接描述
如何實現最佳的跨平臺遊戲體驗?Unity成亮解密實時渲染技術!