Tip:
Highlight text to annotate it
X
本章介紹光源
就像在真實世界一樣,在Unity裡 我們用光來照亮我們的場景
沒有光源就甚麼都看不到
廣義來說,Unity有動態光源(Dynamic) 和烘焙光源(Baked lighting)兩種類型光源
動態光源是在遊戲裡即時運算的光源 只要增加光源物件到場景即可使用
烘焙光源預先運算好光照並存在貼圖裡
將處理好的光照貼圖 貼在場景上物件可以提升效能
更多關於烘焙和動態光源的內容 請參考官方文件
我們利用燈光元件在場景裡打光
相同於Unity其他元件 燈光元件也是依附在物件上
我們可利用Transform工具 在場景內移動光源
燈光元件有四種不同的類型
點光源(Point)、定向光源(Directional) 投射燈(Spot Light)和區域光源(烘焙限定)
每一種光源在遊戲裡的效果都截然不同
點光源效果就像燈泡
點光源從他的位置投射光源到場景物件上
這種光源平均投射到所有的方向 所以旋轉角度對它沒有影響
定向光源效果像是太陽
根據定向光源的方向與角度 投射到所有場景物件
它在場景的位置是無關緊要的
投射光效果像是手電筒或車頭燈
投射光源根據它們的方向和角度 投射出一個圓錐並照亮裡面的物件
所以光的位置和角度對投射光都有影響
區域光源(Area light)只在烘焙光照貼圖時有作用
區域光源從一個矩平面的一面 投射並反射到四面八方的靜態物件
除了這四種主要光源以外
還有另外兩種可以影響照明的物件 環境光(Ambient light)和發光材質(Emissive material)
環境光控制場景的整體照明
環境光會和動態光源及烘焙光源一起運算
建議把環境光設為黑色,只用場景內 的照明工具比較好全面控制照明
發光材質可從材質的Shader裡選self-illumin 並調整Emission大小來控制
發光材質只會被烘焙貼圖運算
更多資訊請參考官方教學
光源有幾個屬性供我們設置
範圍(Range)讓我們定義光源 從物件的中心可以照多遠
範圍屬性只對點光源和投射燈有作用
如果類別是投射燈 我們也可以設定Spot Angle屬性
投射角度(Spot Angle)影響投射光源錐體的斜度
顏色(Color)控制光源的顏色
場景內表示光源的圖示也會跟著同步改顏色
強度(Intensity)控制光的亮度 這和範圍所影響的不同
當想要對一個場景打光時,組合這些 屬性建立一個有效的光源是必要的
燈光會因為調高強度和範圍而顯得更亮 因為它們是用不同的原理來照亮場景
燈光除了照明功能之外也可以製作一些效果
陰影、閃光、光暈和叫做投影遮罩的東西
投影遮罩(Cookie)的功能 就像是一個虛擬的遮罩或標示
擋在光源前面用來建立陰影圖案
投影遮罩使用有Alpha的貼圖 來產生投射用的陰影圖案
當使用定向光和投射光時 投影遮罩必須是一張2D貼圖
當使用點光源時 投影遮罩必須是一個方塊貼圖(Cube Map)
這是有它的道理
因為定向光和投射光是有方向性的 但點光源是沒有方向性的
當使用定向光源時 可以縮放場景裡投影的遮罩圖案大小
投影遮罩無法應用在區域光源裡
當用烘焙製作光照貼圖時
烘焙只會運算投射光的投影遮罩 點光源和定向光的投影遮罩會被忽略
接下來介紹陰影
當燈光裡的陰影啟用時 有兩種陰影可以選擇
硬式陰影(Hard)和軟式陰影(Soft)
硬式陰影效能比較好
軟式陰影在真實感比較有說服力 但比較耗效能
陰影有幾個屬性供我們設置
強度(Strength)設定陰影的黑暗度
調整這個值符合場景要的感覺
最大強度 1 一般來說是太多了
解析(Resolution)就是陰影品質設定
預設情況下,燈光會使用Use Quality Settings設定 每盞燈光都可以單獨調整這個設定
更多關於品質的設定(Quality Setting) 請參閱相關章節
偏移(Bias)控制陰影的偏移量來最佳化陰影
偏移用來設定物件開始顯示陰影的距離
數值太低會讓作品假假的 但數值太高又會讓物件有懸浮的感覺
當定向光源加上軟式陰影時會多兩個額外設定
柔軟度(Softness)和柔軟淡出(Softness fade)
柔軟度控制陰影的柔邊 柔軟淡出控制陰影柔邊的淡化
更多關於燈光的內容請參閱官方文件
Draw Halo會在燈光周圍繪製光暈 燈光的範圍和強度都會影響光暈呈現
預設光暈設定可以在Rander setting找到
要改變預設光暈設定要先取消Draw Halo 並增加一個Halo元件來取代
閃光很像光暈但是 它是模擬光通過光學玻璃產生的反射光暈
當有鏡頭光暈(Lens Flare)指定到欄位時 光源就會呈現鏡頭光暈
光源設定裡只有強度對閃光有影響
鏡頭光暈的元件可以指定在物件上
那樣的話光源上的Flare設定應該清除 否則鏡頭光暈就會被處裡兩次
相機也必須指定一個 閃光層(Flare Layer)元件才會呈現閃光
接下來是著色模式
有兩個不同的動態光源著色方法
頂點照明(Vertex lighting) 和像素照明(Per pixel lighting)
頂點照明通常是最快的 它會算出多少光要投射在物件的網格點上
然後把光投射到網格表面
像素照明會計算螢幕上每個像素 因此較耗效能
雖然像素照明比較慢 但它可以做到一些頂點照明無法達到的效果
法線貼圖、投影遮罩和即時陰影 只能用像素照明呈現
投射形狀處理和鏡面高光處理 在像素照明表現也比較好
燈光對於著色速度有很大的影響
像素照明的燈光數量 可以從Quality Settings裡面來設定
當PlayerSetting裡的Rendering path指定Forward時
Render mode這個參數可以明確的指定
燈光是要用頂點照明還是像素照明來處理
重要(Important)會強制使用像素照明
不重要(Not Important)會強制使用快速的頂點照明
或球諧函數運算
更多關於著色模式和著色路徑的內容 請參閱官方文件說明