1. 程式人生 > >Unity5場景應該如何烘焙?

Unity5場景應該如何烘焙?

LightMap烘焙技巧

前言:弱弱的說我是一個程式猿。科普名詞解釋:全域性照明(GI):是指除了直接光之外包括天空,物件之間間接光照的總和。環境閉塞(AO):是指間接光在物件間相互遮擋反射不充分導致的微弱陰影。通常在直接光照的暗部才會比較明顯。天光:從頭頂來的天空顏色造成的間接照明,特別是在晴朗的天氣。LightMap:光照貼圖HDR:顏色高動態區間,指顏色亮度可以超過1,移動平臺暫且不支援間接照明(間接反射):指光源照亮A物體,A物體變亮以後充當間接光源對近距離內B物體有照亮的作用。這種現象只有當物體B在直接光照(比如陽光)的陰影裡才會明顯。

足夠多的明暗對比

  • 適當打平燈光以增加陰影面積(暗部更多更容易做效果)
  • 適當增大模型增加陰影面積(暗部更多更容易做效果)
  • 通過只投射不接收來增加假陰影(作假)(不接受投影是因為看不見所以可以節省這種物體的渲染和它佔用的litmap面積)

模擬全域性光照

  • 足夠充分暗部照明(暗部會有一種明快的感覺,用美術語言說就是暗部很“通透”)
  • 天光的使用:
    • 理論上越晴朗的天氣陰影暗部越偏藍(同理也是為了有全域性照明的效果,用美術語言說就是暗部很“通透”)(哪天北京晴空萬里的時候去大樓的陰影裡看看是不是有藍色,為了對比飽和度的覆蓋問題,可以拿一張白紙)
  • 間接反射誇張
    • 比如守望先鋒花村的櫻花樹下會有很強烈的藍紫色,實際上是模擬粉紅的櫻花與天光藍色的疊加造成的視覺,不過暴雪的美術有更加誇張的表達。(實現方法實際是在暗部增加與區域環境顏色相似的點光,實時GI現在效率跟不上,另外也不可能這麼強。)
    • 小幅誇張
  • 更誇張的做法:現實世界中不會有這麼強烈的間接反射,就像葉子把光間接反射出來了一樣,守望先鋒就是例子
  • 其實以上技巧都是借鑑自守望先鋒
    • 這是一個人的分析,只要有心去找,仔細去看,去思考,網上有很多文章有可以借鑑的地方(因為實時GI還開銷太大,暴雪真是能通過技巧把能用的東西用到最好)原文連結
  • 祭上守望先鋒的場景,很誇張的暗部間接光照,實際上是通過暗部打烘焙點光來實現的。更多細節請參考我的另外一篇文章

AO的使用

  • AO能更真實的模擬現實世界,能使暗部有更明顯的立體感,用美術的話說就是暗部足夠“實”,“不飄”
    • 基礎知識請參考這篇文章,這裡講了什麼是AO,什麼是間接反射等
    • 暗部的接縫處AO效果最明顯

LightMap面積的優化

  • LightMap面積(精度)說明:(一個格子就是一個畫素點,也就是佔用在lightmap上面的面積)
  • 通過Scale In LightMap這個引數可以單獨調整單個物體的精度
  • 更合理的分配LightMap面積(想要好效果又要節省lightmap面積,就是要研究,並總結經驗,沒有捷徑
    • 只投射不接受的物件Scale In Lightmap填0就行
    • 地面 > 物件,重要物件 > 一般物件, 視覺中心 > 邊遠地區,大物件 > 小物件
  • 全部(或者幾乎全部)在明處或者全部在暗處的可以用最低解析度烘焙(比如當前光線下的這個椅子和不管影子多麼正都是在暗處的這面牆壁,這種情況下,這兩個lightmap精度可以填0.01),需要注意的是必須參加烘焙只是精度可以很低(因為純白或者純黑被壓縮大小是不會損失精度的)
    • 地面以下,地圖的側面,或者根本看不見的東西,烘焙佔用面積請控制到最小(最慘的情況請參考下面說的浪費)
  • 避免完全沒有必要的浪費
    • 像這種完全在別的物體以下,還參加烘焙的完全沒有必要,而且浪費很大
  • 樹葉花草等透貼類似的推薦只投射,不接受,而且接受烘焙陰影效果不見得好,會很“髒”

技巧及問題

  • 發現陰影比較虛,不實
    • 檢查是否間接光照反彈次數過大(可以理解成有過大的衍射效果)
    • 增加被投影物體的大小(比如放大花盆)(很顯然)
    • 增加投影至物體所佔lightmap面積(比如樹葉投影到地面比較虛,則提高地面的精度)
  • 效果不好或者黑點、漏光過多
    • 檢查2u是否開啟
    • 檢查頂點分佈是否有異常,uv分佈是否均勻或過少
    • 如果都沒問題而且這個物件很重要,則增加精度
    • 自定義2u(高階,不推薦使用)
  • 過小物體效果太差
    • 如果確實過小,先看能不能放大,或者說這麼小的東西有沒有存在的必要或者是否可替代(很顯然)
    • 如果確實需要,可以不參加litmap烘焙,而直接去diffuse貼圖上花盆貼圖的底部蹭兩筆黑的
    • 這個花盆之前參加烘焙會有很大的漏光和黑點,其實不需要參加烘焙,而且效果比烘焙更好,還能節省lightmap

壓縮的效果優化

  • 通過我烘焙的經驗,以kasaierxueyuannew場景為例,發現烘焙10-12張1024壓縮到512,比直接烘焙2-3張1024的貼圖來的精度和效果都更好
    • 10張512 = 2.5張1024,而以之前的烘焙策略烘焙3-4張1024效果沒有我這個好
    • 此外通過合理分配lightmap精度,能節省2-3張lightmap,沒有仔細分配之前,保證效果的情況下能烘焙14張左右,現在這版只使用了11張,如果還細摳還能省1張甚至更多
  • 從1024壓縮到512肯定會損失精度,但是通過仔細的分配lightmap精度能使這種損失達到最小
    • 方法一:地面最有用,所以怎麼省都不要吝嗇地面的精度,地面不管接受多少陰影,所佔用的lightmap面積是一樣的,所以多打點陰影(不增加消耗,還可以做效果,何樂而不為)
    • 方法二:純背光純亮光區域可以減少lightmap精度,因為壓縮不影響(就像純黑純白的貼圖壓縮大小沒有損失一樣),而複雜的結構並且能同時受到陽光和陰影的影響,則也不需要節省精度,因為如果本來精度就不高,則壓縮更慘
    • 方法三:壓縮大小比壓縮格式帶來的損失小,如果壓縮格式影響巨大,可以不壓縮格式,而在其他地方想想辦法怎麼省(省的辦法參考上面)。所以推薦烘焙高質量的光照圖來壓大小
    • 方法四(重要):儘量使用大陰影,在不壓縮情況下本來就很小很虛的陰影,被壓縮了只會更慘,優化方法參考以上
    • 方法五:不推薦使用複雜的結構,酌情使用,在壓縮的時候很容易損失過大

個人經驗

  • 暗部補光,感覺上並不是光越多越好,最好燈光顏色來表達周圍環境的間接光照,過多顏色的燈光會讓人覺得沒有重點和亂
  • 點光通過減小光照強度增加照明範圍能得到更好的環境間接光的效果,還能防止有比較突兀的亮斑
  • 個人傾向於用天空材質球來代替全域性環境光來烘焙,如果是晴朗天氣,用預設純藍的天空即可
  • 白模的情況下感覺lightmap很舒服而且很乾淨,而最終效果圖的lightmap效果沒有那麼明朗。所以猜測為diffuse貼圖的飽和度問題,因此推薦使用較低飽和度的顏色,否則lightmap的顏色很容易被蓋掉(不保證正確,希望美術同學嘗試)

跨平臺的問題

  • 因為烘焙Lightmap用的exr,也就是HDR顏色編碼,而現在手機平臺不支援HDR編碼,導致在手機平臺和PC平臺的解碼方式不一樣,所以不能使用過強的光來烘焙光照圖,否則會造成android與pc差異巨大,因此不推薦使用光照強度超過3的燈光來渲染。

演示




作者:徐小廚
連結:https://www.zhihu.com/question/38140464/answer/164860198