2020年6月22日 星期一

Unity 2019.4 LTS功能介紹

Unity 2019.4 重點功能詳解
作者:Kelvin Lo


大家好!2019.4已經發佈了,趁這個機會,我想要跟各位聊聊這一版LTS的新功能以及具體的LTS版本建議用法。

什麼是LTS呢?雖然官方有許多文件都有解釋過什麼是LTS(長期維護版本)了。但為了有些人還是不明白什麼是LTS版本,我還是稍微以我的角度說明一下。

所謂的LTS就是當新年度版本開始時(現在是2020.1),把去年的版本號+.1做結尾並改名LTS的版本(這裡是2019.4 LTS)。這個2019.4 LTS版本特色是會持續維護長達兩年的時間,因此最適合使用這個版本的專案,就是在未來一年準備發佈的產品。


圖1 - LTS圖表

長期維護的意思是如果在2019.2找到了一個Bug,Unity會修復的版本是2019.2本身和2019.4,也有可能只會在2019.4修復,其他版本不會修復。主要這麼做可以讓問題的修復集中在.4管理,提升LTS版本的穩定性,對開發專案也比較友善。

決定要用哪一年的LTS當然就跟專案時程估算很有關聯,如果你的專案預估在2021年1月完成,那發佈時的LTS版本就建議是2019 LTS,因為2020 LTS還沒出來。所以如果專案完成預計在2021年12月,當然目標就是2020 LTS

要注意的是,現在的LTS版本都會落在5, 6月左右發佈,主要原因是Unity每年更新週期有4版,也就是.1 .2 .3 .4LTS,我們預期在下個週期開始,將改為.1 .2 .3LTS週期,未來期望新年度版號在Q1就進版。


圖2 - 新年度LTS計畫


接下來細聊到底2019.4有哪些強化,除了了解有哪些新功能之外,也可以用來評估要不要升級的參考。


圖3 - 2019.4 亮點功能

從這個表可以看出,2019.4 LTS改進的部分還是挺多的,我們一個一個來細看


版本控制(Version Control)體驗改良
大型專案的版本控制至關重要,如果你是用Github,特別是Perforce做版本控制,2019LTS改進許多UIUX體驗,現在Perforce斷線時會自動連回了。

圖4 - Version Control


Asset Import Pipeline V2
資源導入流程以往需要耗費大量時間等待,隨著專案越大越複雜,等待的時間就越長。2019 LTS,導入流程已升級到第2版,它與新的Accelerator(新的本地緩存服務)一起用為更可靠,總之結合起來,這將顯著加快平台切換和導入時間。

圖5 - Asset Import pipeline V2


Nvidia PhysX 升級到4.1
非DOTS的物理運算用PhysX能更精確、更快更可靠。尤其在布料模擬採用了新的NvCloth技術,能夠得到更好的效果。針對DOTS框架的物理也可以研究Havok或Unity的DOTS兼容物理系統。

圖6 - Nvidia PhysX 4.1


IDE支援
程式應該會對此感到開心,2019LTS版的預設整合開發環境更新為Visual Studio 2019了。而且我們將其他家的IDE開發環境,像是Visual Studio, VS Code, JetBrains Rider都移到Package manager方便安裝管理了。

圖7 - IDE支援


增量式GC(Incremental Garbage Collector)
新的增量式GC通過在多個框架上分配工作負載,這代表增量式GC的執行會更頻繁但更快的中斷,進而降低因為處理GC造成性能尖峰,當然就降低了卡頓的機率。

圖8 - Incremental GC


Console窗口改良
Console視窗的資訊現在可以點擊,並轉到發生問題的程式碼位置,這會讓除錯更容易。

圖9 - Editor console


DOTS的準備
雖說2019LTS的DOTS(資料導向堆疊框架仍然是預覽版,但是它已經支援了DOTS的動畫、物理、網絡機制和實時除錯(Live Link)功能,如果你不能升2020但又希望研究DOTS,就從2019LTS開始研究吧。
值得一提的是,DOTS體系內的Burst編譯器倒是從預覽版轉為正式版了,對於Job System能直接給予非常明顯的性能優化效果。

圖10 - DOTS


編輯器程式碼的TypeCache API
以往我們點選Play的時候,其中一個很耗時的C#處理是查找Unity套件或是用戶自定義工具會使用到的C#屬性。 通過API暫存這些類別資訊,將使呼叫播放的速度變快。

圖 - 11 TypeCache


Enter Play Mode option
除了用程式碼優化播放速度,本身Unity每次按Play也都是重新載入場景,如果每天你要按play一百次,相當於浪費了一半的時間在執行重複加載的行為。你可以從Project Settings > Editor 內找到Enter play Mode選項,設定不用每次play都重新加載場景而是使用快取,在大量小型修改的情況開發效率能提升2倍以上。

圖 12 - Enter play mode


Scriptable Build Pipeline(腳本式打包管線)
可以自訂打包流程。SBP相當於把原本C++層的打包流改為C#,並自帶一個預先定義好的Asset Bundle打包流程,能降低打包的時間。對於每天有非常多打包工作的團隊來說,定義自己專案的打包流程甚至是Asset Bundles的增量打包管理都將會方便許多。

圖 13 - Scriptable Build Pipeline


Serialization 改良
新的SerializeReference屬性可以將C#類序列化為引用(references)類別而非值(values),這代表著您可以跟普通的舊C#物件相互引用,進而簡化了程式碼表示和管理複雜的數據結構。例如,List <IAnimal>的內容可以包含dogs(class Dog:IAnimal {})和cats(class Cat:IAnimal {}。標記為要序列化的欄位現在可以表示null值。在以前,序列化帶有null值的欄位會引發該類型的默認構造函數對其進行反序列化。更多信息請到https://docs.unity3d.com/ScriptReference/SerializeReference.html 查看。

圖 14 - SerializeReference


.Net 4.x
.Net 3.5的運行核心已經從LTS移除,任何採用3.5的專案都會自動改為4.x。如果因為任何原因必須使用3.5,可以改用2018 LTS。

圖 15 - .Net 4.x


IL2CPP改良
整體性能提升20%,Script debugging選項開啟時,執行效能更好。

圖16 - IL2CPP


Input System
遊戲操作設計系統整個被重新設計了,新的輸入設計觀念改為先設計主要遊戲操作玩法(比如上下左右移動),然後綁定邏輯到各種不同的平台控制器,比如 PC, XBOX, PS5,移動平台觸控和 VR設備也都考慮在內了,簡單來說就是手柄按鈕設計一次,發佈對應不同平台。

圖 17 - Input System


Profiler改良
除錯窗口現在能看到更多的除錯信息,現在可以在配置設置想要一次看到的除錯數300至2000幀。在打包視窗或BuildPlayer API中為所有Player啟用深度分析支援(Deep profiling),此外,用戶還可以為指定Player動態打開或關閉深度分析。禁用深度分析時,分析數據時就不會有Deep Profiler掛接到Player所引起的額外開銷。

圖 18 - Profiler


AR Foundation
AR Foundation解決了兩個主要問題:不同平台要重複設計專案。AR Foundation就好像Unity一樣針對AR專案提供一次開發,自由發佈的概念。如果某個功能在一個平台上可用,而在另一個平台上不可用,跨平台開發將會變得很麻煩。AR Foundation利用他中繼層的優勢,可以輕易的對每個平台功能做適配,不需要重建專案

圖 19 - AR Foundation


URP/HDRP支援VR
HDRP何時支援VR一直是最常被問的問題,2019 LTS的HDRP已經開始支援VR了

圖 20 - HDRP VR


XR Plug-in Framework
如果你是一個XR設備製造商,那這對你絕對是好消息。以往你必須自行撰寫For Unity的SDK,現在通過了XR Plug-in框架就能輕易整合到Unity裡,連同跨平台都一併解決了。此外,Unity編輯器內也多了XR套件管理(XR Plug-in Managerment”設置,未來啟用不同的XR設備會變得容易許多。

圖 21 - XR Plug-in


Optimized Frame Pacing for Android
這是Unity與Google的Android遊戲和圖形團隊合作開發套件,可以使Android設備的幀分配的差異較小,從而提供一致的幀率和更流暢的遊戲體驗。

圖 22 - Optimized Frame



Scripts-Only Build Patching(Android)
針對Android平台製作自定義增量包的工具,大大降低迭代時間。此工具只支援Android。

圖 23 - Scripts-Only


Android Logcat 整合
整合從Android來的除錯資訊到Unity編輯器,可以直接在Unity內查找問題。

圖 24 - logical


Android App Bundle的APK大小檢查
Android App Bundle是Android在Google Play發佈的工具,它提供了一種更有效的方式來構建並發佈應用。讓你更輕鬆包出較小的包,提高安裝成功率和減少卸載。APK大小檢查可在打包過程完成後立即查看,包含APK的組成和APK的大小。

圖 25 - APK Size


請求式渲染(On-demand rendering)
當你等待其他玩家加入遊戲時,螢幕上通常什麼也沒有發生。通過這個功能就能讓這種情況發生時放慢渲染速度節省幀速率,從而節省了用戶的電量與提升性能。


Mobile notifications
手機推播通知是很多人詢問的一個功能,以往都是通過第三方套件來實現,現在Unity也可以做推播功能了喔。

圖 26 - Mobile notifications


一系列的2D工具轉正式版
- 2D Sprite Shape, 2D Tilemap Editor方便建構2D世界 

圖27

- 2D Animation建構平順的2D骨架動畫 

圖28

- 2D PSD Importer和2D Pixel Perfect提供穩定的像素品質 

圖29

- Lost Crypt 2D展示工程兼容2019LTS 

圖30


Camera 多鏡頭堆疊
現在SRP支援多鏡頭合成一個畫面了。

圖31


Custom Render Passes(自定義渲染通道)
2019 LTS現在可以製作自訂的渲染流器,發送渲染信息到自訂的渲染通道來實現風格化渲染器或是Forward+ / Tile / Clustered渲染。這樣可以基於Unity的渲染注入自定義的渲染,來個畫風突變。

圖 32 - Custom Render Passes


HDRP亮點改進
- Arbitrary Output Variables(AOV) API,支援只導出場景內的材質屬性、光照資料、深度資料。
- 動態分辨率 在硬件的支援下,實現實時改變畫面分辨率並保有良好的遊戲體驗
- Madcat除錯監看模式 用簡單的環境紋理替換對象的材質和照明。此模式對導航和獲得場景感很有用,無需設置場景照明。

圖33 - HDRP亮點


HDRP PostProcessing
現在後期特效已集成在HDRP中,加快工作流程和效能。可以使用一組標準物理設置(焦距,光圈等)來控制諸如景深或曝光等效果。對比度自適應銳化(CAS)放大效果。

圖34 - Post Processing


Scriptable Render Pipeline Batcher(腳本化渲染管線批處理器)
SRP批處理器是一套為SRP所訂製的渲染循環,通過使用相同著色器變體的許多材質來加快場景中的CPU渲染速度。並將圖形繪製到屏幕的過程。
支援平台目前有:Windows DirectX 11,Vulkan,OSX Metal,iOS Metal,OpenGL 4.2及更高版本,Open GL 4.2及更高版本,Windows DirectX12,PlaStation 4,Xbox One DirectX 12,Nintendo Switch

圖 35 - SRP Batcher


HDRP 針對 Shader Graph 的改良
- Render States現在改到Shader Graph裡的Material裡,意味著現在可以在一個材質球上直接指定為不透明(opaque)或透明(transparent)。

圖 36

- 加入了新的Hair Master Node,未來製作毛髮相關的Shader將會更得心應手。

圖37

Shadow Layers
現在Light Layers系統的Shadow Layers選項允許你將陰影與照明分離。在Shadow Map設置中啟用此功能後,遊戲物件即使在看不到光線的情況下也可以投射陰影,反之亦然。您還可以使用Shadow Tint更改陰影顏色。

圖38 Shadow Layers

VFG 和 Shader Graph
現在你可以在Visual Effect Graph裡面集成Shader Graph的著色結果,實現更直觀的效果。

圖39

新的地形工具
- Unity重寫了新的地形工具,大量的新功能包含地形繪製工具、地形紋理繪製 
- 全新的地形製作工作流能在繪製地形時,也實時對光照、物理甚至導航直接產生運算。 

圖41

GPU烘焙光照
烘焙品質更好、支援對環境照明的多重採樣、支援NVIDIA OptiX降噪、整體采樣性能提升。

圖42


環境多重重點採樣(Multiple Importance Sampling)
一種在Cubemap/HDRI中針對重點區域採樣的新方法,採用這種技術可以避免將大量GI射線發射到全區域,而是將它們聚焦在例如亮點的重點區域(例如太陽)。



圖43

Light Probes與場景加載
以往加載場景時Light Probes是無法合併的,2019 LTS開始,加載的場景之間合併Light Probes已經實現。意味著將大型場景拆成許多小場景,動態加載並合併所有探針並重新網格化,就可以實現無縫地圖了。

圖44

快速查找(Quick Search)
現在可以在編輯器內快速查找所有關鍵字物件,這會關聯到物件、資源、設定、選單物件甚至腳本。

圖 45 Quick Search

Presets管理
Preset可以儲存當前物件設置,並在套用在其他物件上,遇到有大量物件設置複製轉移需求的狀況非常好用。

圖 46

快捷鍵管理(Shortcut Manager)
現在可以自定義Unity編輯器內的快捷鍵了。

圖47

Prefab編輯
以前編修Prefab物件必須進入編修模式,現在可以直接在Inspector窗口直接編修Prefab物件了。


UI Builder
UI Builder是一套能在Unity內不用寫程式,通過拖拉製作出UI的工具,他是針對Unity編輯器的工具,並不適用於遊戲UI。

圖49

Package Manager一些改動
現在你可以在Package Manager內加入存在GIT上的套件,通過URL連結來直接安裝到Unity,很適合用來製作公司內部工具套件。 

圖 50

現在也可以通過Package Manager來統一管理你的Asset Store購買的資源,整體體驗改善很多。
 
圖51


調適分析器(Profiler Analyzer)
Profile Analyzer可以匯總並可視化來自一組Unity Profiler的數據,多個不同幀的信息比對,以幫助你從更廣的角度找出性能問題。

圖52


以上就是Unity 2019 LTS 的亮點整理
這麼多的改動,只為了給開發者一個良好的開發工具,並協助你成功

感謝這些年支持Unity的開發者們,希望你們都能開發順利!

著作人