UV 重疊結(jié)果
每個光照貼圖都包含許多__圖表__。在運行時,Unity 將這些圖表映射到網(wǎng)格面上,并使用圖表的光照數(shù)據(jù)來計算最終外觀。由于 GPU 采樣的工作原理,如果兩個圖表彼此距離太近,一個圖表中的數(shù)據(jù)就可能滲漏到另一個圖表。這種情況下通常會導(dǎo)致意外的鋸齒、像素化和其他圖形化結(jié)果(這些問題稱為瑕疵)。

為避免光滲,圖表之間必須有足夠的空間。當(dāng) GPU 對光照貼圖進行采樣時,光照系統(tǒng)會從最接近采樣點的四個紋理像素計算最終采樣值(假設(shè)使用雙線性過濾)。這四個紋理像素稱為采樣點的雙線性“鄰域”。如果圖表重疊(也就是說,如果圖表中任何點的鄰域與另一個圖表中任何點的鄰域重疊),表示圖表太靠近。在下圖中,白色像素表示圖表鄰域,紅色像素表示重疊的鄰域。

確定最佳圖表放置位置和間距可能會很困難,因為它取決于多個參數(shù)(例如光照貼圖分辨率、網(wǎng)格 UV 和導(dǎo)入器設(shè)置)?;诖嗽颍琔nity 提供了輕松識別這些問題的能力,如以下部分所述。
識別
有三種方法可識別重疊:
密切關(guān)注 Unity 的控制臺。如果 Unity 檢測到重疊的 UV,它會打印一條警告消息,其中包含受影響游戲?qū)ο蟮牧斜怼?/p>
使用 Scene 視圖中的?UV Overlap?繪制模式(有關(guān)更多信息,請參閱?Scene 視圖中的 GI 可視化)。啟用此模式后,Unity 會以紅色突出顯示圖表中的哪些像素紋理過于靠近其他圖表中的紋理像素。如果您在 Scene 視圖中發(fā)現(xiàn)瑕疵,并希望快速檢查是否由 UV 重疊導(dǎo)致了此問題,則此方法尤其有用。

使用 Lighting 選項卡中的 Object Maps。選擇一個對象,前往 Lighting 選項卡,然后選擇 Object Maps。確保在下拉選單中選擇 Baked UV Overlap。有問題的紋理像素在此視圖中顯示為紅色。

解決方案
UV 重疊沒有唯一的解決方案,因為有很多問題可能導(dǎo)致這種情況。以下是最常見的解決方案:
如果由 Unity 自動創(chuàng)建光照貼圖 UV,則可以增加?Pack Margin。為此,請導(dǎo)航到網(wǎng)格 (Mesh) 導(dǎo)入設(shè)置的?Model 選項卡。確保已啟用?Generate Lightmap UVs__,然后展開?Advanced__ 并使用?Pack Margin?滑動條來增大值。這樣會在圖表之間產(chǎn)生更大間距,從而降低重疊的可能性。但是,這也會增加光照貼圖的總空間要求,因此請嘗試應(yīng)用足夠的間距來避免瑕疵,但不要過量。有關(guān) Unity 自動創(chuàng)建的光照貼圖 UV 的更多信息,請參閱有關(guān)生成光照貼圖 UV?的文檔。
如果由您自己提供光照貼圖 UV,可嘗試使用建模包添加邊距。
提高整個光照貼圖的分辨率。這樣將增加圖表之間的像素數(shù)量,從而降低發(fā)生滲漏的可能性。缺點是光照貼圖可能會變得太大。您可以在?Lightmapper Settings?下的?Lighting?選項卡中執(zhí)行此操作。
提高單個游戲?qū)ο蟮姆直媛省_@種情況下可以僅為具有重疊 UV 的游戲?qū)ο筇岣吖庹召N圖分辨率。這也可能增加光照貼圖的大小,但可能性較小。您可以在?Lightmap Settings?下的 Mesh Renderer 中更改游戲?qū)ο蟮墓庹召N圖分辨率。
