Unity HDRP Lighting (上)

簡介

在3D的世界基於物理的渲染依賴三大要素:光照、材質和攝影機。光照和材質的效果依賴於物理的相互作用,它們之間應有明確的解耦,能在各種光照條件下獲得一致的效果。在Unity HDRP裡面光照的部分就佔了很重要的比例,且在Unity 配合GI以及Bake、LightMap等等都會影響到材質所反射出來的即時渲染效果。

Color Space

在Unity裡面有分3D以及HDRP或是LWRP等渲染通道, 選擇一個色彩空間除了要選好渲染路徑之外,一開始選擇一個”色彩空間(Color Space)”也是很重要的事情,色彩空間決定採用哪種演算法來計算照明或材質載入時的顏色混合,這會對遊戲的畫面真實感有很大的影響,但大多數情況下,太超過的色彩空間設定可能會被目標平台的硬體強制限制推薦比較接近真實的色彩空間是Linear

你可以從Player Setting裡面找到”Color Space”來設定(Edit->Project Setting->Player)設定

Linear的優點

Linear的目的是讓場景內的提供給著色器的顏色也會因為光強度增加變亮,如果換成Gamma,亮度馬上會轉為以白色做為參考,可以注意到切換成Gamma時顏色快速的換成以白色為光照強度為基準,就像我們在Photoshop裡面使用曝光度一樣直接將物體整個白亮化,Linear另一個好處是著色器能在沒有Gamma補償的情況下對貼圖進行取樣,這有助於確保顏色品質在經過渲染管道還能保持一致性,能提高色彩和計算的精度,最後螢幕的輸出結果更為真實!

可惜的是Linear顏色空間有些手機平台甚至有些遊戲機不支援,應該說PC或是一些新手機硬體和次世代遊戲機才會支援Linear顏色空間,在這種情況下,就得用Gamma方法替代了。

HDRP 可配置烘焙光照衰減

漸進式光照系統中的可配置光照衰減功能可以在烘焙光照時得到近似物理特性的衰減曲線。在之前的光照系統裡,spot-light和point-light光的強度會大幅受到光的範圍值影響,這樣的效果是不符合物理規則的,因為現實中光的衰減距離或衰減量是由光的強度決定。

此功能允許漸進式光照系統透過與world-space距離相關聯的距離衰減,來讓光的距離與強度之間脫鉤。雖然Unity仍支持原先的衰減功能,但現在也新增了對線性衰減和距離平方衰減的支持,以及在範圍限制位置衰減為0的距離平方衰減。HDRP為了搭配即時光照,在預設狀況下使用平方反比衰減,並且為光的強度啓用物理單位

Unity HDRP Light 共有6種光照模式

Directional Light

Point Light

Spotlight

Area Light

Reflection Probe

・ Light Probe Group

Directional Light

Directional Light 是unity中最常見的一種燈光,其原理與太陽光近似,不受position與scale的影響,Rotation會影響到光線照射的方向。 Directional Light沒有真正的光源座標,新的場景都會附帶一盞Directional Light ,你也可以刪除預設的Directional Light並創建一個新的光源,然後從Sun這個屬性重新指定(Lighting->Scene->Sun)旋轉預設的定向光會導致天空盒也跟著更新,如果光的角度和地面平行就可以做出日落的效果,把光源轉到天空導致變黑就能做出夜晚的效果,從上往下照就會模擬日間的效果如果天空盒有指定為環境光源(Ambient Source),那麼天空盒的顏色就會影響環境裡面的物件。

除了transform元件,所有的Light還有Light元件Light元件 Type:在此項中可以對燈光的種類進行設定,方便快捷,如果建立燈光出錯,可以在這裡進行修改。

*所有的燈光都可進行調整

Baking:有RealtimeBaked(僅對靜態物體烘焙),Mixed(對靜態非靜態物體都進行烘焙)。

Color(顏色):選擇燈光的顏色,包含RGBA四種屬性,後邊的小筆 可以進行取色。

Intensity(強度):光照的強度,數值在0~8之間。

Bounce Intensity(反射光強度):光照射到物體上反射出去的強度,數值在0~8之間。

Use Quality Setting表示在遊戲開始時根據玩家的選擇來設定陰影質量,其他四個依次代表從低解析度到高解析度

Point Light

Point顧名思義,就是從一個點向四周發散光線,和蠟燭的光線類似。點光源其Light元件與Directional Light基本相同,用法也基本相同,不同之處在於,點光源多了一個Range,在圖中可以清楚地看到由線條組成的一個圓,即點光源的範圍。

point光源開啟陰影運算是很耗效能的,因此必須謹慎使用,點光源的陰影為了要給六個不同的世界方向會運算六次,在比較差的硬體開啟此功能會造成較大的效能負擔當在場景中加入點光源時要注意,目前它們不支援陰影的間接反射,這代表由點光源產生的光線,只要在距離內有可能會穿過物件反射到另外一面,這可能會導致牆壁或地板”漏光”,因此放置點光源要格外注意,然而如果是採用Back GI的話,就不會有這類的問題產生。

Spotlight

聚光燈投射一個錐體在他的Z軸前方,這個錐體的寬度由投射角度(Spot Angle)屬性控制著,光線會從源頭到設定的範圍慢慢衰減到0,同時越靠近錐體邊緣也會衰減,把投射角度的值加大會讓錐體寬度加大,同時也讓邊緣淡化的力度變大,這現象學名叫做”半影”聚光燈有許多用途,他們可以用來模擬路燈, 壁燈, 或許多創意用法,例如模擬手電筒,因為投射區域能精確的控制,因此很適合用來模擬打在角色身上的光或是模擬舞台燈光效果等等光線會因為離源頭越遠而遞減,可以注意到光也會因為越靠近錐體邊緣而變弱,我們稱之為半影區,這會因為錐體角度變大而更明顯和點光源一樣,使用預計算GI時,聚光燈不支援間接光陰影,這表示燈光會穿過幾何影響到另外一面,因此放置投射燈要特別注意。

這邊還有比較特別的一點,雖然spotlight很適合當作車頭燈、手電筒等等光照來使用,如果在Cookie的地方餵給他適合的texture就可以產生更多樣的效果,例如今天要做出工地的探照燈圓形樣,就可以給他充滿圓點的texture,這邊使用字體的樣式來示範此效果,如果喜歡蝙蝠俠的朋友也可以利用這項功能探照出蝙蝠俠的字樣。

Cookie:用於為光源設置擁有alpha通道的紋理,光線在不同地方有不同的亮度,如果是Spotlight和DirectionalLight,可以指定一個2D紋理。如果是一個Point light,則必須指定一個 Cubemap

Area Light

區域光照亮表面並在區間產生漫反射與柔和的陰影區域光用在建立柔和的照明效果非常有用,光線在任何方向穿過光的表面時會產生不同方向的折射 – 造成在物件上產生漫反射,常見的用途是拿來當作天花板壁燈或是背光燈為了實現這功能,

在新的版本裡面Area Light 已經不像之前需要Bake才能實現光照,現在只要在light layer上設定主要打光對象就已經是Realtime效果,雖然先前的版本可以降低效能,但這2019 3.0b版本的Area Light 非常適合當作商業攝影打燈用的光照,這邊用的Area light 當作車體上的 key Light 以及修飾各種角度的補光。

小結: 以上的光照系統為最常使用到,且可以立即達到效果的光照功能,因每個需要光照的物件以及場景有所不同,例如室內以及室外上的光照就差異很大,下一篇會講到Light Map上的應用,會讓你在Unity光照上面更加豐富且更趨近於真實。

實用小技巧:大家在打光照的時候常常會用位置以及角度調整,這邊如果先將視窗看到的角度調整到你想要的位置,並使用Align Withe View (GameObject->Align Withe View)設定,就可以快速的照到你想要照的位置,

快速鍵則是:Command + shift + F

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *