2016年9月9日 星期五

即時運算短片Adam - 動畫製作

KRASIMIR NECHEVSKI 原文

大家好!我是負責Adam的動畫總監Krasimir Nechevski,本次將為大家介紹Adam中所有與動畫相關的內容。我曾作為一個軟體工程師製作角色動畫超過15年,加入Unity之前我在Crytek待了7年之久。


參與Adam的短片製作是一件令人興奮又難得的機會,我明白加入最棒的團隊參與最新進的技術研究肯定是一件不輕鬆的工作,因為我們每一步都得如履薄冰,但整個團隊都很有熱情和信心。

如果你錯過了之前我同事們的文章,可以從這裡連過去看:

2.Plamen Tamnev 即時運算短片Adam - 即時影片的資源建立

本篇文章會介紹所有和動畫相關的區塊,大部分都是我做的,有些則發給由我控管的外包,我主要負責的部分有:Previs預覽版本
、Adam的骨架、Adam大部分的動畫、環境動畫、攝影機動作及管理動作捕捉(Mocap)的工作。我同時也和我們的工程師Dominykas Klauleikis一起設計開發了人群系統(Crowd System)。最後在Unity正在開發中的工具Storyteller裡完成了整部電影的組裝。


預覽版本


專案最初的計畫就是保持所有內容隨時都能靈活使用,能夠按需求切換資源並重複利用,所以這個專案很多時候都處於半預覽階段。我們一開始先幫Adam做了個替代模型。

初版Adam


替代模型的目的是獲得正確的比例,並能對肩膀骨骼的運作方式進行反覆替換,因為雖然Adam的肩膀看起來是人形的,但它並非自由的球型關節而是單軸旋轉關節的組合。

早期版本的Adam肩膀骨架


另一件很重要的事情是要早點和演員一起工作。演員Ovanes Torosian有電影和戲劇方面的經驗,但沒有做過動作捕捉。在早期預覽階段,我們決定使用CP很高無需標記點的動作捕捉解決方案 - Perception Neuron。我們試了幾個不同的方法反覆拍攝Adam的姿勢、肢體語言和表現,給
演員一些時間來適應這種技術。還用手持搖臂來嘗試各種相機的移動。

不用標記點的方案 - Adam表演的排練



我們一開始在MotionBuilder裡測試其中一個代表場景的預覽,嘗試了一些鏡頭的切換,像是單一相機無縫切換到快節奏的切換。



MotionBuilder中預覽剪輯鏡頭

不久後我們決定將這個預覽移到Unity上。然後導演Vess就可以加上燈光與材質,並利用引擎的即時渲染功能讓預覽效果更接近想要的感覺。最終證明這種反覆運算方式以及提早將整部電影移到Unity的做法效率非常好,因為我們可以不斷的對不同鏡頭進行快速測試修改。

Adam在Unity裡運作的早期版本預覽

Adam的骨架



導演Vess希望實現一個真實紀錄片風格的電影,所以需要讓Adam的人體力學看起來有說服力。我不想用掩蓋或在任何部位做假,比如讓堅硬的表面能扭曲或從相機隱藏它們。此外我們在很多細節還沒定案的時候就開始製作了,所以整個製作過程初期Adam只有基本骨骼和部分手臂的功能。這個構造和比例一直保持到最後,很多部分都是後面才加的,一些是為了適應移動範圍做的修改。為了不影響角色自由移動做出一些改變是必要的,我和設計師Georgi和建模師Paco之間也來回反復進行修改直到最終完成作品。


不同階段的Adam模型



匯出到Unity中的骨架是在3D Studio Max中完成的,借助Character Studio 製作了主骨架。在這基礎上我按步驟加上了肩胛骨、鎖骨、上臂和前臂。對於腹部和脖子周圍的橡膠,我決定不使用混合外形(Blend shapes),而是烘焙關節動畫來模擬變形。

Adam的骨架
骨架另一個耗費大量精神的部位就是眼睛。我模擬鏡頭光圈為它們做了一個具有獨立旋轉葉片的功能。眼皮是分開並能單獨被角膜推動。

Adam眼睛的骨架


接下來動畫師在MotionBuilder內導入這個骨架,Character Studio 的骨架被作為雙足的Human IK。所有的動畫捕捉資料都在MotionBuilder內重定向、整理並修改。
除了眼睛之外,許多的手拉動作也是在這時完成的。

MotionBuilder中Adam的骨架


一個運鏡準備好後就匯出回到3DS Max,在3DS Max已經準備好所有的動畫程序和手拉的眼睛動畫。最終結果烘焙並匯出FBX格式到Unity中作為通用骨架(Generic rig)



Adam - 動作捕捉和動畫

整個動作捕捉的製作過程中有很多鏡頭都很有挑戰性,尤其是第一部分Adam從架子上掉落,用膝蓋爬行並試圖移除面具的鏡頭。挑戰主要在於角色與相機移動要保持完美同步,在動作捕捉預覽階段,演員要反覆表演並理解詮釋這個角色。同時導演對這些表演給予建議後進行微調,不斷反覆調整相機來保證所有要素完美融合。

最終在Cinemotion中查看動作捕捉的最後表演時,我們已經完全清楚想要的效果,所以在短短一天時間內就完成了所有的拍攝。來自保加利亞的Cinemotion公司提供了所有需要的設備,以便使用虛擬相機來同時捕捉Adam與相機行為。

另外,由於價格合理,我們也能用這種方案不斷反覆運算製作方式,重新拍攝,探索更多鏡頭可能性,必要時能實現突如其來的靈感。

在Cinemotion工作室進行最後的動作捕捉


拍攝完後,我挑選了不同的鏡頭資料並將演員動作資料和導演Vess最喜歡的相機運作模式進行組合。如果沒有花費額外的時間在工作室嘗試所有的部分,這是不可能完成的。
早期版本的動畫片段


在清除並重定位資料後,就要整合最終的表演並加入最後的潤色了。接下來就是填補那些不太能捕捉到適當動作或姿勢的動畫缺陷,比如Adam一開始是掛在架上。在製作出最終的融合和修補動作後,我在MotionBuilder 內部完成手指的動作並匯出到Max。

眼部行為


在動作捕捉階段時,我使用手持相機單獨捕捉了一些演員的眼睛畫面。最後在Max中使用這些鏡頭作為參考增加了眼睛的動畫。此時Adam就可以匯出備用了!

實現眼部運作概念

相機 - 動作捕捉及動畫



為了實現理想中的紀錄片效果,我們需要一部可識別動作的手持相機。為此用到了攝影師Mihail Moskov設定的虛擬相機。儘管用動作捕捉了相機的行為,但我們深知還是要繼續反覆計算剪輯,並且後面還要增加一些鏡頭。為了有盡可能多的選擇空間,我們也順便做了一些相機的一般移動,例如不同的旋轉角度等。然後使用MotionBuilder或Unity的Storyteller工具來整合這些動作並新建動捕階段沒有的相機。這讓導演Vess可以更加靈活地發揮想像而不必局限於已捕捉的內容。

Mihail和Ovanes在動作捕捉空間中



Sebastian和Lu

Sebastian和Lu是電影下半部分出現的兩個陌生人。錄製他們的動作又是另一個挑戰,因為他們是用可伸縮的高蹺來行走的。我們邀請了有踩高蹺經驗的Stanimir ‘Stunny’ Stamatov來扮演兩個角色。

特技演員Stanimir ‘Stunny’ Stamatov扮演的Sebastian和Lu


為這些角色拍攝動作捕捉時,導演對於他們的表演有幾個不同的想法,但並未決定採用哪一個。我們需要調整方法以便導演可以構建並嘗試大量不同的動作。所以更多地使用了製作遊戲的方式,捕捉不同的動作以方便後面進行整合。可以從不同版本的動作中挑選出最合適的一個。這兩個角色拍了一系列的循環動作如走路、空閒、停止、下降等,也拍了一些基礎動作。這個方法很靈活但也存在缺陷,一些動畫之間的轉換不夠流暢。

Sebastian循環走路動作


Sebastian和Lu的骨架與動作是交給兩家外包公司Bläck StudiosPixelgrinder完成。之前製作 The Blacksmith 時已與他們合作過。他們在Maya和MotionBuilder中完成了角色的骨架,並借助HIK實現了高蹺的自訂骨架。Adam的做法並不適用於Sebastian和Lu,因為Sebastian和Lu的全身都是穿著衣物的。
衣服和繩索的模擬由VFX設計師Zdravko Pavlov利用CaronteFX 製作,CaronteFX 是由Next Limit Technologies開發的Unity外掛程式,可以至Asset Store下載。後續我們將專門介紹Zdravko使用CaronteFX完成電影中的一系列特效。

Motionbuilder中Sebastian和Lu的骨架



守衛



守衛的骨架從某種程度上和Adam是一樣的。它有一個基於Character Studio的骨架並加了一個附加的骨架。額外加的骨架解決了盔甲滑動和彎曲的問題。腰部和彈藥袋的布料是Zdravko用CaronteFX來完成的。

守衛骨架


Ovanes和Stanimir兩位演員負責守衛的動作捕捉。最難的場景就是一個憤怒的守衛開始射擊人群的部分。那一幕只捕捉到很少到鏡頭,分鏡的表現都是後期再整合進去的。我們使用了Cinemotion動畫服務完成守衛的重定位和節點清理工作。

Ovanes, Stanimir 和Mihail在 Cinemotion動作捕捉中心




人群



製作人群最大的挑戰就是需要做許多事以保證足夠的多樣性。所以這些機械的、跌倒的、充滿疑惑的角色要盡可能看起來有感覺。我們的方法是製作擁有不同行為的人群(如難過的、精力充沛的、好奇的)。對於每種行為都有一個很簡單的狀態機來驅動各個機器人。

人群的Animation Controller


我們的理想目標是擁有8種不同的版本,每一種都擁有其所需的完整動畫。但隨著電影劇本漸漸定案,每種人群版本都需要90秒左右的動畫。這對我們來說太多了,所以最終只做了4種版本。

MotionBuilder中的人群模型及骨架


我們為Adam構建了3種LOD版本,分別帶有41、28和13根骨頭。最後採用了品質較高的2種LOD,因為由技術主管Torbjorn Laedre開發的GPU蒙皮技術完全可以處理需要的角色數量。人群的動作捕捉表演也由Ovanes和Stanimir完成,隨後在Cinemotion動畫師們的幫助下完成了動作的重定位和鍵值清理工作。



人群系統


人群系統是由技術主管Torbjorn Laedre,程式設計師Dominykas和我一起開發的。Torbjorn寫了所有的回播程式,幀插值功能,GPU蒙皮,人群實例化以及材質變化等功能。Dominykas編寫了所有向量環境(vector field)的程式和工具。

我們需要明確人群系統必須完成的任務:

  • 人群模擬需要100% 的確定性
  • 需要能與Unity的Storyteller工具配合以便於進行快速利用
  • 需要一個很好的方式來控制整個人群的動向
  • 還需要一種方式來調整自訂值用於分離人群
為了控制人群的走向,我們決定使用一個向量環境來實現,人群在向量環境中會受到經過的箭頭影響。Dominykas製作了一些簡單而強大的向量環境創作工具,以箭頭形式呈現。每條線的向量環境可以與其方向一致,朝向或者背離它移動。而且都有影響區域和力度的調整參數。

Unity中的視覺化向量環境



我們在其中一個區域加了用來隨機初始化機器人分佈的功能。用這種方式分配的機器人後續可以調整起始點的位置和角度,或者改變狀態機的初始狀態,以及通過延時觸發器來更改。還加了用於捕捉人群在時間軸上任意點的狀態,可以用作下一個鏡頭的起始點。

人群控制台




敘事系統工具


Unity Demo團隊的一個重要任務就是為引擎團隊提供使用者的回饋。對於 Adam,我們與開發Unity全新的敘事工具的團隊緊密合作。我們曾經用過原型和初期版本的工具,也不斷地在提供反饋並加強工具的設計和發展。使用這個工具製作Adam的過程非常舒服也很熟悉,因為它與電影工業中廣泛應用的其它工具很類似。

對於角色和鏡頭動畫使用標準的動畫軌跡,可以在世界空間中進行裁剪、混合及補間。

紅色區域是動畫軌跡


Storyteller工具提供了更高級的功能,我們使用了一種能讓演員執行自訂腳本Playables的方法,這個例子中包含了人群系統的場景管理器,用來顯示隱藏物件,改變光照和相機等等。

自訂腳本軌跡,Playables


Storyteller工具另外一個非常有用的功能就是可以記錄任意參數的變化。結合曲線編輯器就可以輕鬆製作鏡頭的位移,屬性,漸變等動畫。

曲線編輯器


這個專案的最終成果就是完成了第一階段的Demo,可以在Unity中直接打包出可執行檔展示。
為了提供一個可以預覽的電影給線上觀眾,我們製作了影片放在了YouTube上。影片製作借助了小腳本BeautyShot。Unity研發團隊正在研究是否能夠在引擎中直接實現影片錄製工具。

感謝您的閱讀!現在我們正準備發佈Adam的部分資源,後面還會繼續推出Adam製作相關的文章,請密切注意。

沒有留言:

張貼留言

著作人