• 沒有找到結果。

第四章 程序式動畫產生

4.2 關鍵格之間的內插方法

4.2.3. 冗餘自由度設計

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

緩進緩出速度控制取用 到 的曲線特性如圖 4.10(a)所標示的線段,而 快進快出則取用 到 的曲線特性如圖 4.10(b)所標示的線段,再將此兩種曲線 段各切一半並排列組合成四種曲線段,分別實作於除了等速運動以外的四種速度控制器 中。所有的速度控制器都可搭配運用在關節空間內插中,使人物運動更佳的逼真擬人。

圖 4.10 緩進緩出和快進快出所使用的 sin 和 cos 曲線段

4.2.3. 冗餘自由度設計

在許多手和腳的內插動作中,我們會指定目標位置來計算出關節的位置和旋轉角度,

其中主要是使用 IK 模組來求解。對人體關節(手或腳),IK 模組中除了必須指定目標 的關節位置外,還需要指定一個冗餘(redundant)的自由度向量,以決定手肘或膝蓋的方 向,此向量我們稱為 swivel angle,此向量將決定手或腳在 3D 空間中的唯一組解。我們 將 swivel angle 設計為一組座標向量,此向量在 IK 求解時會用來計算出手肘和膝蓋的方 向,swivel angle 對人物動作的表現有很大的影響,假設在一個往前抬起右腳的動作中,

人類自然的抬腳動作膝蓋應該向前,若因為 swivel angle 指定了錯誤的方向,膝蓋向左 右或後面旋轉,那將會造成不合常理的動作產生。所以我們設計了一個模組專門用來計 算出符合常理且自然的 swivel angle,這種冗餘自由度的設計,是以 Lookup table 的方式

(a) 緩進緩出使用的 sin 曲線段 段

(b) 快進快出使用的 cos 曲線段 段

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

指定。我們將手部動作的計算定義為肩膀-手肘-手腕三個關節和兩個骨頭線段,以右手 初始動作自然垂下為例,將所有手腕能碰觸到在 3D 空間中的目標位置從肩膀關節作為 原點,從 X 軸和 Y 軸方向切開分為(a)、(b)、(c)、(d)四個區塊(圖 4.11 左),以(b)區 塊為例,從手腕能碰到離身體最遠的位置,設 swivel angle 為 ( ),當手腕的位 置靠近離身體最近的地方,將 swivel angle 設為 ( ),中間所經過的目標位置將 會沿著 X 軸,用線性內插計算出適當的 swivel angle。我們將手腕目標位置的 x 座標減 掉肩膀的 x 座標後得到 ,肩膀到手腕的長度設為 ,而 為手腕到達目標位置時 所設定的 swivel angle,內插 swivel angle 計算公式如下:

( ) ( ( ( )) ) (4.2)

(a)區塊的 swivel angle,從離身體最遠的位置設為 ( )內插到 ( ),內 插公式如下:

( ) ( ( ( ))) (4.3)

(d)區塊的 swivel angle,從離身體最遠的位置設為 ( )內插到 ( ),內插 公式如下:

( ) (( ( )) ( ( ))) (4.4)

(c)區塊的 swivel angle,從離身體最遠的位置設為 ( )內插到 ( ),內插 公式如下:

( ) ( ( ( ))) (4.5)

當手腕的目標位置超出了所能碰到的範圍時,為不合法的目標位置,我們將以肩膀到此 目標點的線段上,手腕能碰到的最遠位置也就是手伸直時手腕的位置做為新的目標位置。

開分為(a)、(b)、(c)、(d)四個區塊(圖 4.11 右),分別套用到內插公式中,(a)和(b)區塊 的 swivel angle 從最離身體最遠的位置設為 ( ),以 X 軸線為主線性內插到

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

(c)和(d)區塊的 swivel angle 從離身體最遠的位置設為 ( ),內插到 ( ),內 插公式如下:

( ) ( ( ( )) ( ( ))) (4.7)

除了內插的手部或腳部動作大多使用 Lookup table 來決定自由度外,在設計某些特 定的瑜珈姿勢時,我們會用例外處理,指定一個特定的自由度以達到動作的要求;此時,

動作的擺放不會使用 Lookup table 來做處理,因為目標姿勢不一定是符合最自然的擺放 位置。