2012年3月21日 星期三

淺談 Maya PSD - Pose Space Deformation


何謂Pose Space deformation(PSD)?
按照字面上來解釋,就是可以針對不同pose產生不同deformation(形變)變化的技術。更簡單來說,就是修正你希望的形變與joint產生的形變之間的落差。

寫成公式就是:
Corrective deformation      我想要的正確形變
– Joint deformation         骨頭所產生的形變
= Pose space deformation    PSD所修正的形變

因為joint產生的形變有其極限,所以這種落差有時難以避免,像是:複雜的肌肉組織(後背、肩胛、手臂二頭肌、指節肌肉),或是遇上一些特殊狀況,比如:模型佈線錯誤來不及改、joint擺放位置不佳回不了頭、非常理的模型變化。

一般來說,PSD都是去偵測joint的數值來做變化,轉到特定角度就會產生對應的形變,因為可以直接在那個角度雕出想要的變化,因此使用上非常直觀與有效。這種技術能讓rigger的日子好過很多,可以很精確地達到animator想要的形狀變化,讓案子順利進行,皆大歡喜。


PSD在使用上,通常只要重複三個步驟:
  1. 旋轉或移動關鍵的joint到你想要改變shape的位置
  2. 雕出你想要在這個位置呈現的正確shape
  3. 設定你的shape與joint數值之間的關聯性
之後就是一直重複這樣的流程直到正確的將各個軸向的形變定義完畢。


Maya應用上,據我所知,有兩種方法:
  • Maya Plug-in
    Pixar Rigging TD Michael Comet佛心來的外掛。不但有教學文章,而且還很大方地分享在網路上給大家download使用,介面方便,功能完整,還可以左右mirror,缺點是版本間不相容,新的maya就需要新的外掛,只更新到8.0的版本而已。

    好在他後繼有人,很有愛的VFX artiest David Johnson為我們提供了免費更新,而且還有做各種作業系統的版本,另外他還重寫了一篇完整的教學,深入淺出更勝Comet,我就是從看這篇文章學會如何使用PSD的,真是很感謝他無私地分享(大拜~)。

  • Corrective Blendshape
    利用blendshape + set driven key的做法,使得joint在特定旋轉角度時產生對應的blendshape變化,好處是不用plug-in,所以不會隨著版本汰換而失效,而且因為只用到joint和blendshape,所以還可以進遊戲引擎來使用。缺點是製作上比較不直覺。工具方面,大家通常都推薦rigging教學art of rigging 1第6章裡的mel-cgTKShapeBuild

Double Helix Games的TD Robert Morgan提到過,PSD有兩個缺點: 
  1. 因為Euler angle的關係,PSD修正shape的角度會受限。
  2. PSD針對單一角度可以很準確,可是同時有三個角度在旋轉時,shape的變形效果就很難控制。

工作上唯一用到的一次就是公司原創短片Opuesto主角Kyle的肌肉變形。因為手臂模型佈線跟貼圖的肌理看起來毫無關係關聯性很低,膝蓋也知道光用joint一定沒救,時程又很趕,沒辦法一直Try&Error,於是我試了很多怪方法,上網到處找資料,最後自己認為(因為公司只有我一個rigger閉門造車)最適合也是唯一的方法就是用PSD來補救,還好最終結果看起來還可以。

麻煩的是當時要一台一台電腦幫animator安裝plug-in,而且角色身體左右沒有對稱,所以同樣的shape得乖乖地雕兩次,也可能產生些微不對稱的情形,還有就是要快速地學會這個工具。肩膀跟手臂都有做修正,一邊應該是用上了9個PSD,當時覺得多到快吐了,後來聽到sofa的量,才知道這其實沒什麼。工具上就是使用David Johnson佛心提供的plug-in,非常好用。

【使用者經驗分享】(轉貼自FB的rigging club)
Sofa Studio的Cara Chou:至於在修psd上,除了正前、正後,正旁,還要再加上側45度的型下去一起修才會漂亮,而且要先修出正前、正後,正旁,然後再用兩個雷達的傘打開,再去修中間的45度,也才會接得順,不然某些點會跳動,或是某些角度的時候形狀會鼓起或凹下。如果在要求比較高的模型上,粗略估計一個肩膀約要16個雷達,連手指頭的關節也會修到,不過用psd修出來的模真的很漂亮,還會有肌肉感,就看使用者的需求了!

CGCG的Chris Lai:最重要的還是修"型"的美感....
至於要做幾個,見人見智,有的時候還需要使用expression去計算中間的變化,我看過100多個blendshape在一個角色身上的檔案~~~~有點誇張.....

PSD補充資料:
 

 
  • 法國的Character TD Cedric Bazillou在他的部落格上對PSD做了一系列深入探討,透徹解釋了PSD的原理跟所有細節,甚至還開發了一個類似Corrective Blendshape的inverseSSD_BlendShape_Tools,並解釋了整個思路過程。另外他提到3dMax裡有類似的功能,叫做skinmorph modifier。

  • 義大利TD Tommaso Sanguigni改造了Comet的PSD內容開發出了新工具tsPoseSpaceDeformer,不用plug-in就可以直接在任何版本的Maya上運作,可惜沒有分享出來給大家聞香。

  • 美國RnD公司JoeAlter Inc.針對不同面數surface變形的外掛工具LipService  for Maya,最新版本是要錢的,不過舊版本的beta版可以免費下載, 個人沒有用過, 歡迎用過的朋友分享心得。進一步說明,LipService是主要變形工具,相當於一般的PSD,而LBrush則是針對PSD後的結果再去做更多細節的雕刻工具,就像是脫離靜態可以針對動作來雕刻型變的ZBrush或MudBox,厲害的是它也可以與 ZBrush或MudBox做匯出匯入上的整合,JoeAlter聲稱,這樣的工具即使是在各大studio內部也是前所未見。

    下面是他們灰熊厲害的Demo:
  • 迪士尼的文獻,根據Lewis, J. P., Cordner, M., and Fong, N. SIGGRAPH 2000上的論文 Pose space deformation作探討,首度應用在電影Bolt當中。

最後,以上都是我個人閉門造車的理解與資料整理,歡迎有經驗的各路朋友,交流討論!感謝!

3 則留言:

高錫研 提到...

感謝你的分享!!
很受用!!

匿名 提到...

想請教一下(PSD有兩個缺點那段)
如果把elbow joint的Z軸lock起來,rotation order設定為xyz的情況下(on XZ plane),這樣把旋轉軸限定在Y(手臂曲張)跟Z(前臂自轉),而且跟Joint orientation也不會偏移.
這樣還會有euler的問題嗎?

Yao 提到...

哈囉,匿名你好
按照你的方法應該就不會發生euler的問題。不過因為PSD常應用的位置大多是在shoulder joint的變化,elbow joint的旋轉問題本來就比較單純,所以在其他位置euler的問題還是有可能會發生的。