2017年11月27日 星期一

Judd Simantov on character rigging and modeling in Naughty Dog's The Last of Us _Judd Simantov 在頑皮狗的最後生存者裡,擔任角色綁定和模型製作。


Source from : Autodesk AT GDC 2013


  

Maya 與Max對照,Joint = Bone,Blend-shape = Morpher (skin morpher)


大家好,我叫Judd Simantov,我將談論有關最後生存者和角色綁定。

有兩個主要角色,喬爾(Joel)和艾莉(Ellie),他們是這次介紹重點。
自我簡介
  1. 頑皮狗TA Lead (秘境系列,最後生存者)
  2. 獨立承包商和顧問 - 顧客包含Naughty Dog, Blizzard Entertainment, Riot Games, Crytek, Sucker punch, Insomniac & Big Red Button
  3. 遊戲角色學院共同創辦人 

這邊有一些角色注意事項
  • 最後生存者有這樣一個強調敘述性特色,我們需要角色能夠真的可以支持它。
  • 我們想要將寫實性和細微變化盡可能推進到他們的動作中。
  • 即使雖然在PS3,我們想要挑戰技術和視覺極限。
首先,我們將討論臉,然後我們再討論身體。我認為臉確實是個相當有挑戰性的領域。對我們而言,要如何進步?這個對我們比較重要。

以Joint為基礎的臉部綁定,並用Blend-shape作為校正
以Joint綁定為基礎的臉部,我們會有一些Blend Shape (Morph Target)說明,我們可以深入探討。但最重要它的Joint 系統,是跟我們用在秘境系列一樣。我們是怎麼驅動Joint (drive the joint),有98個joint在臉上,這是相當多的數量,但這數量沒有比秘境2更多,最後生存者我們基本上只是優化擺放Joint和使用Joint的方法。我等一下會示範臉部運動,我們使用跟之前同樣的系統和工具。

在眼睛半闔以及嘴巴張開狀況下,綁定臉部。


  • 在眼睛皺褶上,可以比一般的Normal採樣效果更佳

在眼睛這個範圍裡,有個皺褶處,我們可以緩和許多拉扯,和在眼睛上許多變黑的部分。所以這樣一來,我們可以保持它半張開。當我們使用Normal Map,你會得到一個乾淨的眼睛(因為沒有拉扯和變黑),你會在影片中看到。我們在秘境2也做過展示,那時是有一個主要的問題,現在這個做法就幫助我們彌補它,這也讓我們可以保持更好的眼皮外型,因為我們不用從較遠的距離移動,如果我們是從較高的地方,把所有東西往下拉,才再製作一個型,這會是一個很大的負擔。有一些工作流程問題,你需要處理,類似確定眼睛張開不會有問題。因為任何人看到角色,不會就讓他輕易通過,跟你說YES,你可以進行下一步,這看起來很棒,醒醒吧,這不可能的。

基於更接近FACs的臉部

  • 基於更接近FACs的臉部
  • 定義一個以肌肉/解剖為基礎的方法

我們也試著基於臉部更接近FACs,就是一些你不熟悉的要素,它就是Facial Action Coding System (FACs) ,它把臉拆解成肌肉組,我們廣泛地使用它,而且它給我們更解剖式的方法去綁定,這對動畫師的確需要一點調適,不過一旦上手,我們就能讓角色讓人感覺是真實的。

著重在可以達到的極限
  • 從臉上感受到緊張感
  • 推進它的極限並保持角色外型
另外,我們會把表情推向極限,這對臉部有點難度,原本臉部只移動一點,但突然你要劇烈變化,準備表現出緊張,有件事你們看不到,我們有做wrinkle maps,讓皺紋透過表情出現。我們沒有放進來,不過遊戲裡面有置入,這幫助很大。但最大的挑戰,也是要把這些角色逼到極限並且角色模型不會變形,不會看起來變成另一個角色。對我們而言也是一個很棒的挑戰,我們真的要經歷不斷的調修。

這是一支喬爾的短片,一些東西,你可以看到他的臉,如何運動成表情

 有一些極限,我們試著讓每個表情讓它感覺不錯而且生動。喬爾舊的臉部Joint沒有Blend shape,我們達到的寫實程度,真的很驚人。

臉上有鬍子,也是一個很棒的挑戰,你可以看到模型密度,我們之後也會討論有多少模型在移動,這點很重要,可以看到很多遊戲,都在和它奮戰,或讓它感覺在臉上沒有關聯性,好像是獨立的物體,但我們希望它們可以一起移動並且感覺是有機的。


你可以看到有一些Joint如何移動。我會說臉部大概是最大的跳躍,是種藝術家級的跳躍,就是更容易了解的事情,把事情推向藝術面,而非任何新幻想的科技面向。



高面數

  • 允許在臉型上,有更多空間和皺褶。
  • 製作清楚的輪廓和形狀。
  • 給我們足夠的幾合面去雕刻校正。
高面數真的真的幫助很大,我意思是,你看到的確相當多的面數,但它提供給我們更多調整空間,所以你可以看到冷笑,你看到微笑,這部分有很多都會做得比較粗糙,因為他們沒有足夠的面數,我們試著讓每個角色都能達到。高面數也允許我們製作清楚的輪廓,像是當你看到角色,你不會覺得他是低面數的角色。我們會談論到有關這些校正,我們會雕刻到最好形狀,但這需要高面數才容易,因為你在低面數雕刻,它還是會造成問題。

這是一支短片,你可以近距離看到模型

我們會保持四角面。


高面數比較容易雕刻,形狀比較清楚,






可以看一下嘴形
試著讓模型做出這樣的極限。
瞳孔擴張

  • 我們追求一種些微的變化
我們還沒有看過在很棒的遊戲裡有瞳孔擴張,有趣的一點,這其實很容易設置。你可以看到瞳孔極限擴張,這有點詭異,當艾莉受到害怕的一瞬間,或她走到很暗的房間,她眼睛的反應會讓人感覺真實。

眼皮

  • 增加一個清楚跟隨眼球的眼皮
  • 當眼皮闔上,製作固定器將其固定。
基本上,我們之前我有說過我們有一些問題,我們不能保持我們的形,會產生一些暗部記號。我們希望眼球運動能夠非常平順,我等下就告訴你,還有你眨眼和移動眼球,保持清楚的形狀。

這是一個範例,你可以看到眼球好像在皮膚下移動。而且它都呈現清楚的形狀,沒有甚麼點是破掉的。
有個重要關鍵,它有固定的角度限制,我們花了很多時間確保她不管從哪個地方看,不管她怎麼眨眼,瞇眼,它都可以幫我們維持形狀。
動畫師不用再東補西補動畫瑕疵,這節省動畫師的時間。
Blend-Shape 校正
  • 使用Mudbox雕刻Blend-Shape校正
  • Joint有還原度的限制
  • 質量用Joint特別難成形
  • 增加工作流程的複雜程度。
我在講這之前,Blend-Shape校正,有許多名稱都在講它,但最基本的理念就是 : 你使用Joint去得到你80%的造型,而你沒辦法達到更進一步的層級,你可以雕刻Blend shape,額外加入(additive blend shape)。
我們用Mudbox,因為它容易輸出輸入(因為頑匹狗是用MAYA,Mudbox跟MAYA又很好的搭配)。很明顯使用Joint,還原度會受限制。
會增加一些複雜度到工作流程,因為你綁定結束後,製作Blend-shape校正,他們會將模型改變,你就要回頭再重做底層。 但最終結果是值得的。


我們有14張臉在艾莉身上,這真的是很酷的附加(addition)。 你可以只看一些變 形。

這全部的臉形都是附加物(additive),這意思是指,它是先用Joint綁定,再雕刻出來的臉型。所以它們看起來相當輕微變化。
但你看到它們混合之後,
當她瞇眼睛的時候

可以得到皺褶,
所以你只要有瞇眼睛的臉型,再combine它們(Maya用法),你會得到一個很cool的效果。
我現在要展示,我只是開關一些東西,
這是臉頰鼓起
這有點不是很明顯

你可能看不出來

我現在要展示微笑,如果我把Blende shape關掉,你會看到一些質量消失。Blend shape很微量,但它開始有了變化,會在一個範圍裡有一些質量產生。

現在是微笑,有一些摺皺,一些質量,得˙到一些嘴角,臉頰挺起,


我在展示一次,我把它關掉,打開。
很明顯它有不一樣,有一個很棒的輪廓。

Blened-shape 不支援巨大的變形,不過它已經給你足夠量去調整。
 我們也會用來重塑手肘,

我們做在臉上的東西,那些是比較大的改變,一些高規格的關鍵東西,我不會深入講到超級技術的細節。

我們現在來看身體

架設骨架

  • 身體有326根骨頭。
  • 85根runtime driven,這意思是指它不是被bake animation (類似有固定的動作),基本上是用driven key和constraints這樣的方式,在引擎中執行程序動作,使用處理器,不會消耗記憶體(no memory hits ) 。
  • 241根animation sampled Joint ,意指有bake animation。
  • 大多骨頭都被綁定。
有很多東西,但你看到我們有很多骨頭作單純的工作。

身體骨頭架設

  • 俐落joint對齊和排列
  • 更放鬆和中性

我們繼續看,在秘境結束後,我們有機會去改良一些事情,我們回頭看骨架設置,如何讓它更好,我們中和了一些姿勢,你可以看到他的脊椎(spine),我們真的讓脊椎柔軟,這很棒。我們盡量讓腿的骨頭直一點,但還是有一點小角度,讓IK裝上去,不容易翻車(pop)。角色模型盡量讓是放鬆姿勢,它對變形的效果更好,

手掌的腕骨Joints

  • 允許更動態的手勢和更具彈性

另外,我們在手掌上,增加兩倍的Joint,這之前我們沒用過,這讓我們可以重塑手掌,我這邊沒有例子,但你可以看影片,你可以看到手裡的Joint,它們如何影響皮膚,它的影響雖然小,但可以看出它的變化。

基本上 有三個joint,這是一個很棒的新增,我們可以得到更動態的手勢。


手臂移動控制器

  • 允許動畫師在手臂上塑出微量的改變

另外我們的移動控制器,我們利用Joint作旋轉(twisting) ,並將它們分散,不過我們從不把它曝光給動畫師。我們花太多時間試著取得完美的權重比例,為什麼不把這些控制器打開給他們用,如果移動太遠,它會看起來很怪。這些控制器只是基本的額外控制器,如果動畫師只是轉移,動畫師可以旋轉它,縮放它,或是修一些穿插。這樣就不用再回去重綁。




Cone Readers  (大多用在肩膀與手腕)
These readers are typically used in problem areas such as the shoulders and wrists to help prevent the geometry from collapsing and to keep the volume of the area the same. 
這些reader,一般被利用在解決解決肩膀與手腕的問題,幫助防止模型擠壓,和保持形狀的不變。

  • 利用Cone readers驅動某些變形去修飾
這些Cone在秘境的時候就有了,有位老兄Tyler,在頑匹狗擔任TD,使用這種setup。這個概念,就是我們使用這些Cone去驅動這些Joint,這3個Joint可以修正手腕變形,你看轉動可以驅動,但我們不是用set drive key的方式驅動,因為設不一樣的key,會讓你出。

所以我們讓這些Cone,你是輸入的量,它就會輸出量,它用這些量,去驅動並保持量體。


你可以看到它會修正手腕,試著保持形狀。
這可能是設定骨架中,最麻煩惱人的部分,但最後你想要保持形狀,你就必須要把每個角度都處理完,這才是長久之計。

"肌肉"系統

  • 即時"肌肉"外殼,突出的位置是基於接觸點的距離。
  • 允許我們不必使用contraints(限制)或外部軟體
在我們完成秘境2的時候,我們增加一件很酷的事情,同時我們秘境3也在進行,這時候有馬在秘境3之中,我們察覺我們需要肌肉系統。我那時有點沮喪,我們在秘境中,要做很多變形去修正一些地方。我就去寫類似肌肉系統的東西,它並非解剖式的準確,基本上這些肌肉外殼,你現在看到的影片,它只是依據距離凸起,在MAYA裡面這真的真的非常迅速,但不能在引擎運作,所以你要把Joint attach給這些肌肉外殼,讓它驅動,不用任何constraint或drive key,這部分也是比較麻煩的地方。


當你舉起肩膀,附近的Joint也會跟著位移,它有一個凸起的參數,它會自動保持整體的模型,這變得容易設定。我花了幾天的時間寫了這個外掛,有些肌肉系統要花很多工夫,我這個只抓大範圍區塊,它們會有動態調節,像是輕微移動,但它有時會有點過度移動。

旋轉分離外掛 (MAYA)

  • 一種允許分離及分配旋轉肩膀以下和前臂以上的方法。
  • 架設簡易和乾淨
  • 非常難出現翻船
這是一個完全不一樣的方法,你可以旋轉並分配twist給手臂,但這會花太多時間架設。我們有一個非統一的做法,我們只是想做一個簡易乾淨的架設,我們不想要太容易翻船,要保持模型正確位移。我寫這個外掛叫做twist dispersion,它是用Quaternion(四元數)寫的,基本上,分配twist,你可以得到很棒的旋轉(twist),你可以分配你想要它旋轉joint的量。









這些Joint都有用位移控制器,手腕上有一個訊息告訴你現在的轉量。
我們在前臂下最大的工夫就是,在畫手腕權重時,我們真的想要兩個骨頭彼此旋轉一樣,它們有點像鎖在一起,如解剖學的運動,你會感覺骨頭是圍繞另一跟骨頭旋轉。這就是美術面的範圍,而非技術面。你知道我們就是想逼到極限。
如果你轉360度,看旋轉數值就容易轉回。
使用即時helper處理衣服
這不是甚麼新技術,但我們用很多,我之前有講到程序化眼睛設定,設置driven key,在遊戲中運行,之前我們有很多問題,像是角色舉起他的腿,腿會穿插衣服,看起來很糟,所以我們想解決這問題。

所以它舉起腿到某點,它會舉起衣服,這其實有點左右為難(catch-22),如果你做太多,你獨立它會看起來很線性,像機器人,所以我們會微量使用它。


結論 :

  • 我們可以創造進行敘述的角色
  • 我們進化現有技術和工具。
  • 臉部是很棒的強化並且我們可以建立細微的情感影片
  • 身體變形器改善,但更重要是精簡架設。



感謝各位