• 沒有找到結果。

合併建立多層式動作圖

第四章 多層式動作圖之建構

4.2 多層式動作圖建立系統

4.2.4 合併建立多層式動作圖

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

34

4.2.4 合併建立多層式動作圖

到目前這個階段,我們已將各個動作圖個別建立完成了,而接下來的工作就是要將 個別建立的動作圖連接起來。在多層式動作圖的概念中,動作圖之間合併的定義是:以 在骨架上的階層關係將兩動作圖連接建立父子關係。所以如兩動作圖之間在骨架上相互 沒有階層關係則無法合併。舉例來說,如果現在有一張全身動作的動作圖與上半身動作 的動作圖,在骨架上的關係是上半身的骨架是全身的子階層,因此我們會將上半身的動 作圖做為全身的動作圖的子圖而與之連接;但如果現在除了前述的兩張圖外又加入了一 個左手動作的動作圖,左手動作在此最接近的父階層為上半身,因此會先做為到上半身 動作圖的子圖與之連接。更為複雜的連接結果如圖 4.6 所示;又如果現在分別有一左手 動作的動作圖與一右手動作的動作圖,這兩個動作在骨架階層上並無父子關係,故無法 連接產生多層式動作圖。

圖 4.6、較為複雜之多層式動作圖簡易完成示意圖,圖上的每一個圈圈皆代表一張動

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

36

取代時,必須要考慮用來取代的動作是否能與身體餘下部份的動作相容,不相容的話便 有可能會產生出有視覺上缺陷的動作,因此在取代時便會希望用來取代的動作能與原動 作有一定的相似度,而這便是我們提到的第二點「動作相似度」。基本上這兩點都可以 透過我們在尋找兩動作間適合連接的位置時所計算的動作距離來衡量,所以直覺上會想 說將兩動作相對應的動作距離值給加總加起來,如下式所示:

∑ 𝐷𝑖 𝑖,𝑖 (4.2)

其中 i 為影格的編號,𝐷𝑖,𝑖為動作 A 與動作 B 在第 i 個影格間的動作距離,計算之示意 圖如下:

如果當我們取代動作時都是使用索引值是一樣的影格來取代的話,那上面的式子是可行 的,但實際上在運作時,我們是使用動作圖來尋找轉換的方式,因此在原動作與用來取 來的動作在索引值上必定會有一個偏移量(offset)(如圖 4.8 所示),到這裡我們便出現 了我們的第二個想法,在這個想法中,我們大略的將偏移量分成數個級距,並為每一個 級距都計算一個相似度值,待使用時再依照實際的狀況來查尋所對應的偏移量的相似度 值便可。但在這但又出現了另一個問題,因此我們的動作彼此間長度都是不一樣的,且

圖 4.7、整體動作相似度初步想法計算示意圖

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

37

大多的動作都是可以自我循環(Self-Loop)的,一但動作循環後,偏移量便會產生變化,

因此這個想法也是不可行的。

綜合並檢討前述的想法後,我們將動作以每個區段大小的 s 的方式切分成數個區段,

這部份是使用了第二個想法中將偏移量分成數個級距的想法,而因為實際使用時偏移量 是會一直變化的,故需要將所有的偏移量都一同列入考量,此外,因為動作間長度不一,

因此最後需要取一個平均來使不同動作組合間的「整體動作相似度」能夠相互比較。而 最後,我們的「整體動作相似度」其定義如下:

𝑚/𝑠𝑖=1𝑛/𝑠𝑗=1𝑚𝑖𝑛𝐷𝑖,𝑗

(𝑚/𝑠)×(𝑛/𝑠) (4.2)

其中 m 與 n 分別為動作 A 與動作 B 的影格數,s 是每個區段的大小,而𝑚𝑖𝑛𝐷𝑖,𝑗為兩動 作區段中所有影格間使用式(3.4)計算出之距離的最小值。計算之示意圖如下圖 4.9 所 示:

圖 4.8、動作取代偏移量示意圖

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

38

最後我們以圖 4.1 中舉的M𝐺全身 及 M𝐺上半身 為例說明。如圖 4.1 所示,並有兩個 動作圖,上半身動作的動作圖(之後以M𝐺上半身代替)與全身動作的動作圖(之後以 M𝐺全身 代替)。如上一個例子所述,依階層關係我們會將 M𝐺上半身 做為子圖連接至 M𝐺全身 上。在連接的過程中,會發現 Walk 和 Stand 的上半身動作有被包含在M𝐺上半身中,

因此系統會個別計算 Walk 及 Stand 的上半身動作與其它所有有相連的上半身動作的「整 體動作相似度」,並將這些數值存到表格內以備之後查詢。到了這裡,會發現我們的方 法有一個很大的限制,那就是當兩個在骨架上有階層關係的動作圖合併成多層式動作圖 後,父層上的一個動作其部份動作能夠切換至子層的圖上做轉換,只有當其部份動作在 建圖時有被包含在子圖上才行,這個限制在下一章的內容中將會再進一步說明。

圖 4.9、整體動作相似度計算方式示意圖

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

39

第五章

使用多層式動作圖

由於多層式動作圖的資料結構與傳統動作圖相當的相似,所以如同使用傳統動作圖 一樣,在多層式動作圖上的任一條路徑都可以轉換成一段連續的動作。在搜尋的演算法 方面,從最簡易的隨機搜尋、最短路徑搜尋、A*或是以最佳化演算法方式都可以用來進 行搜尋。在此我們設計了一個使用多層式動作圖來產生動作的系統架構,如圖 5.1 所示。

圖 5.1、多層式動作圖動作產生架構

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

40

整個多層式動作圖動作產生架構主要由三個模組所組成,分別是動作搜尋控制(Graph Search Control)、動作路徑搜尋(Graph Path Search)以及路徑轉換(Coverting Path to Motion)。 如一開始所提到的,整個搜尋的過程被分成了兩大步驟,分別是在動作類層 級的 Global Search,以及在動作片段層級的 Local Search。而這兩大步驟與上述模組的 對應分別是 Global Search 對應到動作搜尋控制,以及 Local Search 對應到動作路徑搜尋。

其中動作路徑搜尋與路徑轉換這兩部份,與傳統動作圖產生動作的流程大略上是一樣的,

因此在此不再多做贅述。多層式動作圖在使用上與傳統動作圖最不一樣的地方,在於如 何根據使用者的需求,依照一定的規則轉換成連續且較小的搜尋指令,並正確的分配到 對應的動作圖上,而這就是我們所提到的 Global Search(也是動作搜尋控制模組)所要 做的事,因此在本章接下來的內容將整個 Global Search 所做的事進行說明。

5.1 多層式動作圖階層切換規則

經由上一章的介紹後我們得知,多層式動作圖的資料結構是由多個動作圖以階層的 方式組合而成。與傳統動作圖最不一樣的地方在於搜尋時需要在不同階層間的動作圖切 換,因此我們在沒有制定一些基本的使用規則之前較難定義搜尋工作如何進行,以合理 的產生動作。所以在建立多層式動作圖的搜尋演算法之前,制訂適當的使用規則是相當 重要的。在本節接下來的內容中,我們將進一步描述整體運作的方式,以說明多層動作 圖在不同階層動作圖之間切換的使用規則。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

41

多層式動作圖在使用時的基本流程如下:多層式動作圖階層中的每一個節點都代表 一個傳統的動作圖。以圖 5.2 之組成為例,動作圖起始在多層式動作圖的根節點(圖 5.2 中的 Full Body 動作圖)上的任一點(動作),此時只有用到單一層的動作圖,因此在使 用上如同傳統的動作圖一樣,當使用者想保留其下半身的動作並只改變其上半身的動作

圖 5.2、說明範例所做用之多層式動作圖

Walk,並且需與全身的 Walk 同步後,全身動作才轉換至 Stand。然而,在有限的時間內 要在子圖上要找到一條「剛剛好」能回到與父圖相同的動作,並與之同步的轉換路徑其 實是相當困難的。因此我們引入了兩個做法來使這個目的能夠更容易達成。其一,搜尋

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

43

時允許在一定的程度內進行動作變形;其二,在使用其一的方法後如仍無法在一定的路 徑長度內找到路徑,則強制即時混合動作出一條新的路徑來使動作能夠同步化。

5.2 動作選擇

有了前面所制訂的規則後,在開始使用多層式動作圖之前,仍有一個問題需要解決,

那就是當一部份身體的動作交由另一張子動作圖獨立運作來產生動作時,有可能子動作 圖會產生與原動作差異相當大的結果,造成產生出一個相當怪異的動作組合。因此如何 在子動作圖上找到既符合需求又與身體其餘部份搭配起來最佳的動作,是在開始使用前 所要解決的最後一個問題。在本研究中,我們提出一個以動作標籤、計算「整體動作相 似度」及使用簡易語意所組合而成的方法來解決這個問題。透過使用動作標籤與簡易的 語意,使用者得以一次指定一群相互相類似的動作,而經由計算「整體動作相似度」,

圖 5.3、動作選擇示意

5.3 Motion Script

為了方便使用者以語意方式提出對動作的要求,我們設計了一個語意式動畫腳本語 言(在本研究中稱為 Motion Script),透過簡易語意的描述,對系統下達動作的命令。

此腳本語言的 BNF 定義如圖 5.5 所示。

Full-Body Graph Motions Upper-Body Graph Motions Idle_01 IDLE Idle_01 IDLE

Idle_02 IDLE Walk_01 SWING_HAND Walk_01 WALK Walk_02 SWING_HAND Walk_02 WALK Walk_03 WAVE_HAND Walk_03 WALK,

WAVE_HAND

Music_01 Music, IDLE Music_01 Music, IDLE Talk_01 TALK, IDLE Talk_01 TALK, IDLE Talk_02 TALK Talk_02 TALK

圖 5.4 示範 Motion Script 能力用的動作之標籤設定

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

45

在腳本語言 Motion Script 中,最基礎指定動作的方式是透過 <motion-term> 來指定,

而<motion-term>又可以分為<motion-name>和<motion-tag>兩種。以閒置動作為例,在動 作圖上可能有三個不同的閒置動作其名稱分別為:Idle_01、Idle_02,且這三個動作皆具 有「IDLE」的動作標籤。使用時可以用直接指定這些動作的名稱(ex.「idle01」)的方 式,來指定所想要轉換到的特定閒置動作,而這裡的名稱就是<motion-name>。但有時 使用情境並不在意所轉換到的具有 IDLE 標籤的動作是那一個,那就可以用指定動作標 籤的指令,例如:

Motion Script>>> IDLE

以圖 5.4 之設定為例,便會選取 Idle_01 或是 Idle_02 這兩者的其中一個。但如果所指定 的標籤在根圖上並不存在呢?例如:

Motion Script>>> SWING_HAND

Motion Script>>> SWING_HAND

相關文件