Code Liquid 為何採用 HDRP

等等…好久不見!你們去哪了?

呀吼 —— 不看還好,一看才發現我們已經九個月沒有新的文章了。雖然這段時間開發日誌都沒有更新,不過我們確實是有進展的!這段時間我們都做了什麼呢?

2018/10 – Code Liquid 計畫開始
2018/11 – Code Liquid 從 Built-In Render 改為 HDRP
2019/04 – Code Liquid 第一個測試版本完成
2019/05 – @yamiodymel 當兵,企劃暫停
2019/08 – @yamiodymel 退伍,企劃繼續

我們在 2019 年初開始,花了近四個月的時間從完全不熟悉 Unity 到做出了可以玩的測試版本。裡面有簡易的角色自訂編輯器、一個 H 過場動畫、一張開放地圖、人物操作系統。但很可惜遇到主程式 Yami Odymel 需要當兵入伍,企劃只好先暫停一陣子。

2019/04 Code Liquid 第一個測試版本開發畫面 (有興趣可以到我們的 Discord 看看喔)

認識 SRP、LWRP、HDRP、URP

近期有在關注 Unity 消息的人可能會被一堆 RPRP 的名字搞混,但其實事情沒有這麼複雜。Unity 2018 開始導入了一種叫 SRP (Scriptable Render Pipeline) 的功能,故名思義就是可以透過 C# 腳本控制「畫面如何渲染」,SRP 可以讓開發者有很多對畫面控制的自由,例如可以刪減不必要的功能來達成效能增加,或是增加原先沒有的功能來達到更好的畫面。

而 Unity 為了推廣 SRP 自己率先推出了兩種 SRP 的 Preset (範例),也就是

  • LWRP (Lightweight Render Pipeline) 輕量化渲染管道
    • 現名 URP (Universal Render Pipeline)
  • HDRP (High Definition Render Pipeline) 高畫質渲染管道

而這兩個 RP 為整個 Unity 生態帶來了不小的改變,LWRP 主要目標是給手機、一體機 VR 等效能較低的設備而生,刪除了一些原先內建渲染的功能,讓任何風格的遊戲不管是 2D、3D 或是 VR 在所有裝置都能流暢運行。而從 Unity 2019.3 開始 LWRP 重新命名為 URP (Universal Render Pipeline),未來將會漸漸汰除原先的 Built-In Render 改為預設 URP。

而 HDRP 主要目標是給新世代家用遊戲機、高階電腦、Real-Time CG 動畫製作,採用了 PBR、Ray-Tracing 等功能,犧牲了一些效能,但提供了更多畫面設計上的彈性。

2019/04 Code Liquid 第一個測試版本開發畫面

為何採用 HDRP ?

至於說到為何 Code Liquid 要採用 HDRP,底下是我自己的兩點理由:

– 畫面好看

– 適合我的工作流程

我們先從第一點開始好了!說到畫面就…真的很好看,這裡放張 Built-In Render 和 HDRP 的對比圖(幾乎同樣的光源和設定值下的比對)

當然不是說 Built-In 無法做出好看的畫面,而是我本身對 Unity 不熟,雖然我有兩間遊戲公司的工作經驗,也用 Unity 做過一些東西,但幾乎沒有程式底子的我要用 Build-In 做出好看的畫面實在是非常非常困難。

我自己的工作是動態影像設計 (Motion Design),平常和 3D 軟體打交道,大多用的是 After Effects、Cinema 4D、Octane Render 這類 Offline Rendering 的軟體,在這類的軟體由於不需考慮效能問題,我可以很靈活的控制畫面該如何呈現,塞滿各種 4K 解析度的材質貼圖、幾百萬面的模型、好幾十顆燈光等等。

我平常用 3D 軟體做的作品 J!VA – the deviant one.

但做遊戲是另外一回事,有太多需要考慮的東西,對沒有程式底子也不會寫 Shader 的我,起初我一直以為我沒有辦法做出我心目中理想畫面的遊戲。

而就在這時我遇到了 HDRP。

HDRP 有很多以往很難在遊戲內做到的效果,例如 表面散射 (Subsurface Scattering) 、體積光霧 (Volumetric)、玻璃折射、物理攝影機等等的功能,可以讓我比較容易的調出和 3D 軟體內能做到差不多的效果。例如底下的表面散射示範,開啟後可以讓衣服、頭髮、皮膚之類的材質有些微透光的效果,讓整體畫面更自然。

HDRP 表面散射 (Subsurface Scattering) 範例
HDRP 的玻璃折射

HDRP 實作遇到的困難

那說了這麼多,其實我現在還不建議大家使用 HDRP 作為正式的專案製作,他距離 Production-Ready 還有一段非常非常大的距離。

由於 HDRP 是 Preview 測試版,砍掉重練是時常會發生的事情,例如底下圖片的範例是我們剛開始使用 HDRP 時,使用不同 HDRP 版本就算開同一個專案、用一樣的數值也會產生完全不同的畫面,每次更新都必須耗費大量的時間和精力重新調整所有的材質、燈光參數。

2018/11 Code Liquid 早期開發畫面

最初 Unity 2019.1 正式版時的 HDRP 其實到處都是問題和 Bug,動不動就破圖甚至比 2018 的版本更不穩定,我猜測是為了支援 DXR (Ray-Tracing) 和 VR 而做大規模的砍掉重練,所以最初我是沒有打算更新專案的。

直到 Yami Odymel 退伍後才再給最新的 Unity 2019.3 一次機會,發現大部分的問題都已經修正,也多了很多很棒的功能才決定升級。

Unity 2018 (HDRP 4.10) 與 Unity 2019 (HDRP 7.0) 的 Volumetrics 對比

Code Liquid 的未來規劃

時間很快來到了 2019 年八月底,在企劃暫停這四個月內環境變了很多,Unity 2019 從 Alpha 進入了穩定版、HDRP 從 4.0 更新到了 7.0 並支援 VR、Ray-Tracing(DXR) 之類的功能,在經過一番評估後我們決定將專案搬移到 Unity 2019.3 + HDRP 7.0。

當然不管是升級 Unity 或是升級 HDRP 都會有一點陣痛期,有很多相容性需要測試,甚至很多東西需要重做,但我們的團隊成員又重新聚集了,未來將會持續更新 Code Liquid!

如果大家對我們的開發進度有興趣的話歡迎加入 Discord 和開發團隊聊聊天!我們有 Unity Collab Bot 和 GitHub Bot 會回報開發狀況,也會不定時舉辦開發實況或問答。

Discord 伺服器連結:https://discord.gg/6mzKmJV

我們下一篇文章見!