Unity HDRP 教學

Unity HDRP ( High Definition Render Pipeline ) 是從 Unity 2018 版本加入的渲染技術,透過 HDRP 技術帶來畫面升級。支援製作單機遊戲或是即時動畫。 注意 HDRP 不支援 Android 與 iOS 行動裝置遊戲製作。

 

將舊專案升級到 HDRP [ 連結 ]

使用 HDRP 製作虛擬實境遊戲 [ 連結 ]

 

學習資源

UnityJapanOffice [資源商店] (2020.3.7)

INIRROR OFFICE ARCHVIZ [資源商店] (2020.3.7)

ArchVizPRO Photostudio HDRP [資源商店] (2020.1.13)

ArchVizPRO Interior Vol.8 HDRP [資源商店] (2021.1.5)

Book Of The Dead: Environment | HDRP [資源商店] (2022.2.9)

 

NewGen: Sci-Fi Slums [資源商店] (2019.4.32)

 

首先建立 Unity HDRP 專案,開啟 High Definition RP 專案提供的範例場景。

比較 HDRP 與一般專案的差異

攝影機:左圖為一般專案的攝影機、右圖為 HDRP 專案的攝影機。

燈光部份可精準設定色溫 ( Temperature ) 與使用真實世界的照明單位 ( Physical Light units ) ,包括:

Candelas ( cd )

Lumens ( lm )

Luminance ( nit )

Lux ( lx )

EV1000 ( EV )

此場景有多個展示物件,僅保留地面與攝影機並刪除其他物件,將地面物件放大後拖曳到 Prefabs 資料夾轉成預製物件。

 

從外部匯入模型,本教學使用 Best Sports CARS - Pro 3D Models 免費車輛模型。

 

開啟 [ Best Sports CARS - Pro 3D Models > Vehicle > Prefabs ] 資料夾的 SportCar20_Static_EU 預製物件拖曳至場景。

使用標準著色器,將會出現洋紅色,需要升級到 HDRP 材質修正此問題。

 

按下 Upgrade Project Materials to High Definition Materials 按鈕。

 

HDRP 材質的升級需要時間,請耐心等候。

 

刪除場景的 Sky and Fog Volume 與 Post Process Volume 物件,它們用於設定天空與後製效果的數值。

 

自行建立一個 Post Processing Volume 物件用於製作畫面的後製效果。點擊 Add Component 新增 Volume 。

按下 Profile 右邊的 New 按鈕自動建立一個同名的 Volume Profile 或使用滑鼠右鍵 [ Creat > Volume Profile ] 建立。

 

點選 [ Add Override > Visual Environment ] 增加一個控制環境的參數。

 

將 Sky 欄位的 Type 勾選,後方下拉式選單選擇 Procedural Sky 使用程序化天空。

 

若畫面的曝光不足,可增加一個 Exposure 控制曝光的參數,將此參數的兩個選項都打勾,設定 Fixed Exposure 數值

 

白平衡 WhiteBalance

 

接著繼續增加新的參數來調整。

點選 [ Add Override > Sky > Procedural Sky ] 增加一個天空的參數(選擇Sky後可以看到還有三種天空的類型可以選擇,這裡需配合Visual Environment 的天空類型做選擇)

在 Procedural Sky 程序化天空有多個可以設定的參數,這裡就簡單的逐項說明,

首先將前三個項目 Enable Sun Disk、Sun Size、Sun Size Convergence 勾選。

這三個項目是控制場景上的太陽用的,首先第一個Enable Sun Disk是決定太陽是否出現,但是這裡不會影響實際的光照效果,會影響的只有天空上太陽這個物體和它所帶來的反射

有太陽的效果

 

沒有太陽的效果

對比後可發現場景的光亮程度其實是不變的,但是天空與場景其他物件對太陽所產生的反射皆受到明顯的影響。

接著一起說明 Sun Size、Sun Size Convergence 兩個項目,這兩個項目分別控制太陽的大小與太陽光暈的收斂程度

Sun Size = 0.04 (預設值),Sun Size Convergence = 5

 

Sun Size = 0.01,Sun Size Convergence = 5

 

Sun Size = 0.01,Sun Size Convergence = 10

 

Sun Size = 0.01,Sun Size Convergence = 2

 

第4個項目Atmosphere Thickness 用於控制大氣的厚度,也可以搭配太陽的大小作出不同的效果

Sun Size = 0.01,Sun Size Convergence = 2、Thickness = 3

 

Sun Size = 0.1,Sun Size Convergence = 10、Thickness = 5

 

Sky Tint 與 Ground Color 用於控制天空和地面的顏色,需要注意天空的顏色會受到燈光設定的影響。

將 Sky Tint 調整為白色,場景上的天空卻是橘色,是原本燈光的顏色

 

將 Sky Tint 調整成綠色,場景上的天空卻是紫色,是與原本燈光混合後的顏色

 

將 Ground Color 調成與天空一樣的綠色。

 

所以這裡建議,若是場景的燈光帶有顏色的話使用 Ground Color 即可,因為 Sky Tint 也只是影響天空的顏色,影響物件的光照還是必須去調整燈光。

Exposure項目就是曝光度,基本上之前的大項目差不多,只是這裡的同樣是控制天空的,所以強度高的一樣將會曝光過度,但強度低卻只有影響到天空

Exposure = 10

 

Exposure = -5

 

Mulitiplier 項目是乘數,會把其他項目的數值影響加倍。

Exposure = -5、Mulitiplier = 10

 

Exposure = -2、Mulitiplier = 10

 

Exposure = -2、Mulitiplier = 5

 

在Procedural Sky的這些項目中可以任意地去調整搭配出想要的效果。

 

點選 [ Add Override > Post Processing > Vignette ] 增加畫面暗角效果的參數,勾選 Mode 與 Intensity 。

 

這樣可以做出一種畫面聚焦的感覺,需要時可以勾選 Color 並調整適當的顏色。

將Color調成紅色,營造出一種危險的感覺,許多的遊戲會使用紅色的深淺閃爍製作警告或受到攻擊的提示。

 

Intensity 用於設定暗角效果的強度

Intensity = 0.5

 

可以明顯的看出效果,但強烈的暗角效果並不自然,勾選下方的 Smoothness 並調整一下數值。

Intensity = 0.3、Smoothness = 1

 

Center 可以調整聚焦的位置,預設值是X = 0.5、Y = 0.5 此時是聚焦於畫面的中心點位置。

 

 

 

 

點選Add Override -> Lighting -> Ambient Occlusion 增加環境遮罩的參數,將Intensity勾選並調整數值為1.5,將Thickness Modifier勾選並調整數值為5

 

點選Add Override -> Post-processing -> Tonemapping,將Mode勾選並選擇ACES

 

點選 [ Add Override > Fog > Exponential Fog ] 增加霧的參數,注意使用此參數需要回到 Visual Environment 中將 Fog 項目的 Mode 勾選,並選擇Exponential Fog 。

 

完成設定後即可調整 Exponential Fog 裡的參數,比較明顯的幾個項目 Density 是霧的密度、Fog Distance 是與霧的距離、Color Mode可以選擇霧的顏色類型,Sky Color 是跟天空一樣,看起來會比較自然,也可以選擇 Constant 將霧調整成其他的顏色。

Density = 0.5、Fog Distance = 5、 Color Mode = Sky Color

 

Density = 0.5、Fog Distance = 1、 Color Mode = Sky Color

 

Density = 0.5、Fog Distance = 1、 Color Mode = Constant Color,顏色為綠色

 

點選 [ Add Override > Post-processing > Bloom ] 增加光暈的參數,Bloom項目下Intensity是暈開的強度,Scatter是光線的發散程度

Intensity = 0.1,強度不高,沒有明顯的區別

 

Intensity = 0.5,可以明顯感受到畫面的模糊

 

Intensity = 1,畫面變得非常模糊,就像深度近視一樣,無法看清模型的細節。

 

Scatter 項目以目前的場景來說比較難看出差異,所以可以先在場景增加新的光源,來測試實際的效果

Scatter = 0,可以清楚的看見車燈

 

Scatter = 0.3,車燈有散開的感覺,車尾陽光的反射也不那麼刺眼

 

Scatter = 0.6,車燈整個散開,反而有種更明亮的感覺

 

Lens Dirt 項目下,Texture是想要顯示的貼圖、Intensity是顯示的強度,須注意的是,這裡的貼圖因為是模擬鏡頭上的髒汙,所以會受到Bloom 的 Intensity 影響,若該數值是 0,無論 Lens Dirt 的 Intensity 數值如何調整都將不會有效果。

Bloom Intensity = 0.2、、Bloom Scatter = 0.6

 

Bloom Intensity = 0.5 、Bloom Scatter = 0.6

 

Bloom Intensity = 0.2、Bloom Scatter = 1

 

以上是對視覺效果的一些設定,這裡補充一下實際的應用方式。

Volume這個組件本身有一些設定可以使用,之前建立時勾選的Is Global是表示要將Volume內的設定套用到整個場景,但也可以只套用在某個區域就好。

先在場景上建立一個Cube並為它增加Volume組件

 

現在這個Volume還需要一個Profile,所以先選擇PostProcessingVolume物件,並在Volume組件的Profile後點選Clone

 

將複製出來的Profile更改名稱後套用到Cube的Volume上

 

這裡不勾選Is Global,Blend Distance是表示觸發後的效果與距離的關係,要觸發物件上的Volume必須進入該物件的Collider範圍,所以沒有Collider的物件是無法觸發Volume的效果的。

此處以實際圖片來說明會比較清楚,先將場景上的PostProcessing物件停用以區別效果是否啟用。

可以看到在Play模式下,將攝影機移動進入Cube中時,Game視窗已經套用了Volume效果,但場景上卻沒有套用 61

將場景的視角移動進Cube後,場景也套用效果了 62

了解觸發的方式後再回到Blend Distance的數值,當數值是0的時候只要一進入觸發範圍,就會直接有全部的效果,當數值增加時觸發的範圍會跟數值的大小成正比,但是效果會跟距離成反比,距離愈遠效果愈差

Blend Distance = 1、攝影機在觸發區外 63

Blend Distance = 1、攝影機進入觸發區些許 64

Blend Distance = 1、攝影機深入觸發區 65

 

Blend Distance = 1、攝影機在原觸發區邊緣外(畫面中白色破面為Cube頂部) 66

 

 

Blend Distance = 1、攝影機進入園觸發區 67

 

 

Weight項目則是Volume效果的強度,範圍是0到1,也就是觸發後實際上可以看到的效果

Weight = 0.5,可以看到攝影機已經進入觸發範圍內,但還是只有一半的效果 68

Priority項目是優先度,當有數個Volume在作用時,Priority數值大的會優先作用,這裡將Cube的Volume優先度設為1,然後將場景上剛剛停用的PostProcessing啟用

可以看到Cube上的Volume效果出現在Game視窗上,而場景上只有PostProcessing的Volume效果 69

在實際使用上來說,像是夜視鏡、紅外線熱成像儀等等,在物品上掛上特定效果的Volume,都可以用這樣的方式製作。或者是說可以製作類似危險感知之類的效果

危險感知的示意圖,可以在某個危險源物件上掛上數個Volume,當人物(攝影機)距離他很遠的時候就如同正常一般 70

距離接近後,畫面會出現提示 71

更接近後,畫面提示改變 72