各位聚聚好。鑒於專欄一直以來都是程序向的分享文章,為了更方便像我一樣菜雞能夠在Unity裡面做出高質量畫面渲染,於是乎就有了今天這個專欄第一個美術渲染向分享。廢話不多說,畢竟無圖無jb。先上圖。

PS.這裡模型和貼圖均來自EV的第37套模型庫。Maya裡面處理好模型和2UV即可導入Unity環境下,材質均使用自帶的Standard。因為是分享UnityLighting自然用ArchViz來展示是最適合不過的了。同時也可以測試一下Unity的全局光照精度的極限。這裡主要分享的是Unity的Enlighten全局光照,如果你不清楚這個東西可以怒戳下面的鏈接:

Unity預計算實時GI(六)UV展開與減少光照圖數量 - 綜合技術 - Unity官方中文論壇 - Unity3d.com?

forum.china.unity3d.com

Unity一直以來被詬病的基本都是畫面差,市面上大部分Unity產品或者遊戲看著也確實沒有Unreal和Frosbite系列的遊戲那麼有次世代的感覺。考慮到全世界都是一種類型大同小異的PBR,排除渲染方程導致的差異,那麼效果不夠好的主要原因或許就是因為沒有一個比較真實的全局光照(Gi)系統和沒有比較全面的後期處理(PostProcess)系統。但實際上是Frosbite和Unity基本都是一套Enlighten的全局光照系統。那麼Unity到底能不能做真實的渲染效果呢?先打個問號。當場景素材擺放好後大概是下面的樣子。

可以看到畫面效果非常"真實"。之後第一步則是製作一個光照環境,自古好看來自日出日落。所以在這兒也選擇了一個日落的時間點。這裡提醒一下,我見過的美術大部分都不喜歡用HDRI去做環境光而是去在窗戶上放聚光燈陣列或者面光源去模擬,這樣的話會失去環境顏色的DirectionLight,所以這裡我的搭配則是DirectionLight和EnvironmentLight。既然日落自然也需要一個日落的HDRI。將這些設置好後就可以設置光照烘焙內容了。

因為這裡已經開著Gi了而AO是模擬Gi用的。所以一般都是二選一,如果共存會產生奇怪的臟點效果。

太陽光這裡使用了ShadowMaks,因為考慮到室內可能會有動態物體比如角色在裡面走的話,然後也是為了能夠產生太陽的高光點,如果使用Bake的話烘焙完後場景就等於沒有這個燈光了,那麼太陽的高光也會隨之消失。ShadowAngle則是為了產生自然的軟陰影效果。

隨即進行Bake。完成之後則會得到如下圖。可以看到Enlighten還是能產生比較好的全局光照(Gi)效果的,並沒有傳說中的那麼水。

然後我們看到雖然有了挺不錯的全局光照(Gi)效果但是畫面卻感覺很一片死寂,裡面的金屬也都是黑色的。主要原因是Enlighten只能Bake出Diffuse的全局光照(Gi)而不能產生Speculer的全局光照(Gi)。好在Unity和其他引擎一樣也提供了其他的解決方案就是反射探測器(ReflectionPrbes)(吐槽一下,這個反射探測器居然只能做Box的視差矯正而且還不能旋轉。不過新的HDRP裡面測試到時可以旋轉了,同事也有了Sphere的視差矯正),然後我們在場景中放上反射探測器 (ReflectionPrbes)。因為這個室內剛好是比較規則的正方形分佈。所以只需要用Box的探測器去覆蓋到場景即可。

然後將反射球裡面的參數調整好隨機點擊Bake。即可產生反射用的Cubemap數據。因為場景目前沒有什麼動態需要所以更新模式用Bake即可。如果你使用的是實時光照環境且光照可互動。那切換到Dynamic模式或許是個不錯的選擇。隨機效果如下。

可以看到場景的金屬不在黑了而是看起來像那麼回事了。場景也沒之前那麼死寂的效果。

但是感覺好像還是有什麼不對勁?沒錯Unity的內置渲染管線默認是不帶後期處理(PostProcess)的,這也是為什麼Unreal轉Unity的大部分會感覺Unity效果很水的主要原因吧。好在官方也很努力跟進出了PostProcessStack。這裡使用GitHub最新的UnityPostProcessStackV2,不知道的可以去下面鏈接下載。

Unity-Technologies/PostProcessing?

github.com
圖標

大家可以根據自己的畫面喜好去調整參數。這裡給出我的參數。感覺效果還行。。。。。。。。

最後即可得到如開頭的圖片那樣的光照場景。

可以看到瞬間畫面就DuangDuang了,但是還有一種很不對勁的感覺。那是因為場景裡面反射不正確。實時渲染裡面的反射主流的除了IBR另外就是SSR了。

可以看到在加入了之前說過的StochasticSSR之後畫面瞬間就好了不少。特別是地板和陽臺的金屬框。下面放上SSR的地址。

MaxwellGengYF/Unity-Screen-Space-Reflection?

github.com
圖標

進行到這兒可以看到還是很難區分是Unity還是Unreal的。也側面反映了Unity的Enlighten還是能夠做到不錯的全局光照(Gi)效果的。而後說一下Unity新出的ProgressiveLightmap。

經過上面的分享和測試可以看到Enlighten是可以得到3A級的Gi效果的。那為什麼Unity還要出一個ProgrssiveLightmap呢。再經過上面場景製作之前的多次光照測試得到的總結就是,Enlighten雖然可以產生很棒的全局光照效果但是精細程度並不夠。舉個栗子如圖。

可以看到椅子的腿下面產生了很自然的環境光陰影。而桌子腿因為太細導致這個很漂亮的陰影直接消失。

為瞭解決這個問題。我測試了Enlighten的極限。在IndirectResolution為10和LightingProfile裏的Resolution為5的情況下可以產生一些這種極致的細節陰影。但是Bake時間會蹭大道原來的幾十倍。因此測試了一下ProgrsssiveLightmap(設置都一樣只需要在Lighting界面吧Enlighten換成Progrssive重新Bake即可)。

Enlighten的可以看到椅子腿基本沒陰影了。

Progrssive的可以看到椅子腿有明顯的接觸陰影效果。

或許因為速度和精度考慮,Unity官方纔出了Progrssive來替代Enlighten做高質量的LightingBake。但是就目前測試來看Progrssive的速度也是很堪憂。。上圖在i9上Bake了近乎7小時,而Enlighten則只用了30分鐘不到。鑒於2018.3也推出了GPUProgrssive的預覽版官方吹的是速度快10X。具體不詳。各位聚聚有興趣可以試試。放上一些製作這個分享之前的測試圖。

ProgrssiveLightmap。

Enlighten。注意看左邊書桌上的陰影細節。

實時的Enlighten環境光測試

實時的Enlighten直射光測試

實時的Enlighten自發光測試

視頻封面

一段鬼畜的Enlighten測試。。

總結 : 就目前階段Unity裏Enlighten還是速度和質量的平衡者,效果也是能大幅度接近Unreal的並沒有傳說中的。Progrssive雖然精度高但是速度是真的太慢了,而GPU版本還處於預覽版。可見未來很長一段時間還是得開Enlighten。


推薦閱讀:
相關文章