Unity3D灯光与渲染学习之(二):全局、烘焙以及混合光照
生活随笔
收集整理的這篇文章主要介紹了
Unity3D灯光与渲染学习之(二):全局、烘焙以及混合光照
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本篇博客主要對實時、烘焙和混合光照進行介紹。傳送門:Unity3D燈光與渲染學習之(一):天空盒、燈光以及色彩空間Unity3D燈光與渲染學習之(二):全局、烘焙以及混合光照Unity3D燈光與渲染學習之(三):探針使用、后處理與批處理
作為靜態物體,這么做是可以的,但是如果場景中新增了一個動態物體,就應該要使用混合型燈光了。
接下來考慮在混合光照下的燈光模式(只有在混合燈光情況下才有效),三種:
先從subtractive說起,在這種模式下的光照對于動態物體只顯示一個燈光陰影效果(下圖左立方體,右邊立方體為靜態,有兩個陰影)。
第二個燈光模式ShaderMask,對于動態和靜態物體能都能顯示完整的陰影效果。
,并且在Edit>Projection Setting>Quality之中,將Shadow Mask設置為Distance Shadowmask即可使物體受其他物體的陰影影響。效果如下。
當然可以用更高級的辦法,動態物體在與靜態物體陰影區域發生碰撞的時候,可以通過代碼動態修改Shadow Mask,實現調整。通過簡單的代碼實現 void OnTriggerEnter(Collider other){if(QualitySettings.shadowmaskMode == ShadowmaskMode.Shadowmask){ QualitySettings.shadowmaskMode = ShadowmaskMode.DistanceShadowmask;}else{ QualitySettings.shadowmaskMode = ShadowmaskMode.Shadowmask;} }第三種Baked Indirect,只烘焙間接光,其余情況均為RealTime,是最高級的模式,但當場景中距離大于Quality界面中的Shadow Distance時,所有陰影都不予顯示。
4.全局和烘焙關照
全局光照,簡稱GI,是一個用來模擬光的互動和反彈等復雜行為的算法,要精確的仿真全局光照非常有挑戰性,付出的代價也高,正因為如此,現代游戲會先一定程度的預先處理這些計算,而非游戲執行時實時運算。沒有照明(左)、只有直接光源(中)、 有間接光源的全局光照(右)以烘焙光照為例,物體在經過光照之后,還會對其它物體產生光照影響。當烘焙全局光照打開后(下圖左),暗的部分也會因為別的物體的反射而變亮。將場景中的物體設置為靜態(勾選Static),將燈光模式改為烘培(Baked)即可看到效果(下右圖)。?改變模式為Baked,當烘焙完成后,燈光就可以刪除了,已經將光照貼圖賦給了游戲物體,燈光的作用已經消失了。作為靜態物體,這么做是可以的,但是如果場景中新增了一個動態物體,就應該要使用混合型燈光了。
5.混合光照模式(Mixed Lighting)
Unity里每盞燈光默認的烘焙模式都是”Realtime”,這代表這些燈光仍然會照亮你的場景,Unity的realtime GI系統會處理間接光。但如果默認的烘焙模式是”Baked”,那么這些燈光將會透過Unity的烘焙GI系統處理直接光源和間接光源,產生出來的光照貼圖一旦貼到場景上在執行期間是不能改變的。選擇烘焙模式為”Mixed”的話,場景內的靜態對象會被烘焙GI拿去做計算,然而,不像”Baked”模式,混合模式的燈光仍會繼續運算即時光源到非靜態對象上,這對于你想把靜態環境烘成光照貼圖,但同時又希望同樣一盞燈能為會動的角色計算陰影很有幫助。接下來考慮在混合光照下的燈光模式(只有在混合燈光情況下才有效),三種:
先從subtractive說起,在這種模式下的光照對于動態物體只顯示一個燈光陰影效果(下圖左立方體,右邊立方體為靜態,有兩個陰影)。
第二個燈光模式ShaderMask,對于動態和靜態物體能都能顯示完整的陰影效果。
,并且在Edit>Projection Setting>Quality之中,將Shadow Mask設置為Distance Shadowmask即可使物體受其他物體的陰影影響。效果如下。
當然可以用更高級的辦法,動態物體在與靜態物體陰影區域發生碰撞的時候,可以通過代碼動態修改Shadow Mask,實現調整。通過簡單的代碼實現 void OnTriggerEnter(Collider other){if(QualitySettings.shadowmaskMode == ShadowmaskMode.Shadowmask){ QualitySettings.shadowmaskMode = ShadowmaskMode.DistanceShadowmask;}else{ QualitySettings.shadowmaskMode = ShadowmaskMode.Shadowmask;} }第三種Baked Indirect,只烘焙間接光,其余情況均為RealTime,是最高級的模式,但當場景中距離大于Quality界面中的Shadow Distance時,所有陰影都不予顯示。
6.烘焙光照的參數詳解
這部分主要介紹Lighting界面中的Lightmapping Setting,即下圖中的參數信息- Lightingmap:分為Enlighten和Progressive兩種,視頻中介紹是差距不大,不過Progressive的烘焙速度會快一些。
- Indirect Resolution:間接光照的精度,間接光即物體之間反射形成的光照。
- Lightmap Resolution:一個單位烘多少個像素點,會影響燈光貼圖的大小。例如默認40時貼圖大小是8M,如果改成20,僅為2M.值越小,烘焙速度越快,但烘焙效果也會越低。
- Lightingmap Padding:最終生成的uv信息圖間距,一般不需要修改,只有在光照貼圖的陰影部分出現問題時才需要進行調整。
- Lightmap Size:光照貼圖的大小,如果改成256,則Global Map中會出現多張光照貼圖。
- Ambient Occlusion:環境光遮蔽,開啟時場景中的邊角處會更貼近實際。
- Find Gather:即物體之間的光線影響。靠近紅色墻壁的白球會顯示出一部分紅色,使場景更加真實,一般在場景制作完畢后勾選。
- Indirect Intensity:間接光強度
- Albedo Boost:控制光線對物體材質的影響,一般要與物體的Material結合使用。
總結
以上是生活随笔為你收集整理的Unity3D灯光与渲染学习之(二):全局、烘焙以及混合光照的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Podfile、Podfile.lock
- 下一篇: Qt5.14.2安装、配置及测试(Win