近日在琢磨demo應該選擇怎樣的光照模式,遂做了個試驗:對比在同一場合下,各種模式的情況。故以此文記錄之(版本為2019.2、平台為standalone、渲染管線為builtin)。
環境光(ambient)嚴格來說並不是一種光照,它只是單純的為所有顯示元素上色罷了。可以理解為2d遊戲便是有個(255, 255, 255)環境光。可於**(window → rendering → lighting settings)**下的environment lighting進行設定。
環境光是無論如何都需要的,一般用於決定畫面的底色。下圖便是用了白色的效果:
看到上圖便能理解我說的「環境光嚴格來說並不是一種光照」,畢竟連影子都沒有,整個畫面顯得很單薄。但事實上在早期、以及現在一些不依賴光影的遊戲是有這種做法的。它們一般會採用類似2d遊戲的做法,在素材層面解決各種顯示效果問題。對於不依賴光影、強調美術的絕對控制的遊戲,使用純環境光是個方案。
順帶一提,在environment lighting設定下的gradient與skybox模式有著不一樣的效果,屬於更高階的環境光實現。
實時光(realtime)顧名思義,就是每時每刻都在進行的光照。在light元件的mode屬性設定為realtime即是。實時光的優缺點很明顯,如下:
缺點 實時光一般就是開箱即用到的光照,效果如下:
可以看得出,各項消耗指標都比純環境光要高,而該場景只有三項光照(平行光1個、聚光燈2個)。故一般遊戲都不會如此奢侈,會採用各種手段來達到相同的效果。
而以上卻還不是效果的極致,還差個全域性光照(global illumination)呢。剛才所見的光照只是「直接的光照」罷了,它只會考慮到照到了誰便處理誰,沒有從全域性的角度去考慮。在開啟全域性光照後,除了直接光照之外,還會產生物件之間相互反射的間接光照。效果如下:
從畫面效果來看變得更為深邃了,牆壁與地板都有了反射後的光漬,而各項指標實際上與區域性並無不同(疑似)。使用它的前提是要在上文的lighting settings下開啟realtime global illumination,並且為靜態物件做好static標記。具體實現細節請自行查閱官方文件,在此不表。
當然,這並不代表全域性光照優於區域性光照,就比如有些遊戲的畫面風格並不喜歡那些全域性光照帶來的光漬。還是要看想要怎樣的美術效果。
烘焙光(baked)可謂實時光的反面:根據光照資訊預先渲染成貼圖,最後蓋到場景上。這個「根據光照資訊預先渲染成貼圖」的過程,是為烘焙。而烘焙的型別、演算法、設定有著多樣化的選擇,直接影響烘焙的時長、效果、貼圖大小與數量。也因烘焙的特性,只適用於靜態物件(標記為static的物件)。優缺點如下:
缺點 烘焙型別主要分三種,效果如下:
subtractive: 全烘焙
shadowmask: 烘焙陰影與間接光
backed indirect: 只烘焙間接光
可以看到效果是乙個比乙個好,但效能卻是乙個比乙個耗。並且可以看出,由於烘焙設定的問題,效果是不如實時光的。而通過設定達到最優的話,烘焙時長則又是個問題了,魚和熊掌不可兼得啊(砸錢便能我全都要)。
對於subtractive,只需把light元件的mode屬性設定為baked即可。對於其餘兩種,實際上是一種實時光+烘焙光的混合方案,則需設定為mixed。由於動態物件不受烘焙光影響的特性,subtractive下的膠囊仔直接跟純環境光時乙個樣了。解決方案有很多種,如採用mixed方案(靜態物件烘焙光、動態物件實時光)、light probes等。
順帶一提,關於shadowmask,在陰影設定中可調為distance shadowmask。如此將取決於陰影距離的設定,在陰影距離內的陰影,將採用實時陰影,距離之外的則是烘焙陰影。也算是一種提公升品質的方式吧。
烘焙光在業界的應用相當廣泛,其中subtractive式烘焙在早期遊戲與現代手遊可謂家常便飯,妥善使用light probes也能達到不俗的效果。
以上只是本人粗略的實驗與記錄,實際上光照的內容浩如煙海,遠非本篇所能涵蓋。在光照方面本人也只能算是初學者,有所不對還請海涵,並歡迎指教。
Unity光照概述
一 光源引數 屬性面板的屬性含義 type 四種光源型別之一 1.平行光 最為簡單的光照,我們認為受平行光影響的物體接收到的光線方向是一致的,unity中平行光源的位置是無所謂的,可以放在任何位置,這並不會影響光源的方向。2.點光源 從乙個點發出的光,影響範圍只有半徑範圍為r的球體內,且光照強度隨著...
Unity全域性光照
由光源照射到物體,經過物體a的反射 包括漫反射和鏡面反射 進入相機的光稱為直接光照 區域性光照 被直接光照照射的地方會形成光亮和陰影,而沒有被照射的地方就會是一片死黑,這和現實世界肯定是有差異的。想象現實生活中的場景,一束光投進窗戶,從而整個房間的陰暗角落也會被照亮。這就是因為在現實世界中,光照射到...
Unity 光照和渲染
unity 文件 using real time lighting with realtime gi 完全理解unity中precompute realtime gi及其優化 一 完全理解unity預計算全域性光照及其優化 二 unity預計算全域性實時gi 九 lightmap parameter...