天天看點

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

Unity燈光與渲染

  • Unity燈光類型
    • 平行光源
    • 點光源
    • Spot Light
    • Area Light
  • 光照模式
    • 實時全局光照模式
    • Baked 模式
    • Mied 模式
      • Subtractive
      • Shadowmask
      • Baked Indirect
  • 燈光探針
  • 反射探針
  • 優化
    • 動态批處理
    • 靜态批處理

Unity燈光類型

平行光源

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

可以了解為太陽光,位置在哪都一樣,可以通過調整角度修改光源的方向。

點光源

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

從一個點像周圍發出光,可以通過Range的值更改範圍,可以用來放在燈泡上。

Spot Light

可以了解為錐形光源,可以用在台燈的環境下。

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

Area Light

範圍光,隻能在Bake模式(後續會講)下用。

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

可以提前将光照效果烘焙好,給物體增加一層貼圖,實際運作時減少性能消耗。

光照模式

實時全局光照模式

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

選中任意光源,模式選為Realtime。

LightSetting編輯面闆也選上。

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

這是最逼真也是最消耗性能的一種模式,但是通常不用。

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

性能消耗太大,基本上運作不起來。

Baked 模式

竟然全局實時渲染模式不能用,那麼我們又想要良好的畫面效果,此時應該怎麼辦呢?

此時就可以用Baked模式,将需要預渲染的物體改為靜态。

然後光源與LightingSetting都設定為Baked即可。

那麼此時問題又來了,如果有動态物體那怎麼辦呢?

此時我們可用mixed模式。

Mied 模式

即,混合模式,既有提前預渲染靜态物體的貼圖,也能對動态物體進行實時光照。

有三種模式

Subtractive

最不消耗性能也是效果最差的模式,場景中隻支援單光源。一般不用。

Shadowmask

可以支援多光源,但是不支援與靜态物體的互動。

例如有一堵牆,人物在牆後身上應該有陰影,但是在此模式下不會有,因為陰影隻是貼圖,如果想需要真實效果,此時就需要用到。

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

projectsetting面闆下Quality中的Shadowmask Mode,将模式改為Distance Shadowmask 。

修改shadow distance參數。

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

這個參數表示觀察到的距離,在這個距離範圍内就會正常的與靜态物體的陰影互動,超出則不渲染。

Baked Indirect

混合模式下表現最好的模式,性能消耗也最高,如果在shadowmask下無法達到想到的效果可以采用這個模式。

燈光探針

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

上面說道,在Distance shadowmask情況下可以實作在靜态物體貼圖下實作陰影,如下圖。

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

這個牆是靜态的,陰影隻是貼圖,但是還是可以産生實際效果。原因就是因為用了燈光探針。

在實際運作場景中檢視。

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

我們發現,任何時刻都會有四個燈光探針渲染着物體,其中有一個是在泰陽光下,其他幾個在陰影下,就形成了目前的效果。

即想實作最好的陰影效果,就應該在陰影交界處添加上燈光探針。

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

這種操作起來較為麻煩,但是性能上來說要比distance shadowmask好。

反射探針

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

正常情況下,物體的材質反射一般是反射skybox,如果希望物體反射周圍的物體,此時就需要用到反射探針。

給需要反射的物體添加上反射探針,然後生成貼圖。

Unity燈光與渲染Unity燈光類型光照模式燈光探針反射探針優化

此時發現物體可以正常反射周圍的物體。

優化

上面講了那麼多内容,說白了都是希望降低性能的消耗,達到優化的效果。

除了以上的優化方法,還有以下幾種:

動态批處理

如果動态物體共用着相同的材質,那麼Unity會自動對這些物體進行批處理。

動态批處理操作是自動完成的,并不需要你進行額外的操作。

批處理動态物體需要在每個頂點上進行一定的開銷,是以動态批處理僅支援小于900頂點的網格物體。

靜态批處理

相對而言,靜态批處理操作允許引擎對任意大小的幾何物體進行批處理操作來降低繪制調用(隻要這些物體不移動,并且擁有相同的材質)。是以,靜态批處理比動态批處理更加有效,你應該盡量使用它,因為它需要更少的CPU開銷。

為了更好地使用靜态批處理,你需要明确指出哪些物體是靜止的,并且在遊戲中永遠不會移動、旋轉和縮放。想完成這一步,你隻需要在檢測器(Inspector)中将Static複選框打勾即可