好久沒寫部落格了,說忙的話也不算太忙隻是搜腸刮肚也沒想到要寫什麼東西好,寫一些無意義的東西還不如不寫。
最近研究了下Lightmap,之前沒研究是因為覺得這東西沒什麼可研究的價值,點一下Generate,把物體整成Static的不就什麼都有了嗎。然後鼓搗了一下,發現不對啊,這UV Overlap怎麼搞不掉,看了下官網發現各個參數都寫得很詳細還是中文的,這裡我就挑幾個我感興趣以及和UV Overlap相關的參數說一下(以下用Progressive CPU做例子)。
首先是Direct Samples、Indirect Samples、Environment Samples三兄弟:

它們分别可控制漸進光照貼圖程式用于直接光照、間接光照、環境光照計算的樣本數,增加此值可以提高光照貼圖的品質,但會延長烘焙時間。預設值分别是32、500、500,這三個值在測試的時候可以調低用來減少烘培時間,相當的友善。當然,場景比較簡單的時候也沒必要去調。
Bounces:
使用此值來指定在追蹤路徑時要執行的間接反彈次數。對于大多數場景,兩次反彈就足夠了。對于某些室内場景,可能需要更多次反彈。環境反射裡也有一個Bounces,不同的是它是設定反射探針評估對象之間來回反彈的次數。
然後是Lightmap Resolution、Lightmap Padding、Lightmap Size:
這三個值将會影響你光照貼圖的張數和大小,其中會影響其中對UV Overlap影響最大的是Lightmap Resolution,官方的定義是:使用此設定來指定用于光照貼圖的每個機關的紋素數。增大此值可提高光照貼圖品質,但也會增加烘焙時間。這裡的機關官方沒用明确的定義,估計也不好定義吧,反正就是值越大,網格在光照貼圖裡占的面積最大,預設值是40。
我的場景如下:
當Lightmap Resolution=40、Lightmap Padding=2、Lightmap Size=512下,隻有一張光照圖,三個物體公用一張光照圖,還空出了一半:
當Lightmap Resolution=100、Lightmap Padding=2、Lightmap Size=512下,三個物體各用一張烘培圖:
Lightmap Padding是用來設定來指定烘焙光照貼圖中不同形狀之間的間距(以紋素為機關)。預設值為 2。指的是兩個Mesh間的間距。
Lightmap Padding=2:
Lightmap Padding=10:
UV Overlap隻發生在Mesh的内部,是以Lightmap Padding并不會對它産生影響。
Lightmap Size就是光照圖的尺寸,但是好像場景比較小的時候Unity會自動幫你減小尺寸。
UV Overlap解決方案
首先,最重要的一步,給需要進行烘培的物件在 Import Settings 勾上Generate Lightmap UVs,給物件生成光照貼圖UV。
Hard Angle:
相鄰三角形之間的角度(以度為機關),Unity 根據此角度将其視為硬邊緣并建立接縫。您可以将角度設定為 0 到 180之間的值。預設情況下設定為 88 度。 如果将此角度設定為 180 度,Unity 會認為所有邊緣都是平滑的,這适用于生物模型。預設值(88 度)适用于機械模型。
Pack Margin:
在假設網格占據整個 1024x1024 光照貼圖的前提下,相鄰圖表之間的邊距(以像素為機關)。您可以将此值設定為 1 到 64 之間的值。較大的值會增加邊距,但也會增加圖表所需的空間量。預設情況下,此值設定為 4。
Angle Error:
UV 角度與源幾何體中角度的最大可能偏差(百分比形式,範圍從 0 到 100)。預設情況下,此值設定為 8%。 此屬性控制 UV
空間中三角形與原始幾何體中三角形的差異程度。通常,為避免在應用光照貼圖時出現瑕疵,此數值應該相當低。
Area Error:
UV 面積與源幾何體中面積的最大可能偏差(百分比形式,範圍從 0 到 100)。預設情況下,此值設定為 15%。 此屬性控制 Unity
保留相對三角形面積的程度。增大此值可以建立更少的圖表。但是,增大該值可能會改變三角形的分辨率,是以請確定産生的失真不會降低光照貼圖的品質。
我把官網關于這幾個參數的描述都抄過來了,友善日後查詢。在這裡我們隻需要了解Pack Margin就好了。
先用預設值烘培一下看看,這時的Lightmap Padding=20:
不出所料,再看看UV Overlap視窗:
Mesh Render的Lightmapping這裡有兩個參數也很重要,分别是Scale In Lightmap、Stitch Seams,Stitch Seams是接縫縫合,一般都是勾選的,而Scale In Lightmap指的是這個網格在光照貼圖中所占的大小,這個也是解決UV Overlap的重要參數之一。
那麼攏共影響UV Overlap問題的參數就三個:Lightmap Padding、Pack Margin、Scale In Lightmap,我把Scale In Lightmap調成2,Overlap小了許多:
再把Pack Margin由10調成30,解決了Overlap:
然後是前後的Lightmap對比,前:
後(這兩張圖都是256x256,雖然我的Lightmap Size設定的是512x512):
最後來看看樹人,同樣的參數Scale In Lightmap=2、Pack Margin=30,解決了Overlap,但是貼圖尺寸變成了512x512。
最後的渲染效果,打了一個沒有陰影的實時方向光來計算高光:
沒有實時光:
其實也蠻簡單的,一開始我以為會有很多東西可以寫,但越寫越感覺單薄,隻是之前沒有認真去看吧。