找回密碼
 注冊帳號

掃一掃,訪問微社區

燈光

2015-1-6 14:31| 發布者: 楊炎| 查看: 1696| 評論: 0|原作者: 蠻牛|來自: unity3d腳本manual

摘要: 燈光燈光 (light)會使您的游戲具有自己的個性和風格。您可以使用燈光來照亮場景和對象,以創建完美的視覺氛圍。僅舉幾個例子,燈光可用于模擬太陽、燃燒的火柴光、手電筒、炮火或爆炸。燈光 (light)檢視器 (inspecto ...

燈光

燈光 (light)會使您的游戲具有自己的個性和風格。您可以使用燈光來照亮場景和對象,以創建完美的視覺氛圍。僅舉幾個例子,燈光可用于模擬太陽、燃燒的火柴光、手電筒、炮火或爆炸。

燈光 (light)檢視器 (inspector)

unity 中有 4 種燈:

方向燈 (directional light)放置于無窮遠處并影響場景中的一切,就像太陽一樣。

點燈 (point light)從一個位置向所有方向發射相同強度的光,就像燈泡一樣。

聚光燈 (spot light)從一個點向一個方向發光,僅照亮一個錐形范圍內的對象,就像汽車的前燈一樣。

區域燈 (area light)(僅適用于光照貼圖烘焙 (lightmap baking))能從各方向照射一個平面的矩形截面的一側。

燈光 (light) 還可以用來投射陰影 (shadows)。陰影 (shadows) 為專業版功能。可根據每種燈來調整陰影屬性

屬性

屬性:

功能:

類型 (type)

當前的光照對象類型:

方向燈 (directional)

放置于無窮遠處的燈。它會影響場景中的一切。

點燈 (point)

從其位置向所有方向發射相同強度的光的燈,影響其范圍 (range)內的所有對象。

聚光燈 (spot)

照射錐形范圍中所有位置的燈,該錐形是由聚光燈角度 (spot angle)范圍 (range)界定的。此燈只影響此區域內的對象。

區域燈 (area)

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

范圍 (range)

從對象中心起的光發射距離。僅適用于點燈 (point)/聚光燈 (spot)

聚光燈角度 (spot angle)

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

顏色 (color)

所發射的光的顏色。

強度 (intensity)

光的亮度。點燈 (point)/聚光燈 (spot)/區域燈 (area)的默認值為 1。方向燈 (directional)的默認值為 0.5。

cookie

此紋理的 alpha 通道用作遮蔽圖,以決定光在不同位置的亮度。如果燈為聚光燈 (spot)方向燈 (directional),則此紋理必須為二維紋理。如果燈為點燈 (point),則該項必須為立方體貼圖 (cubemap)

cookie 大小 (cookie size)

縮放 cookie 的投影。僅適用于方向燈 (directional)

陰影類型 (shadow type)(僅限專業版)

此燈將投射或將投射陰影。軟陰影(移動裝置上不可用)更昂貴。

陰影強度 (strength)

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

分辨率 (resolution)

陰影的細節等級。

偏移 (bias)

將光照空間的像素位置與陰影貼圖的值的比較時使用的偏移量。請參閱下面的陰影貼圖和偏移屬性。

柔化 (softness)

縮放半影區(模糊樣本的偏移量)。僅適用于方向燈 (directional)

柔化淡出 (softness fade)

基于到相機的距的陰影柔化淡出。僅適用于方向燈 (directional)

繪制光暈 (draw halo)

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

光暈 (flare)

可選擇指代為將在光的位置被渲染的光斑。

渲染模式 (render mode)

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

自動 (auto)

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

重要 (important)

燈光總是逐個像素被渲染。請僅將此功能用于非常重要的效果(例如,玩家汽車的前燈)。

不重要 (not important)

燈光總是在更快的頂點/對象光模式下被渲染。

剔除遮蔽圖 (culling mask)

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

寬度 (width)

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

高度 (height)

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

詳細信息

unity 中有 4 種基礎燈光類型::每種類型都可以定制,以滿足您的需要。

您可以創建一個含有 alpha 通道的紋理,并將其分配給燈光的cookie變量。cookie 會被燈光投影。cookie 的 alpha 遮蔽圖調節光量,在表面生成亮點和黑點。這種方法非常適合用于大大增加場景的復雜性和氛圍。

unity 中的所有內置著色器都可與每一類型燈光無縫配合。然而,頂點光照 (vertexlit)色器無法顯示 cookie 或陰影 (shadows)。

在 unity 專業版中,所有燈光都可有選擇地投射立方體貼圖紋理。立方體貼圖 (cubemap) 在所有方向被投射出陰影。

具有一個 cookie 的點燈

聚光燈

聚光燈僅向一個方向發射光,照射一個錐形區域。這種燈的光非常適合用于手電筒、汽車前燈或燈柱。它們的圖形處理器成本是最昂貴的。

聚光燈

聚光燈也可以有 cookie - 錐形光照投射下來的紋理。這很適合用于制作光照穿過窗戶的效果。紋理的邊緣是黑色非常重要,也就是要啟用邊框多層貼圖 (border mipmaps) 選項,而且其循環模式 (wrapping mode) 要設置為拉伸 (clamp)。有關這方面的更多信息,請參閱紋理。

具有一個 cookie 的聚光燈

方向燈

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

方向燈

在方向燈具有 cookie 時,cookie 會被投影到燈的 z 軸的中心位置。cookie 的大小是由coikie 大小 (cookie size)屬性控制的。在檢視器 (inspector)中將 cookie 紋理的循環模式設置為重復 (repeat)

投影云狀 cookie 紋理的方向燈

cookie 是在大型戶外場景中快速添加細節的好方法。你甚至可以在場景中慢慢移動燈,制造出云在動的效果。

請注意,當使用正向渲染時,會對具有 cookie 的方向燈禁用陰影。然而,可以通過使用fullforwardshadows記編寫自定義著色器 (custom shader) 來啟用陰影。有關更多詳細信息,請參閱此頁面。

區域燈

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

燈光被投射在燈光范圍內的所有對象上。矩形的大小是由“寬度”(width) 和“高度”(height) 屬性決定的,且平面的法線(例如燈光投射到的一側)與燈光的正 z 方向相同。燈光從矩形的整個表面發出,因此受其影響的對象的陰影比受點燈或方向性燈影響的對象的陰影更柔和。

由于光照計算需密集使用處理器,所以區域燈在運行時無法使用,且只能烘焙到光照貼圖 (lightmap) 中。

性能注意事項

燈光有兩種渲染方式:頂點光照和像素光照。頂點光照僅計算游戲模型頂點處的光照,且將光照插入到模型的表面上。像素燈光在屏幕的每個像素處被計算,因此更消耗資源。一些較舊的顯卡只支持頂點光照

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

頂點光照模式下點燈的光。

頂點光照模式下聚光燈的光。

頂點光照模式下方向燈的光。

燈光對渲染速度有非常大的影響 - 因此必須在光照質量和游戲速度之間加以權衡。由于像素燈光比頂點燈光耗費的資源要多得多,因此 unity 將只逐個像素渲染最亮的光。可在質量設置中為網絡播放器和單機版編譯目標設置像素燈光的實際數量。

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

哪些燈光實際上被渲染為像素燈光是由具體的對象決定的。

有關更多信息,請參閱優化圖形性能頁面。

創建 cookie

有關創建 cookie 的更多信息,請參閱如何創建聚光燈 cookie 的教程。

陰影貼圖和偏移屬性

陰影是通過使用一種被稱為陰影貼圖 (shadow mapping) 的技術實現的。這種技術與相機使用的用于決定哪些表面被其他表面遮擋的深度貼圖 (depth mapping) 技術相似。場景在燈的位置被相機內部渲染來創建一個深度貼圖 (depth map),該圖儲存燈與其照亮的每個表面間的距離。此類深度貼圖 (depth map) 被稱為陰影貼圖 (shadow map)。當場景被渲染到主視圖相機 (main view camera) 時,該視圖中的每個像素位置被轉換為光照空間,因此其距離可與陰影貼圖 (shadow map) 中的對應像素相比較。如果像素比陰影貼圖中 (shadow map) 的像素遠,那么另一個對象很可能會遮住照向此像素的光,因此它將得不到照明。

陰影制作正確的圓柱

被燈直接照亮的表面有時候會呈現為具有部分陰影。這是因為確實在陰影貼圖 (shadow map) 指定的距離處的像素有時候會被視為在更遠的位置(這是由于對貼圖使用了低分辨率圖像)。導致的結果為,當部分像素應該被照亮時,卻呈現為隨機圖案陰影,造成 "陰影座瘡” (shadow acne)"視覺效果。

在圓柱上以小點的形式出現的陰影座瘡 (shadow acne)

為避免出現陰影座瘡 (shadow acne),可為陰影貼圖 (shadow map) 中的距離添加一個偏移值,繼而確保邊界線上的像素在應該通過比較時一定會通過比較。此偏移值是在燈光啟用陰影時由與該燈光相關的“偏移”(bias) 屬性設置的。然而,不能將偏移值設置得過高,因為投射陰影的對象附近的陰影區域有時候會因此被錯誤地照亮。此效果被稱為“彼得潘”(peter panning)(例如,與對象斷開連接的陰影會使對象看起來好像漂浮在空中一樣,就像彼得潘)。

彼得潘 (peter panning) 效果使對象看起來像是升到了空中。

可能需要稍微調整燈光的偏移值,以確保陰影座瘡 (shadow acne) 和彼得潘 (peter panning) 效果都不會出現。通常,用肉眼比進行計算能更簡單地測量出正確值。

提示

帶 cookie 的聚光燈可以很有效地制作出光線從窗戶射進來的效果。

低強度點燈非常適合用于提供場景深度。

為了獲得最佳性能,請使用頂點光照著色器。這種著色器只進行逐個頂點光照,使低端卡的吞吐量要高得多。

自動 (auto) 燈光可將動態陰影投射到光照貼圖對象 (lightmapped object) 上,而無需添加額外的照明。為達到此目的,在光照貼圖 (lightmap) 被烘焙時必須啟用自動 (auto) 燈光。否則它們會如實時燈光一樣進行渲染。

上一篇:鏡頭光暈(lensflares)下一篇:燈光

相關閱讀

文章點評
相關文章
女校游泳队彩金