• 沒有找到結果。

第一章 導論

1.3 論文貢獻

我們設計一個名為 IMMograph 的動作圖實驗平台,在這個平台上,我們除了設計 了自定的骨架以及動作系統,更整合了 C++上主流的 3D 繪圖引擎(OGRE)以及 GUI

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

7

以語意尋找合成動作的機制

我們設計了一個簡易的 Script 語法,名為「Motion Script」,讓使用者可以使用高階 的語法來控制我們所提出的「多層式動作圖」,不用去了解底層實際運作的方式。

資料的動作為動作編輯(Motion Editing),而接下來將簡單介紹兩種動作編輯的方式。

動作混成(Motion Blending)是最基本的動作編輯方法之一,他的目的在於將使用

混成出來的結果。Unuma 等人[20]的研究在內插的比例上加入了傅立葉展開(Fourier expansions)來使動作轉換時的混成更為平順,Bruderlin 和 Williams[4]則是將擷取下來 的資料從原本的時域轉換到頻域後再進行動作的混成。Rose[15]在他的研究中將動作轉 由 Witkin 和 Popovic[21]所提出,在做動作變形前通常會先了解變形後目標的需求以及 限制,然後去定義一個可以符合需求的目標函數,但同時也希望可以保原動作擷取資料

究中他參考了 Tomovic 與 McGhee[19]將有限狀態機(Finite State Machine)應用在生物 工程學系統上的經驗,以及之前對於人類運動的研究的成果,在觀察並分析人類的走路 動作後,將走路動作同樣以一個有限狀態機來定義,而狀態機中的每一個狀態都是走路 動做中的一個關鍵格,而在各個關鍵格之間則是使用線性內插的方式來產生連接用的連 續影格。

Bruderlin 和 Calver[2, 3]在他們的研究中更進一步的在走路程序中加入了控制器的

概念,透過使用反向鐘擺(Inverted Pendulum)及正向機構學(Forward Kinematics)這 兩個控制器,使在人物行走時踏出每一步的時候,都會以有接觸到地面的腳設為身體的 支撐點,重新的修正身體的移動量,以確保動畫人物不會發生像腳穿過地面等不自然的 現象。此外,透過了控制器及更良好的設計方式,在他們的動作系統中使用者可以只操 弄少許的簡單明瞭的高階參數就可以改變動作的樣式,而不用去接觸較為低階繁瑣的參 數,而之後他們更將他們的方法進一步的應用在人類跑步的動作上。

Boulic 等人[1]在他們的研究中加入了反向機構學(Inverse Kinematics)的控制器,

來做為預防動畫角色的雙腳穿過地方或是滿足特定的限制,但因為反向機構學的運算對 材質的 Perlin 亂數(Perlin Noise)[12],使動畫程序產生的動畫看起來不會都是那麼的 機械化,生動化了動畫動作在視覺上的感受。Chen 和 Li 除了使用了反向機構學的控制

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

12

此外,他們並結合了在角色模型上標記的方式以及自行開發的反向機構學系統,使他們 的動畫成果可以套用到未知形狀的角色身上(圖 2.1),而且最終的成果也有運用到遊戲 Spore 上。

程序式動畫發展到之已將近二十多年了,而一個動畫產生程序其生產出來動畫品質 的好壞,是由其背後所使用的運動模型所決定,是一直以來不變的原則。要設計一個好 的運動模型,也一直以來是一件不容易的事。如果想要設計一個運動模型,可以產生品 筫較高的動畫,所需要考慮的細節與變化的因素就要比較多,而這些要考慮的項目會有:

運動本身的風格變化、物理學上的運動定律、使用環環可能會有的限制等。如果想要設 計出一個能使用在任何狀況下的完美的運動模型,就必須要將所有的因素給窮舉出來,

但這幾乎是不可能的一件事。但其實在大部份的狀況下,動畫應用的環境都不是完全沒 有限制的,因此我們其實是可以例舉及考慮到可能的細節以及有可能變化的因素,依然 可以在大部份的狀況下使用程序式動畫來製作出符合需求且具有彈性的動畫。

圖 2.1、將同一動作套用到不同的模型上之示意圖

開始有系統的發展了起來。在他們的研究中,他們提出了名為 Point cloud distance 的動 作相似度比較方法,並以此為基礎設計了一個自動化的程序來兩兩的比對資料庫裡所有

Zhao 和 Safonova[23]以在兩兩動作片段內插出數個新的動作的方式來增加動作圖的連接 性,並且提出了依照動作類型的不同使用不同的混成方式來連換動作,以增加混成出來 動作的品質。Safonova 和 Hodgins[16]提出了利用 A*演算法加快動作圖產生動作的時間,

以及刪減圖上多餘節點的方法。Heck 等人[6]將程序式動作引入到動作圖之中,在這個

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

15

而動作圖在概念上可以說是一種以量取質的方式,動作圖的出現就是為了透過事先 建立大量的動作擷取資料庫,來補充原先單一運動擷取資料編輯幅度有限而彈性不足的 缺點。以往以全身動作為基礎的動作圖在根本上是在事先列舉出所有有可能會用到的動 作,透過大量的動作擷取資料做為輔助來提升使用時的彈性,但其實我們是很難真正將 所有有可能的動作都給例舉出來的。舉例來說,同一個揮手的動作,我們就可能使用到 在走路時揮手、站立時揮手、跑步時揮手或是跳著揮手等。因此我們發現雖然以全身動 作為基礎的動作圖產生的動作會是最為擬真的,但這個局限也使得它無法充分的利用動 作擷取資料庫裡的資源。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

16

第三章

動作圖

動作擷取資料以離散化的方式把動作資料以連續序列的方式記錄下來,因此可以相當精 確的記錄被擷取者在錄製時的動作。但通常單一筆動作擷取資料所能提供的單一或特定 動作序列之動作種類是相當有限的。因此在實際使用動作擷取資料時,通常會利用多筆 資料,截長補短後組合成一筆在錄製時所沒有的動作。而在這個截長補短的過程通常是 以人工的方式反覆觀看不同的動作後,找出動作相似的部份後加以混合連接如圖 3.1 所 示。而動作圖則是一個將此人工連接過程自動化且有效表達的方法,而動作圖上的每一 個點都是動作擷取資料中的一個姿勢或動畫的一個畫格(Frame)。一個傳統的動作圖通 常是由數個符合應用情境的動作擷取片所建立而成。以拳擊遊戲為例來說,用來建立動 作圖的動作擷取資料就必需要有數個不同位置的出拳、對應的閃躲以及不同方向及節奏 的小跳步等。當動作圖建立完成後,使用者就可以透過路徑搜尋演算法在圖上找到一條 路徑的方式來產生所需的動作。在本章接下來的內容中我們將大略的說明動作圖的建立 流程,並指出本研究所想要解決及改進的問題。3.1 節將描述兩動作片段間的「相似度」

定義,並解釋其定義背後的想法。3.2 節將說明如何應用在上一節中定義好的「相似度」

來自動建立動作圖。3.3 節的部份將討論我們在實做動作圖的過程中所發現的問題。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

17

3.1 相似度方程式

動作圖建立的流程中,首要的問題就是動作片段間「相似度」的定義,而我們將此 種用來計算兩動作片段間「相似度」的方程式稱之為「相似度方程式(Similarity Metric)」。 在此我們以距離函式 𝐷𝑖𝑗 = 𝐷(𝑃𝑖, 𝑃𝑗) 來表示相似度方程式,其中 𝑃𝑖 和 𝑃𝑗 分別為兩個 單一的動作片段(Motion Clip,即動作擷取資料中的一個影格),而距離函式的結果越 小則代表兩動作片段越相似。直覺上的想法我們會覺得直接拿兩片段所表示的姿勢來做 比較就可以了,但這樣讓人感到略顯不足,因為一個良好的距離方程式所要考慮的應不 僅只是兩動作片段在單一片段其靜態上其姿勢的差別,更要考慮到兩動作片段在動態上

(即一小段的動作片段區間)的動作差別。而許多人也在此概念下提出了不同的方法來 實做此距離函式,其中 Lee 等人[11]提出了基於 Joint angle 的距離方程式,而兩動作片 段 i 與 j 的距離 𝐷𝑖𝑗 是基於 Joint angle 的距離方程式。其式子如下所示:

𝐷𝑖𝑗 = 𝐷(𝑃𝑖, 𝑃𝑗) = 𝑑(𝑝𝑖, 𝑝𝑗) + 𝑤𝑣𝑑(𝑣𝑖, 𝑣𝑗) (3.1)

其中 𝑑(𝑝𝑖, 𝑝𝑗) 代表兩片段關節角度上的差異,而 𝑑(𝑣𝑖, 𝑣𝑗) 則是兩片段關節速度上的差 異,而 𝑤𝑣 則是用來調整速度重要性的權重值。 𝑑(𝑝𝑖, 𝑝𝑗) 的計算方式如下所示:

圖 3.1、產生一轉換用動作來將原本兩個分開的動作結合起來之示意圖

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

18

𝑑(𝑝𝑖, 𝑝𝑗) = ||𝑝𝑖,0− 𝑝𝑗,0||2+ ∑𝑚𝑘=1𝑤𝑘||log (𝑞𝑗,𝑘−1𝑞𝑖,𝑘)||2 (3.2)

其中 𝑝𝑖,0 與 𝑝𝑗,0 分別是 root 點在第動作片段 i 與動作片段 j 時的位置,𝑞𝑖,𝑘 與 𝑞𝑗,𝑘 分別是關節 k 在第 i 個動作片段與第 j 個動作片段時的旋轉量。而在本研究中我們所 採用的是 Kovar 等人[10]的所提出的 Point Cloud Distance 方法。在他們的想法中,一般 動畫的動畫角色所顯示出來的樣子是由其內在的骨架所決定,因此這個方法認為比較兩 動作片段即是比較兩個由骨架所驅動的姿勢。綜合以上,想要計算兩動作間的距離就是 將比較兩個由骨架所驅動的點雲(Point Cloud),而在此我們將骨架的各個關節點之世 界座標所集成的點來構成我們所使用的點雲。在實際要計算動作片段 𝑃𝑖 和動作片段 𝑃𝑗 的距離 𝐷(𝑃𝑖, 𝑃𝑗) 時,需要同時將與這兩個動作片段有關的兩長度為 k 的動作區間考慮 進來,其分別是一段以 𝑃𝑖 為起點的區間 [𝑃𝑖, 𝑃𝑖+𝑘−1] 而另一段則是以 𝑃𝑗 為終點的區 間 [𝑃𝑗−𝑘+1 , 𝑃𝑗] 如圖 3.2 所示,同時我們發現:

𝐷(𝑃𝑖, 𝑃𝑗) = 𝐷(𝑃𝑗−𝑘+1, 𝑃𝑖+𝑘−1) (3.3)

意即動作片段 𝑃𝑖 與 𝑃𝑗 的相似度計算方式和 𝑃𝑗−𝑘+1 與 𝑃𝑖+𝑘−1 是一樣的。透過比較兩 動作片段區這個方法,使他們可以將動態上的動作差別考慮到方程式中。此外這個用來 計算距離的動作區間與最後用來混合產生出來做為連接用的動作是一樣的,因此根據 Mizuguchi 等人的建議我們將 k 的值設為 20(當動作的 FPS 為 60 時約為 1/3 秒)。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

19

當在兩動作區間中取出動作並轉成點雲之後,最後還有一個問題需要解決。動作一

當在兩動作區間中取出動作並轉成點雲之後,最後還有一個問題需要解決。動作一

相關文件