1. 程式人生 > 其它 >Unity HDRP專案實踐 —— HDRP光照系統(一)

Unity HDRP專案實踐 —— HDRP光照系統(一)

準備開始做遊戲場景了,發現HDRP用得非常不順利,乾脆照著《高清3D虛擬世界》這本書先操練一番

 

今天的任務是——用HDRP搭建一個場景

首先是製作一個陽光明媚的中午時分的場景,咱就照著書上幹!

先簡單看一下我們場景上有哪些物體,可以看到和光照相關的Lights&Probes(燈光和探針)Volumes都被禁用

這就是我們的場景。疑惑?為什麼光照都被禁用了,我們場景還有這麼強烈的反光效果

這是因為在Edit->Project Settings->HDRP Default Settings中我們關聯使用了預設的Volume

 

接下來進行我們的打光

1、啟用Volume

僅通過勾選Visual Environment和HDRI Sky,來製作我們的Volume,他們的作用如下:

  • 在Visual Environment元件中選擇天空的型別,這裡選擇HDRI Sky作為天空的型別
  • 因為在VisualEnvironment選擇了HDRI作為天空的型別,所以需要為當前Volume新增一個HDRI Sky來關聯具體的HDRI Cubemap作為天空。我們使用光照強度單位為Lux,通過Desired Lux Value來設定光照強度

HDRP文件給出的自然光照強度參考值

照明度 自然光照等級
120000 非常明亮的陽光
110000 明亮的陽光
20000 中午的藍天
1000~2000 陰天中午的天空
<1 月光明亮,無雲的天空
0.002 沒有月光,包含天空輝光和星光的夜晚

 

**實現效果

 

2、啟用平行光

簡單介紹幾個重要的引數

Color Temperature(顏色溫度):勾選此選項,HDRP會使用Filter和Temperature兩個引數來計算光源顏色。色溫越高,越偏向於藍色,反之越偏向於黃色。色溫大於5000,通常稱為冷色調,反之稱為暖色調

Intensity(光照強度):這裡的數值為120000 Lux。參考值參上表

Indirect Multiplier(間接光照):設定為1用於模擬真實世界的光照,設定為0,那麼這盞燈就不會在場景中產生間接光照資訊

Volumetrics(體積霧):此引數用於模擬光源發射的光線通過體積霧散射的現象。當我們在Volume中啟用Fog選項,就可以看到平行光穿過霧發生散射的效果了

Shadows(陰影):勾選Enable選項讓當前光源可以投射陰影

 

**實現效果

 

3、啟用自動曝光控制

Volume中的Exposure用於進行曝光度的控制

通過Limit MinLimit Max可以將畫面的整體曝光控制在一定範圍內,防止在畫面切換時通過自動曝光計算生成的曝光值過低或過高

 

**實現效果

 

4、啟用點光源

Window->Rendering->Light Explorer開啟光源瀏覽視窗,可以幫我們快速瀏覽場景中的燈光

 

點光源設定如下

 

白天場景點光源效果非常不明顯。因為這裡我們採用了明亮的戶外陽光作為主光源

在夜晚場景我們的燈光效果就會比較好

 

5、啟用反射探針

當我們點選調整按鈕,我們就可以在Scene視窗中檢視他們包含的區域

(scene切換為了WireFrame模式)我們可以看到每個反射探針他們包含的區域,這些區域就是用於生成反射貼圖Cubemap的區域

這裡我們的反射探針Type被設定為了Baked。烘焙之前我們需要確保參與烘焙的物體被標記為Static

 

unity給我們弓提供了兩種烘焙方式

第一種Reflection Probe元件中進行烘焙

另一種是通過windows->Rendering->Lighting Setting視窗進行烘焙

 

烘焙完成之後就能明顯看到我們的反射了

 

6、啟用光照探針

當我們點選調整按鈕時 就可以顯示場景中的所有光照探針

(Wireframe模式顯示場景中的所有光照探針)

光照探針組的作用?用烘焙的方式將場景中的間接光照資訊烘焙到這些黃色圓球所代表的的光照探針上。當遊戲執行時,動態物品雖然無法進行光照烘焙計算,但是可以取樣這些光照探針上的間接光照資訊,為自己提供更加逼真的表面光照效果

 

7、進行光照烘焙

Unity的光照烘焙技術,經過好幾次記得技術更新和迭代,自2019.3開始Enlighten正式退出歷史舞臺,取而代之的是Unity自己研發的光照貼圖烘焙技術“漸進式光照貼圖”(Progressive Lightmapper)

 

接下來講講具體的烘焙操作

首先,確保所有的靜態物體被標記為static

此外只要確保勾選Contribute GI(貢獻全域性光照)和Reflection Probe Static(反射光照靜態)選項即可。

 

然後開啟我們的lighting Setting面板

 

簡單介紹一下這些引數:

(1)Environment(HDRP):在這裡可以指定所用的環境光的Volume,並指定相關聯的Sky作為環境光的來源。此處使用的Volume必須包含一個Sky相關的Override

(2)Mixed Lighting:想要獲取全域性光照,必須勾選Baked Global Illumination選項,然後選擇一種光照模式:Baked Indirect或Shadowmask

(Shadow和Baked Indirect的區別就是,Shadowmask會再Lightmap(光照貼圖)中把陰影烘焙進去,獲得更逼真的陰影效果)

(3)Lightmapping Settings

  • DIrect Samples、Indirect Samples和Environment Samples用於設定取樣值。取樣值越大,光照貼圖細節越多
  • Filtering下可以選擇一種Denoiser(降噪演算法)。一般Nvidia顯示卡用Optix,AMD用Redeon Pro,OpenImageDenoise用於所有平臺
  • Lightmap Resolution:用於控制光照貼圖的解析度
  • ...

 

烘焙完成之後,會在資料展示區顯示烘焙所得的光照貼圖數量以及大小,也會顯示總的烘焙時長和顯示卡資訊等

 

之後會發現我們的場景明顯變暗了,是因為間接光照資訊已經被烘焙進了光照貼圖中

 

8、增強間接光照強度

在Volume中啟用Indirect Lighting Controller(間接光控制器)

  • Indirect Diffuse Intensity(間接光漫反射強度):HDRP會將由烘焙獲得的光照貼圖和光照探針上的資料乘以這個值
  • Indirect Specular Intensity(間接光高光強度):HDRP會將任何型別的反射探針上的資料乘以這個值

 

9、處理陰影和環境光遮蔽

我們陰影的產生主要來自於平行光的shadow設定

可以看到我們平行光投射的陰影比較“硬”,我們可以通過修改Angular Diameter這個引數來進行處理

 

在Hierarchy視窗中選擇Scene Settings Volume,啟用Shadows屬性

Max Distance:控制點光源和聚光燈投射陰影的最遠距離。控制平行光陰影的最遠顯示距離

Working Unit(工作單位):Metric表示用米作為單位,Percent表示用百分比作為單位

Cascade Count(陰影級聯):用於將陰影投射距離分級。3個Split表示第一級為0-25,第二級為25-75,第三極為75-150,第四級為150-500。Border表示過渡

 

接著為陰影新增更多細節,我們可以在平行光的Contact Shadow(接觸陰影)將質量改為High

注意:我們需要在HDRP配置檔案中提前設定Contact Shadows質量等級

Project Settings->Quality->HDRP 中提前對Contact Shadows的不同質量進行設定

 

在Volume元件中啟用Contact Shadows

Contact Shadows只會在當前場景的“主光源”上起作用。通常主光源就是平行光或者是投射範圍最大的光源

 

啟用Micro Shadows計算微陰影

微陰影可以為粗糙的牆面新增更多微笑的陰影,提升了真實感

 

 

最後新增環境光遮罩

Intensity(強度):用於控制環境光遮罩的顯示效果。數值越大,效果越強,其影響區域會變得更黑

Direct Lighting Strength(直接光照強度):用於控制接受直接光照的區域的環境光遮罩強度

 

10、新增霧效

 

11、新增後處理Volume元件

後處理和之前light、shadow同屬於Volume,但是將後處理相關的Override單獨放到一起更易於管理和維護

這裡使用了以下6個和後處理相關的Override

 

(1)Tonemapping(色調對映)

(2)Color Adjustment(顏色調整)

(3)Bloom(泛光)

(4)Chromatic Abberation(色差)

(5)Vignette(暈映)

(6)White Balance(白平衡)

**最終效果

 

Extra:將明亮的白天場景改為夜晚場景

1、修改Directional Light設定

夜間場景模擬的是明亮月光,需要對色溫和強度進行修改

 

2、修改HDRI Sky

將天空盒換成帶月亮的HDRI高動態圖

 

3、修改曝光設定

 

4、Fog(霧效)設定

 

5、Contact Shadows(接觸陰影)設定

 

6、調整後處理中的 Color Adjustments(顏色調整)設定

調整顏色飽和度

 

7、調整後處理中的WhiteBalance(白平衡)設定

 

注意:有時候會出現點光源不亮的情況

1、可以清除先前的光照貼圖後重新烘焙,可能是因為先前烘焙的亮度太高導致的

2、可以重新設定一下profile檔案,不知道什麼情況

 

**最終效果呈現