2017年12月19日 星期二

ADAM : Unity 支援Alembic匯入工具的開發歷程

作者:Sean Low 原文
潤稿:Kelvin Lo


你是否好奇Oats Studios怎麼ADAM:The MirrorADAM:Episode 3製作出那樣逼真的場景、人物和服飾?


接下來我們將提供一系列文章,解釋ADAM製作過程中有關照明、Alembic支援、布料模擬、著色器、即時渲染等內容。
我叫SerEn(Sean) Low, 是一名在Made with Unity團隊裡的美術工具設計師(Art Tool Engineer),我之前在迪士尼協助皮克斯、漫威和盧卡斯影業等團隊開發遊戲機的動畫工具。在Adam短片裡,我負責整合像是Alembic和Timeline的工具,確保動畫流程的順暢和維護性。


背景:UnityAlembic的誕生


大約二年前,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 TrackAlembic Shot Asset

場景物件上的一個Alembic Stream Player元件

第二個重要更新是針對頂點共用(Vertext Sharing)的支持。這對優化網格拓撲資源的Alembic流傳輸效能十分重要。典型的Alembic資料是用來進行動態模擬,比如粒子,它們的網格拓撲會不停變化。我們將共用的頂點合併,以優化重播效能。這非常的重要,因為網格在每一幀都會基於資料流程進行即時重建。透過合併共用頂點,其它網格屬性,例如邊、UV、法線以及切線也都會被更新,動態Alembic網格現在的行為就與一個FBX網格一樣。這確保了網格可以根據場景中指定的材質、著色器和光照做出回饋。


Unity中的Alembic網格顯示共用頂點

第三個重要更新是在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樣本,而無需在重播中緩存資料。

Oats Studios 使用Alembic的流程


“Alembic串
流傳輸對於我們來說,是此專案能夠成功一個非常重要的原因。將模擬的東西導入十分困難,而Unity中的Alembic工具是個大功臣Oats Studios的特效總監Chris Harvey說。

Timeline編輯器中組合多個Alembic資源


基於真實的演出服裝,OatsADAM影片中所有的服飾,都是透過攝影製圖法(photogrammetry)捕捉還原,然後在Marvelous Designer中重建和模擬。Sean Frandsen負責Marvelous Designer中對不同的編織類型羊毛、棉、皮革等賦予真實的物理屬性和動畫。同時捕捉的面部表情被轉換成一系列靜態網格用於Alembic播放。幕後花絮可以看這裡


ADAMAlembic被主要用在兩個地方:布料和臉部


資料隨後被導入到Autodesk Maya,進行進一步處理和調整後匯出為一個Alembic檔。這是流程的示意圖。


導入UnityAlembicFBX資源流水線

在空間和時間中組裝模擬資源


Unity階段,OatsTimeline作為一個裝配工具,組合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格式下載.

沒有留言:

張貼留言

關於我自己

我的相片
Unity台灣官方部落格 請上Facebook搜尋Unity Taiwan取得Unity中文的最新資訊