揭祕《Sherman》:使用Unity製作影視級光照效果
《Sherman》是由曾榮獲艾美獎的《大白的夢》創作團隊,使用Unity高清晰渲染管線HDRP製作的實時渲染動畫短片。
Unity媒體與娛樂創新團隊的光照主管Jean-Philippe Leroux參與制作了一些優秀影視動畫專案,包括:《ADAM 2》和《ADAM 3》,以及《大白的夢》。
現今影視動畫行業,正在進行著重大變革-實時製作的興起。實時動畫現在不僅僅是一個渲染解決方案,它還革新了整個創作流程。
實時創作引擎最初是用於遊戲開發的工具,隨著畫面質量的提高和技術的不斷成熟,如今實時創作引擎已經能夠作為創作工具,製作影視級的內容。
那麼實時渲染與離線渲染有什麼不同呢?我們是如何把大型渲染農場上數小時的處理過程,轉變為在幾秒內實現的即時反饋和4K畫質結果呢?這裡沒有使用任何魔法,而是許多簡化操作、近似處理、優化過程和小技巧結合起來的結果。
我們製作的實時渲染動畫短片《Sherman》的目標之一:展示HDRP製作高階實時渲染效果的能力。
本文,Jean-Philippe Leroux將重點介紹如何在Unity實現《Sherman》的實時光照解決方案,並提供實用的建議與技巧。不論你是3D動畫專家還是傳統光照藝術家,本文都將提供需要的工具,幫助你在Unity中為實時內容建立豐富而細膩的光照效果。
解析《Sherman》
在下圖的畫面中,光照部分進行了很多處理,我們將詳細講解所有元素是如何結合起來的。在這個鏡頭中,我們可以梳理出幾乎所有Unity光照效果方面的知識,以便你在自己的專案中活學活用。
我們可以把實現該畫面的光照效果分為四類,然後分別介紹如何控制這些光照型別。
掌控環境光照
如下圖所示,展現了間接漫反射光照即全域性光照對畫面的影響。
首先,我們定義場景的環境光照。在《Sherman》中,環境光照並不是簡單地使用一個環境光來模擬光線散射,而是利用了Unity漸進式光照貼圖,將全域性光照的結果烘焙到光照貼圖中,製作出區域性的環境光照。
光照貼圖
我們的專案使用了多場景設定,所有靜態場景元素儲存在episode_set場景遊戲物件。
場景光照元素儲存在Unity的活動場景episode_set_lighting中。這點非常重要,因為活動場景決定生成的光照資料儲存在什麼位置。
瞭解多場景工作流程:
https://docs.unity3d.com/Manual/MultiSceneEditing.html
我們不需要使用001_timeline場景來構建場景光照,因此在製作過程中,我們會解除安裝該場景。如果仔細觀察,我們可以看到名稱為ToHide的部分,其中包含一個攝像機和一個太陽定向光的例項。
一些後期處理效果對光照很重要,例如:色調對映和環境遮蔽,但我們需要攝像機來呈現這些效果。在給場景新增光照時,我們使用一個臨時的攝像機,而在專案完全載入後,應該只會留下一個攝像機。當烘焙完成後,ToHide除錯攝像機和光照會被再次隱藏起來。
對於光照貼圖中的任何物件來說,相應的UV不應該發生重疊,每個表面都需要有特定的UV。大部分情況下,我們可以在匯入時讓Unity自動生成光照貼圖UV。
瞭解更多UV內容:
https://docs.unity3d.com/Manual/LightingGiUvs-GeneratingLightmappingUVs.html
對於複雜的有機物件,最好讓美術使用數字內容創作DCC軟體來製作UV2。如果想要在光照貼圖中不連續的邊緣上,實現更加平滑的結果,拼接縫隙是一個簡單的方法。
下圖為Unity Lighting設定皮膚。
我們來看看Lighting光照標籤頁,瞭解製作《Sherman》場景的光照設定:
- 首先,我們在CPU漸進式光照貼圖中使用了Mixed Lighting Bake Indirect。由於HDRP不支援Realtime Global Illumination(實時全域性光照),因此我們沒有使用該功能。
- 每次釋出新版本的Unity時,GPU Lightmapper都有很大的改進,但在製作《Sherman》時,它仍缺少我們需要的關鍵功能。
- 我不喜歡使用Shadowmask模式,該模式會將陰影和大部分光照烘焙到光照貼圖中,以進行動畫製作。
- 通過使用Bake Indirect,光照計算會非常簡單,但解析度較低,這意味著烘焙時間更短,而且我們可以靈活地矯正每個鏡頭的光照方向。
- Direct Samples設定和所選模式沒有任何關係,因為我們沒有烘焙任何直接光照,因此可以無視該設定。
- 一開始可以將Indirect Sample的數值設定得小一點,例如:250左右,在確定場景設定後,我們可以提高該數值。
- 對於Bounces設定,一般設為2就夠了,但如果是室內場景,我建議設為4。
- 在設定Lightmap Resolution時,可以先設定較小的數值,隨後逐漸增大。在此場景中,我們最後選擇的解析度為10,因此每平方米有100個紋素。
請注意:在光照和物理方面的設定中,我們要把1個Unity單位等價於真實環境中的1米。
在場景中,瞭解和利用網格的Scale In Lightmap引數非常重要。如果小型物件的三角面太小,無法覆蓋多個光照貼圖紋素,我們可以提高Scale In Lightmap值,對於遠處的較大物件,我們可以減小該值。我們可以啟用Baked Lightmap檢視和Show Lightmap Resolution選項,輕鬆預覽光照貼圖的解析度。
並非所有物件都適合新增光照貼圖。我們不應該為光照貼圖示記多個表面的複雜物件,或是對全域性光照影響不大的小型物件,例如:草、樹葉、小石子或碎片,否則渲染光照貼圖耗費的效能開銷會很大。為此,我們可以禁用Lightmap Static。
部分大型靜態物件也不適合使用光照貼圖,例如:短片中的籬笆,但我們仍希望它們能夠影響光照解決方案。
為了讓物件對光照產生影響的同時,不必為其製作光照貼圖,我們在此使用了一個技巧:把該物件的Scale In Lightmap值設為0。例如:在籬笆的邊緣部分,我們可以清楚看到籬笆對光線的遮蔽效果,即使籬笆沒有製作光照貼圖。
下圖中展示了場景檢視設定,以及籬笆區域光照貼圖的近距離效果。
在其它部分使用光照探針
在設定好環境光照和光照貼圖後,光照探針組將照亮剩餘的小型動態物件。在《Sherman》中,我們建立了一組間距為1米的光照探針組。
通過巧妙使用光照探針代理體積,草坪等大型物件會從更為精細的探針光照中受益。通過這種方法,物件會被區域性探針取樣照亮,而不是被單個探針照亮。
下圖中為在大型物件上使用光照探針代理體積的效果。我們可以看見,被不同探針照亮的草地會被分為大塊的區域。
小提示:在多場景設定中,只有來自最近載入場景的光照探針會在光照中考慮。
環境遮蔽
現在我們已經瞭解如何產生精美的區域性環境光照,那麼要如何才能避免環境光照填補不應該影響的區域光,並讓物件接觸到地面呢?
首先,我們需要使用常用的DCC工具,為部分物件生成環境遮蔽貼圖,例如:狗窩內部和浣熊的嘴巴。
然後,我們使用螢幕空間環境遮蔽(SSAO)後期處理效果來將元素結合在一起。我們會在之後的後期處理部分進行詳細介紹。
規劃反射效果
如下圖所示,左側畫面為使用間接鏡面反射光照的部分,右側畫面為結合環境反射和烘焙反射的效果。
在實時環境中,間接鏡面光照即反射效果是一系列技術結合的成果。這些技術包括:
- 實時平面反射
- 實時反射探針
- 小型烘焙反射探針
- 大型反射探針:較小探針體積的優先順序比較大探針體積更高
- 天空
- 平面反射效果示例
下圖展示了平面反射的效果。
反射效果解析度和快取大小都通過HDRenderPipelineAsset資源來管理。平面反射就跟鏡子一樣,這類反射非常適合平坦表面,但也能夠用於較複雜的情況,例如:影片中浣熊和膨脹的水管表面上的反射。但須小心使用這類效果,因為它們會使用較多記憶體。
實時反射探針也可以用於展示光源上反射和遮蔽部分的重要細節。在影片中,我們使用了一個小的實時球型探針來包住食盆,在上面反射出即將爆炸的水管。
我們需要使用烘焙反射光照探針來覆蓋場景。我們應該利用大小探針的不同優先順序,投射體積的視差矯正和高階混合模式。一個不錯的方法是:將光照捕捉點放在攝像機工作的平均高度上。
如果仔細觀察,我們會發現部分反射探針專門用於陰影區域。這些探針用來消除來自天空的定向光產生的多餘鏡面反射效果。
使用Timeline
對於所有基於動畫的內容而言,Timeline是實用的序列工具和管理中心。在Timeline上,我們可以為大部分物件新增動畫,而在製作每個鏡頭的光照時,我們使用的是Activation Track啟用軌道。
相對於在各個鏡頭調整光照繫結的每個元件,我認為管理特定鏡頭的分組會更加簡單。下圖展示了跟隨攝像機變換的光照分組啟用軌道。
下面是使用Timeline的一些小技巧:
- 如果希望在Timeline上為某個物件新增動畫,物件一定要和Timeline本身在同一個場景。在《Sherman》中,Timeline所在的場景為001_timeline場景。當重新開啟專案或進入執行模式時,指向其它場景的連結都會丟失。
- 禁用Post-playback狀態,否則在進行渲染時,場景會保留播放後的光照繫結。
- 在修改鏡頭編輯內容或時間設定時,可以將動畫軌道轉換為剪輯軌道,方便重新安排動畫。
- 瞭解更多關於啟用軌道的資訊:https://docs.unity3d.com/Manual/TimelineActivationTrackProperties.html
使用預製件
預製件非常適合對需要多次重複使用的物件進行分組,我們可以使用預製件修改分組的組成內容,所有對應例項會自動發生相應變化。
在預製件例項上,我們可以選擇性撤銷任何改動,也可以將例項恢復原始預製件的樣子,即時應用預製件的改動。此外,預製件系統也提供框架,實現無縫派生的工作流程,不僅可以調整例項,也可以快速建立和驗證變體。
從Unity 2018.2版本開始,Unity支援預製件巢狀功能,該功能非常適用於光照繫結的快速迭代。
下圖展示了第一個動畫的光照預製件結構,我們可以從中看到啟用軌道上每個鏡頭的結構。由於只展示當前鏡頭中存在的光照物件,因此其它物件都暫時被隱藏起來。
在場景層級視窗的光照部分中,我們可以看到:
- 場景設定的重寫物件
- 在鏡頭中嚴格用於構成陰影的物件
- 控制大氣效果的密度體積
- 食盆的實時反射探針
- 太陽光、補光與邊緣光等其它預製件
使用預製件系統還有另一個好處:當物件在場景中例項化後,在處理光照時,不必在版本控制工具中反覆檢查場景。這意味著,團隊的其他成員也能夠在場景中進行製作。
需要注意的是:預製件上的部分屬性無法派生變化,需要使用自定義例項來實現變化,相關情況包括:體積配置檔案、後期處理配置檔案和Timeline等可程式設計物件。
新增太陽光
每個鏡頭分組都有一個太陽的例項,我們可以在每個鏡頭進行太陽朝向的微調。如下圖所示,我們還使用了樹木的裁剪貼圖,來製作有趣的陰影效果。
高質量陰影
通過進行正向渲染,HDRP為我們提供了百分比近距離柔和陰影(PCSS),它可以模擬光線照射在物件上產生的半陰影。
在實時環境下,光線沒有使用光線追蹤功能,我們使用陰影貼圖來產生陰影。陰影會耗費一定的效能,而且每個光線都需要啟用陰影。
HDRP的陰影圖集系統讓我們可以使用大量能夠投射陰影的光線。在《Sherman》中,我們儘可能使用了最大的陰影圖集。雖然較大的陰影圖集能夠極大地提升畫質,但由於所含的資訊更多,因此計算時間也更長,
如果陰影圖集的資訊變得飽和,該系統會動態地調整陰影大小。陰影解析度會根據光線來定義。在我們的設定中,精準光源的解析度設為1024,而定向光解析度設為4x2048。注意:為了表示立方體,點光源的解析度設為6x1024,因此它們非常消耗效能。
定向光陰影可以使用級聯陰影貼圖CSM技術來優化。為了獲得最佳質量,我們需要通過使用HD Shadow Settings元件的重寫,來調整每個鏡頭的級聯陰影分佈。
我們也需要在Cinemachine的虛擬攝像機鏡頭設定中,調整近距離剪裁平面。這樣可以向前推動第一個級聯陰影,這步隨著當前鏡頭的時長增加,會顯得越來越重要。
使用體積(Volume)
在HDRP中,許多渲染和後期處理的屬性都使用帶有相關“配置檔案”的體積來控制。在Unity 2019.1中,這兩類屬性被結合到相同的體積元件中,根據類別進行管理。
根據當前攝像機的位置,配置檔案的數值會進行插值調整,如果攝像機不在任何體積中,那麼這些屬性會使用全域性配置檔案。每個體積都有優先順序與權重值,配置檔案的數值不能動態調整,但是優先順序和權重值可以動態調整。
如下圖所示,我們使用優先順序與權重值這兩個屬性來製作浣熊的觸電動畫。
光照圖層
在Unity中,我們可以將物件指定到特定光照圖層上。如下圖所示,我們手動為浣熊的眼睛加入眼神光,讓其看起來更鮮活有趣。
我們還可以使用該功能管理不合適的鏡面高光,這些鏡面高光來自本應用於補光和邊緣光的精準光源。我們通過使用該功能,避免精準光源影響水面效果。
控制直接鏡面光照
HDRP有一個非常有趣的光照功能:可以調整光線的最大柔和度(Max Smoothness),該功能可用於模擬鏡面光源特定大小的色散效果。
我們還能夠將光照設定為影響鏡面光(Affect Specular)或影響漫反射(Affect Diffuse),並在場景內容中測試這些設定的效果。
體積光照
在場景中實現深度感時,大氣效果是我們的重要工具。HDRP高質量體積光在HDRP設定中定義,它提供了穩定可靠的解決方案,我們可以使用體積光照控制器(Volumetric Lighting Controller),來最大化效果的質量。
在《Sherman》中,為了實現最佳區域性效果,我們使用了密度體積,逐個鏡頭進行放置,從而實現對這些外觀的完整控制。
編輯器內顏色分級和攝像機效果
顏色分級效果在任何製片過程中都是必不可少的部分。我們可以使用該效果在Unity實現出色的結果。自從Unity 2019.1開始,後期處理效果已經完全整合到HDRP中。
下圖展示了《Sherman》使用顏色分級(Color Grading)效果的前後對比。
本文,我將以《Sherman》的工作流程為基礎進行介紹,在《Sherman》中,我們使用的是Post-Processing Stack V2。
請注意:Post-Processing Stack V2和Unity 2019.1中HDRP的Post-Processing Stack V3互不相容。雖然有部分功能發生了改變,但基礎概念還是一樣的。
後期處理效果在體積上使用,我們可以在光照場景的主要體積上定義顏色分級、環境遮蔽、膠片顆粒和影視級動態模糊效果。這些設定可能會被部分Timeline上擁有更高優先順序的體積所覆蓋。
我們也可以使用CinemachinePostProcessing擴充套件,為每個針對Cinemachine虛擬攝像機建立的自定義配置檔案,定義所有攝像機相關效果,包括:泛光、景深和暈影。在某些情況下,因為當時Unity 2018.4還沒有預曝光處理功能,所以我們也使用了後期曝光重寫功能。
色調對映
由於整個渲染過程發生在HDR線性空間中,設定顏色輸出非常重要。《Sherman》專案一開始就決定使用ACES(學院色彩編碼系統)輸出,ACES色調對映提供高對比度的影像,帶有非常強烈的暗色調。
為了獲得色彩鮮亮的調色盤,我們需要調整伽馬值。使用這種色調對映風格的大多數遊戲也會進行同樣的調整。
軌跡球
我們的新Trackballs軌跡球工具,非常受人喜愛。對專業人員來說,軌跡球是非常熟悉的工具,它們易於操控。
下圖為顏色分級設定中的Trackballs軌跡球控制皮膚。
顏色分級曲線
雖然每次只能展示一條曲線,但我們可以使用許多顏色分級曲線。我們使用了Hue vs Sat、Sat vs Sat和Lum vs Sat三種曲線。
我們給主攝像機新增了Post Process Debug元件,我們可以在該元件上,啟用波形監視器和顏色直方圖。波形監視器是非常強大的工具,適合分析黑色與白色部分的適宜程度。
環境遮蔽
上文已經提到過環境遮蔽,這裡我們會詳細介紹部分設定。
在《Sherman》中,Intensity光照強度被設為0.75,而在部分鏡頭中,我們會減小該值,以減少大多出現在樹葉部分的噪聲圖案。
我們沒有使用任何不基於物理的渲染(PBR)選項,例如:Color顏色或Direct Lighting Strength直接光照強度。環境遮蔽效果取決於解析度,因此我們需要調整該效果,來適應預期的輸出解析度。
景深效果
景深DOF不只是快速鏡頭的額外效果,它也是在敘事中轉移焦點的重要工具。影像會快速變化,因此我們需要小心處理觀眾的注意力。
Cinemachine有非常實用的跟蹤焦點功能。新版本後期處理工具已經完全重寫,不再取決於解析度。
在Unity 2018中,Visual Effect Graph還沒有透明度渲染佇列功能。因此在《Sherman》包含水面效果的部分鏡頭中,我們必須避免出現較淺的景深效果。
好訊息是,Unity 2019.2的Visual Effect Graph加入了透明度渲染佇列功能。
暈影
暈影會模模擬實鏡頭拍攝時產生的瑕疵,呈現鏡頭畫面邊角部分的光線丟失效果。為了實現逼真的感覺,該效果應該總是偏圓形的。
請注意:暈影是非常強大的效果,但也容易被過度使用,請注意謹慎使用。
泛光
泛光是一種美觀的瑕疵效果,它是由攝像機感測器和骯髒鏡頭漏出的強光產生的。我們可以在Unity模擬該效果,但也要記得合理使用。
結語
動畫的光照很複雜,而且難以掌控。本文,我們針對傳統光照藝術家講解了在實時渲染影片中新增光照的所有知識。希望你能夠喜歡本文,並主動嘗試文中介紹的一些技巧。
我們已經回不到過去傳統光照製作的“美好時光”了,實時動畫製作正在革新創作方法,開啟了新的可能性。由於有更多嘗試和實驗的空間,我們不必承擔相應後果,因此可以創作更多優秀的作品。
來源:Unity官方平臺
原文:https://mp.weixin.qq.com/s/1v8V722x0B1bfQE7et1tYA
相關文章
- unity製作刮刮樂效果Unity
- 實現原理揭祕:如何用Unity製作逼真的自然場景?Unity
- 使用Unity製作起霧的窗戶效果著色器Unity
- 使用Unity製作遊戲AIUnity遊戲AI
- 揭祕電子遊戲背後音效製作的故事遊戲
- 使用jquery製作彈出框效果jQuery
- css揭祕實戰技巧 - 視覺效果[三]CSS視覺
- SceneKit_中級10_濾鏡效果製作
- Unity製作一個小星球Unity
- Unity製作特寫鏡頭Unity
- Unity 2D遊戲製作Unity遊戲
- 如何用Unity GUI製作HUDUnityGUI
- 揭祕定製高仿包包淘寶代理
- 《偶像大師》的口型製作方法大揭祕——相關技術開發者訪談
- Unity《Boat Attack》Demo幕後揭祕(內附原始碼下載)Unity原始碼
- Unity製作遊戲中的場景Unity遊戲
- 用“世界上最好的程式語言”製作的敲詐者木馬揭祕
- Unity的Forward+ FPTL光照剔除解析(一)UnityForward
- Unity的Forward+ FPTL光照剔除解析(三)UnityForward
- Unity的Forward+ FPTL光照剔除解析(四)UnityForward
- DaVinci Resolve Studio 18 for Mac啟用版:專業級的影視製作軟體Mac
- 一種巧妙的使用 CSS 製作波浪效果的思路CSS
- PopupWindow使用詳解(二)Popwindow製作常見花哨效果
- CSS製作水滴波浪效果案例CSS
- css製作下拉框效果CSS
- 揭祕ThreadLocalthread
- 揭祕instancetype
- BAT內部薪資、等級大揭祕(史上最全)BAT
- 遊戲巨頭齊聚 Unite Shanghai 2019,揭祕爆款遊戲製作精彩亮點!遊戲AI
- Unity3D 的物理渲染和光照模型Unity3D模型
- Cardboard開發教程:使用Unity製作Cardboard全景圖片瀏覽器Unity瀏覽器
- 使用CSS3製作導航條和毛玻璃效果CSSS3
- Unity3D模型製作規範[轉]Unity3D模型
- Canvas + JavaScript 製作圖片粒子效果CanvasJavaScript
- 離屏Canvas——製作放大鏡效果Canvas
- 重製遊戲還要重現 Bug?!揭祕遊戲重製的幕後故事遊戲
- 揭祕前端儲存前端
- synchronized底層揭祕synchronized