【Unity】4.6 燈光

分類:Unity、C#、VS2015 網絡

建立日期:2016-04-11 app

1、簡介

燈光(Light,也叫光源)是每個場景的重要組成部分,用於照亮場景和對象,從而讓遊戲具備本身的個性和風格,好比利用燈光可模擬太陽、燃燒的火柴光、手電筒、炮火或爆炸等。 性能

網格模型和材質紋理決定了場景的形狀和質感。燈光則決定了場景環境的明暗、色彩和氛圍。每一個場景中可使用—個以上的燈光,合理地使用燈光能夠創造完美的視覺效果。 3d

在 Unity 專業版中,全部燈光均可以有選擇地投射立方體貼圖紋理。立方體貼圖 (Cubemap) 在全部方向都會被投射出陰影。 orm

2、燈光類型

Unity 5.3.4中有 4 種燈光。建立燈光的方式同建立其餘遊戲對象的方式類似: htm

image

因爲不一樣類型的光源屬性類似,所以這裏將其放在一塊兒來介紹。 對象

一、Type blog

光源類型。 遊戲

(1)Directional ip

方向光源。這種類型的燈光能夠被放置在無窮遠處,能夠影響場景中的一切遊戲對象,相似於天然界中太陽光的照明效果。

方向光源是最不耗費圖形處理器資源的光源類型。

image

方向燈主要用於模擬室外場景中的太陽光與月光。其會影響場景中全部對象的表面。它們的圖形處理器成本最低。方向燈(對支持陰影的平臺而言)投射的陰影在下圖中獲得了深刻地解釋。

image

在方向燈具備 Cookie 時,Cookie 會被投影到燈的 Z 軸的中心位置。Cookie 的大小是由Coikie 大小 (Cookie Size) 屬性控制的。在檢視器 (Inspector) 中將 Cookie 紋理的循環模式設置爲重複 (Repeat)。

下圖是投影雲狀 Cookie 紋理的方向燈:

image

Cookie 是在大型戶外場景中快速添加細節的好方法。你甚至能夠在場景中慢慢移動燈,製造出雲在動的效果。

注意,當使用正向渲染時,會對具備 Cookie 的方向燈禁用陰影。然而,能夠經過使用 fullforwardshadows編寫自定義着色器 (custom shader) 來啓用陰影。

(2)Point

點光源從一個位置向四面八方發出光線,影響其範圍(Range)內的全部對象,相似燈泡的照明效果。點光源的陰影是較耗費圖像處理器資源的光源類型。

image

(3)Spot

聚光燈。這種燈光從一點發出,在一個方向按照—個錐形的範圍照射,該錐形是由聚光燈角度 (Spot Angle) 和範圍 (Range) 界定的。

聚光燈是較耗費圖形處理器資源的光源類型。

image

這種燈隻影響它照射區域內的對象,適用於模擬汽車的前燈、手電筒、舞臺場景中的射燈、……等照明效果。下圖是聚光燈效果:

image

聚光燈也能夠有 Cookie - 錐形光照投射下來的紋理。這很適合用於製做光照穿過窗戶的效果。紋理的邊緣是黑色很是重要,也就是要啓用邊框多層貼圖 (Border Mipmaps) 選項,並且其循環模式 (wrapping mode) 要設置爲拉伸 (Clamp)。

下圖是具備一個 Cookie 的聚光燈:

image

(4)Area

區域光/面光源。該類型的光源沒法應用於實時光照,僅適用於光照貼圖烘焙 (lightmap baking)),這種光能從各方向照射一個平面的矩形截面的一側。

image

區域燈。能從各方向照射一個平面的矩形截面的一側的燈。矩形是由寬度 (Width) 和高度 (Height) 屬性定義的。區域燈僅可於光照貼圖烘焙 (lightmap baking) 期間使用,且在運行時對對象沒有影響。

區域燈從一個平面的矩形截面的一側投射燈光。

燈光被投射在燈光範圍內的全部對象上。矩形的大小是由「寬度」(Width) 和「高度」(Height) 屬性決定的,且平面的法線(例如燈光投射到的一側)與燈光的正 Z 方向相同。燈光從矩形的整個表面發出,所以受其影響的對象的陰影比受點燈或方向性燈影響的對象的陰影更柔和。

因爲光照計算需密集使用處理器,因此區域燈在運行時沒法使用,且只能烘焙到光照貼圖 (lightmap) 中。

二、Range

範圍。用於控制光線從光源對象的中心發射的距離。該屬性僅適用於點光源(Point Light)或者聚光燈(Spot Light)。

三、Spot Angle

聚光燈角度。決定錐形的角度。僅適用於聚光燈 (Spot)。

四、Color

顏色。所發射的光的顏色。

五、Intensity

強度。光的亮度。點燈 (Point)/聚光燈 (Spot)/區域燈 (Area) 的默認值爲 1。方向燈 (Directional) 的默認值爲 0.5。

六、Cookie

該項用於爲光源指定擁有alpha通道的紋理,使光線在不一樣的地方有不一樣的亮度。若是果光源是聚光燈或方向光,只能指定—個2D紋理。若是光源是一個點光源,該項必須指定—個Cubemap(立方體貼圖)。

您能夠建立一個含有 alpha 通道的紋理,並將其分配給燈光的 Cookie變量。Cookie 會被燈光投影。Cookie 的 alpha 遮蔽圖調節光量,在表面生成亮點和黑點。這種方法很是適合用於大大增長場景的複雜性和氛圍。

Unity 中的全部內置着色器均可與每一類型燈光無縫配合。然而,頂點光照 (VertexLit) 着色器沒法顯示 Cookie 或陰影 (Shadows)。

七、Cookie Size

縮放 Cookie 的投影。僅方向燈 (Directional) 纔有此參數。

八、Shadow Type

陰影類型(僅限專業版)。爲光源選擇陰影類型。能夠選擇No Shadows(關閉陰影)、Hard Shadows(硬陰影)以及Soft Shadows(軟陰影)。

注意軟陰影會消耗更多的系統資源。

默認設置下,只有方向光源才能夠開啓陰影。

若是但願開啓點光源或者聚光燈光源的陰影(只有發佈爲Web版或單機版才支持),可經過菜單欄中的【Edit】→【Project Settings】→【P!ayer】選項,而後在檢視器視圖中經過Rendering Path(渲染路徑)進一步設置Deferred Light類型。

Rendering Path的選項有:

(1)VertexLit

頂點光照。這種光照效果最差,不支持陰影。通常用於配置交叉的機器或受限的移動平臺。

(2)Forward

正向着色。能很好地支持光的照射效果,但不支持點光源、聚光燈。

(3)Deferred Lighting

延遲光照(僅Pro版才支持)。支持最佳的光照效果及全部類型光源投射的陰影,但須要必定程度的硬件支持。

九、Strength

陰影強度。陰影的暗度。其值介於 0 和 1 之間。

十、Resolution

分辨率。控制陰影分辨率的質量。有5項可供選擇:使用質量沒置、低質量、中等質量、高質量、更高質量。

十一、Bias

偏移。該項用於設置燈光空間的像素位置與陰影貼圖的值相比較時使用的偏移量。取值範圍是0~0.5。若是該值太小,遊戲對象表面會產生sele-shadow,即物體的表面會有來自於自身陰影的錯誤顯示;若是該值過大,陰影就會較大程度地偏離投影的遊戲對象。

十二、Softness

柔化。控制陰影模糊採樣區的偏移量。僅適用於方向燈 (Directional)。

1三、Softness Fade

柔化淡出。控制陰影與攝像機的距離淡出的程度。僅適用於方向燈 (Directional)。

1四、Draw Halo

繪製光暈。若是勾選此項,光線的球形光暈將被繪製,該光暈的半徑與範圍 (Range) 相等。有關更多詳細信息,另請參閱光暈文檔和渲染設置文檔。

1五、Flare

耀斑/眩光。可選擇指代爲將在光的位置被渲染的光斑。

1六、Render Mode

渲染模式。此種光的重要性。這會影響光照保真度和性能,請參閱下面的性能注意事項。選項包括:

Auto:自動。在運行時根據附近燈光的亮度和當前的質量設置肯定渲染方法。

Important:重要。燈光老是逐個像素被渲染。請僅將此功能用於很是重要的效果(例如,玩家汽車的前燈)。

Not Important:不重要。燈光老是在更快的頂點/對象光模式下被渲染。

1七、Culling Mask

剔除遮蔽圖。用於有選擇地使某些對象組不受燈光影響;請參閱雙光照貼圖。

1八、Lightmapping

光照貼圖。該項用於控制光源對光照貼圖影晌的模式。

RealtimeOnly:僅實時燈光計算,不參與光照貼圖的烘焙計算。

Auto:自動。

Bakedonly:僅做用於光照貼圖的烘焙,不進行實時燈光計算。

1九、Width、Height

寬度 (Width) (僅適用於區域燈)矩形光照區域的寬度。

高度 (Height) (僅適用於區域燈)矩形光照區域的高度。

3、性能注意事項

燈光有兩種渲染方式:頂點光照和像素光照。

頂點光照僅計算遊戲模型頂點處的光照,且將光照插入到模型的表面上。

像素光照在屏幕的每一個像素處被計算,所以更消耗資源。

一些較舊的顯卡只支持頂點光照

儘管像素光照渲染得更慢,但它可以實現一些頂點光照不能實現的效果。法線貼圖 (normal mapping)、燈光Cookie (light Cookie) 和實時陰影(realtime shadow) 都是僅能在像素模式下渲染。在像素模式下,聚光燈的形狀和點燈高光效果也更好。

在頂點燈光模式下渲染時,以上三種燈的光的效果以下。

下圖是頂點光照模式下點光源(Point)的照射效果:

image

下圖是頂點光照模式下聚光燈(Spot)的照射效果:

image

下圖是頂點光照模式下方向燈(Directional)的照射效果:

image

燈光對渲染速度有很是大的影響 - 所以必須在光照質量和遊戲速度之間加以權衡。因爲像素燈光比頂點燈光耗費的資源要多得多,所以Unity僅僅逐像素渲染須要「最亮的光」時的效果。可在質量設置中爲網絡播放器和單機版編譯目標設置像素燈光的實際數量。

您可使用渲染模式 (Render Mode) 屬性來明確地控制光是否應渲染爲頂點或像素燈光。默認狀況下,Unity將基於對象受光影響的程度自動將光分類。哪些燈光實際上被渲染爲像素燈光是由具體的對象決定的。