潤稿:Kelvin Lo
接下來我們將提供一系列文章,解釋ADAM製作過程中有關照明、Alembic支援、布料模擬、著色器、即時渲染等內容。
我叫SerEn(Sean) Low, 是一名在Made with Unity團隊裡的美術工具設計師(Art Tool Engineer),我之前在迪士尼協助皮克斯、漫威和盧卡斯影業等團隊開發遊戲機的動畫工具。在Adam短片裡,我負責整合像是Alembic和Timeline的工具,確保動畫流程的順暢和維護性。
我叫SerEn(Sean) Low, 是一名在Made with Unity團隊裡的美術工具設計師(Art Tool Engineer),我之前在迪士尼協助皮克斯、漫威和盧卡斯影業等團隊開發遊戲機的動畫工具。在Adam短片裡,我負責整合像是Alembic和Timeline的工具,確保動畫流程的順暢和維護性。
背景:Unity中Alembic的誕生
大約二年前,Unity研發團隊開始開發Alembic匯入工具,當時主要是給Marza動畫星球的TheGift的動畫短片用。The Gift中最具挑戰性的鏡頭之一是將從Houdini模擬產生的Alembic資料匯入Unity,那是一個有幾百萬顆塑膠球組成的巨浪。這結果證明Alembic很適合讓美術匯入來自各種其他程式的模擬資料。Alembic還使美術可以突破即時引擎中基於關節網格變形的限制。
當Oats Studios決定在製作過程中使用Alembic工具時,還希望有一些額外的功能和優化,以便能處理布料模擬的擬真效果以及即時臉部捕捉。由於這些需求與當初Alembic工具的設計目的差異很大,Unity開發團隊在升級這個工具上做了很大的努力。
Alembic工具的主要升級
第一個主要改變是針對Timeline的整合。這讓Alembic資料在執行時可以即時輸入並透過Timeline播放。同時在編輯狀態中,開發者可以在Timeline上直接拖動就可以播放Alembic動畫。為了完成這個功能,我們在Alembic Importer包裡面加了一個自訂PlayableBehavior (Alembic Stream Player), PlayableAsset (Alembic Shot Asset)和TrackAsset (Alembic Track)。
想了解更多可以查看文件
在Timeline中,你可以先加一個Alembic Track,然後建立一個Alembic Shot Asset,最後透過一個Alembic Stream Player元件將它和場景中的Alembic實例進行關聯。
在Timeline中,你可以先加一個Alembic Track,然後建立一個Alembic Shot Asset,最後透過一個Alembic Stream Player元件將它和場景中的Alembic實例進行關聯。
Timeline中的一個Alembic Track和Alembic Shot Asset
場景物件上的一個Alembic Stream Player元件
第二個重要更新是針對頂點共用(Vertext Sharing)的支持。這對優化網格拓撲資源的Alembic流傳輸效能十分重要。典型的Alembic資料是用來進行動態模擬,比如粒子,它們的網格拓撲會不停變化。我們將共用的頂點合併,以優化重播效能。這非常的重要,因為網格在每一幀都會基於資料流程進行即時重建。透過合併共用頂點,其它網格屬性,例如邊、UV、法線以及切線也都會被更新,動態Alembic網格現在的行為就與一個FBX網格一樣。這確保了網格可以根據場景中指定的材質、著色器和光照做出回饋。
場景物件上的一個Alembic Stream Player元件
第二個重要更新是針對頂點共用(Vertext Sharing)的支持。這對優化網格拓撲資源的Alembic流傳輸效能十分重要。典型的Alembic資料是用來進行動態模擬,比如粒子,它們的網格拓撲會不停變化。我們將共用的頂點合併,以優化重播效能。這非常的重要,因為網格在每一幀都會基於資料流程進行即時重建。透過合併共用頂點,其它網格屬性,例如邊、UV、法線以及切線也都會被更新,動態Alembic網格現在的行為就與一個FBX網格一樣。這確保了網格可以根據場景中指定的材質、著色器和光照做出回饋。
Unity中的Alembic網格顯示共用頂點
第三個重要更新是在Alembic頂點資料中添加了插值(Interpolation)。既然Alembic網格基本上是一個每幀都會重建的新網格,它就沒有先前以及之後頂點位置的變化資訊。這在你嘗試對Alembic網格應用運動模糊進行渲染時會產生問題。有了插值,Unity中的Alembic資源可以計算位置之間的插值,並輸出要進行運動向量計算所必需的速度。那意味著,你現在可以從Alembic網格匯出精確的運動向量,以用於著色器計算或後期處理特效包Post-Processing Stack。這增強了最終渲染圖像中的運動模糊品質,同時還因為採樣數降低,使效能得到了提升。
第三個重要更新是在Alembic頂點資料中添加了插值(Interpolation)。既然Alembic網格基本上是一個每幀都會重建的新網格,它就沒有先前以及之後頂點位置的變化資訊。這在你嘗試對Alembic網格應用運動模糊進行渲染時會產生問題。有了插值,Unity中的Alembic資源可以計算位置之間的插值,並輸出要進行運動向量計算所必需的速度。那意味著,你現在可以從Alembic網格匯出精確的運動向量,以用於著色器計算或後期處理特效包Post-Processing Stack。這增強了最終渲染圖像中的運動模糊品質,同時還因為採樣數降低,使效能得到了提升。
Alembic網格上的運動向量
計算運動模糊前
計算運動模糊後
運動向量緩衝區
此外我們還實現了好幾個對實際生產中有幫助的特性,能讓工作流程更順暢。例如Alembic Playable Asset的自動啟動,這使Alembic Playable Asset無需在Timeline中增加額外的Activation Track即可啟動。Time Scale屬性使你可以重新調整Alembic資料的重播時間。Turn Quad Edge屬性使你可以選擇網格表面三角化的方向。另外還有一個選項可以在Alembic場景物件啟用時緩存所有Alembic樣本,而無需在重播中緩存資料。
計算運動模糊前
計算運動模糊後
運動向量緩衝區
此外我們還實現了好幾個對實際生產中有幫助的特性,能讓工作流程更順暢。例如Alembic Playable Asset的自動啟動,這使Alembic Playable Asset無需在Timeline中增加額外的Activation Track即可啟動。Time Scale屬性使你可以重新調整Alembic資料的重播時間。Turn Quad Edge屬性使你可以選擇網格表面三角化的方向。另外還有一個選項可以在Alembic場景物件啟用時緩存所有Alembic樣本,而無需在重播中緩存資料。
Oats Studios 使用Alembic的流程
“Alembic串流傳輸對於我們來說,是此專案能夠成功一個非常重要的原因。將模擬的東西導入十分困難,而Unity中的Alembic工具是個大功臣”,Oats Studios的特效總監Chris Harvey說。
在Timeline編輯器中組合多個Alembic資源
基於真實的演出服裝,Oats的ADAM影片中所有的服飾,都是透過攝影製圖法(photogrammetry)捕捉還原,然後在Marvelous Designer中重建和模擬。Sean Frandsen負責在Marvelous Designer中對不同的編織類型羊毛、棉、皮革等賦予真實的物理屬性和動畫。同時捕捉的面部表情被轉換成一系列靜態網格用於Alembic播放。幕後花絮可以看這裡
在ADAM中Alembic被主要用在兩個地方:布料和臉部
資料隨後被導入到Autodesk Maya,進行進一步處理和調整後匯出為一個Alembic檔。這是流程的示意圖。
資料隨後被導入到Autodesk Maya,進行進一步處理和調整後匯出為一個Alembic檔。這是流程的示意圖。
導入Unity的Alembic和FBX資源流水線
在Unity階段,Oats將Timeline作為一個裝配工具,組合Alembic資源,並在場景空間中將它們和其它資產一起進行編排。例如為了完整地組裝一套角色表演,使用了兩個Alembic軌道,分別用於面部和布料。這兩個軌道位於一個包含FBX格式的身體表演的Animation軌道之上,如下圖所示。
裝配好的角色在Timeline中栩栩如生
有了Timeline中的所有東西,Oats可以同步並根據每個鏡頭的時間對所有資源進行排序,以進行即時重播。但是在實際的生產過程中,大量的資源會很容易使Timeline編輯器介面雜亂不堪,極難維護。為了解決這個問題,Oats使用可自由展開和折疊的TrackGroup來組織場景中的資源。為了進行更好的組織管理,Oats還使用了另一個Unity特性ControlTrack,它可用於處理多個嵌套的Timeline實例。
展開與折疊的Track Group
ControlTracks處理嵌套時間軸資源
在隨後的製作階段,面部捕捉和布料模擬生成的Alembic資料檔案總數接近300個。因此,Oats需要一個自動化過程來將多個Alembic檔導入到Timeline,所以他們編寫了自己的匯入器,自動將Alembic檔導入,進行預定義設定,在場景中產生實體並加上所需的元件,以及在Timeline中排序。在Unity開發團隊的幫助下,Oats最終可以只點一個按鈕就能啟動這整個自動化過程。我們從這個專案中還收集了許多很好的回饋和API需求,用於對Timeline進行深入改進。
為不同的角色和道具管理幾百個Alembic資源
在整個製作ADAM專案的過程中,Alembic匯入工具變得更加成熟和適於實際工作環境。你可以用它處理動態拓撲類比網格和靜態拓撲網格,如布料和臉部。它針對Unity現有的和即將到來的特性進行了優化,更好的整合。越來越多的美術和工作室對使用Alembic表現出興趣,特別是在即時CG電影方面,我們很期待它可以成就許多驚豔的Unity專案。
Alembic Vertex Sharing Github發佈 版本 (1.0f1)
在空間和時間中組裝模擬資源
在Unity階段,Oats將Timeline作為一個裝配工具,組合Alembic資源,並在場景空間中將它們和其它資產一起進行編排。例如為了完整地組裝一套角色表演,使用了兩個Alembic軌道,分別用於面部和布料。這兩個軌道位於一個包含FBX格式的身體表演的Animation軌道之上,如下圖所示。
裝配好的角色在Timeline中栩栩如生
有了Timeline中的所有東西,Oats可以同步並根據每個鏡頭的時間對所有資源進行排序,以進行即時重播。但是在實際的生產過程中,大量的資源會很容易使Timeline編輯器介面雜亂不堪,極難維護。為了解決這個問題,Oats使用可自由展開和折疊的TrackGroup來組織場景中的資源。為了進行更好的組織管理,Oats還使用了另一個Unity特性ControlTrack,它可用於處理多個嵌套的Timeline實例。
展開與折疊的Track Group
ControlTracks處理嵌套時間軸資源
一鍵自動化
在隨後的製作階段,面部捕捉和布料模擬生成的Alembic資料檔案總數接近300個。因此,Oats需要一個自動化過程來將多個Alembic檔導入到Timeline,所以他們編寫了自己的匯入器,自動將Alembic檔導入,進行預定義設定,在場景中產生實體並加上所需的元件,以及在Timeline中排序。在Unity開發團隊的幫助下,Oats最終可以只點一個按鈕就能啟動這整個自動化過程。我們從這個專案中還收集了許多很好的回饋和API需求,用於對Timeline進行深入改進。
為不同的角色和道具管理幾百個Alembic資源
小結
在整個製作ADAM專案的過程中,Alembic匯入工具變得更加成熟和適於實際工作環境。你可以用它處理動態拓撲類比網格和靜態拓撲網格,如布料和臉部。它針對Unity現有的和即將到來的特性進行了優化,更好的整合。越來越多的美術和工作室對使用Alembic表現出興趣,特別是在即時CG電影方面,我們很期待它可以成就許多驚豔的Unity專案。
Alembic Vertex Sharing Github發佈 版本 (1.0f1)
以Unity Package格式下載.
沒有留言:
張貼留言