# 電腦動畫與特效
# Introduction
## 什麼是動畫?
- 讓靜止物移動
- 賦予生命
- 藝術
- 歷史不久
- 發展快速
### 動畫的歷史
#### 早期動畫裝置
- 視覺暫留
- 18世紀末期 相機出現
- 19世紀初期 第一部使用攝影機所拍攝之動畫
- ...
### Disney
- 第一個將聲音加入影片
- 第一個使用故事版(storyboards)
- 第一個將寫實風格應用於動畫
- 多層場景
- 場景重複利用
- 景深效果
- 鏡頭縮放效果
- Parrallax - 鏡頭與景物有相對運動時會有遮擋、不同視角的效果
## 電腦動畫
- 使用電腦演算法、電腦技術製作動畫
- $\rightarrow$ 互動式媒體(Ex. 遊戲、VR...)
- 結合真實場景(數位特效)
### 數位製作流程
1. 故事
2. 故事版(Storyboards)
- 手稿、漫畫等(分鏡圖)加上聲音、音樂
3. 視覺發展
- 風格
4. 角色設計
5. 場景規劃
6. 建模
7. 動作生成
8. 上色/材質
9. 燈光設計
10. 渲染
- 模型變化繪製
11. 後製
### 電腦動畫技術
- 關鍵影格
- 骨架動畫
- 動力學模擬
- 行為動畫
#### 關鍵影格(Keyframing)
- 指定重要影格
- 資深者繪製
- 資淺者繪製其他影格(插植產生)
##### 控制參數
- 球體落地彈跳運動
- 3D位置
- 朝向
- 壓縮程度
- 角色
- 3D位置、朝向
- 骨架角度
- 臉部表情
- 毛髮、衣物
- 場景
- 攝影機位置、角度
- 燈光位置、角度
- 背景運動
## 骨架動畫
- 運動學
- 單純描述運動狀態(位置、速度、加速度等資訊)
- 不包含受力等外部資訊
### 正向運動學(Forward Kinematics - F.K.)
- 給定角色關節狀態(角度)$\rightarrow$算出位置
- $X=f(\theta)=\begin{bmatrix}
l_1cos\theta_1+l_2cos(\theta_1+\theta_2)
\\
l_1sin\theta_1+l_2sin(\theta_1+\theta_2)
\end{bmatrix}$
### 逆向運動學(Inverse Kinematics - I.K.)
- 給定角色位置$\rightarrow$算出關節角度
- $\theta=f^{-1}(X)=\begin{bmatrix}
\frac{-(l_2sin\theta_2)x+(l_1+l_2cos\theta_2)y}{(l_2sin\theta_2)y+(l_1+l_2cos\theta_2)x}
\\
cos^{-1}\frac{(x^2+y^2-l_1^2-l_2^2)}{2l_1l_2}
\end{bmatrix}$
## 動作捕捉(Motion Capture)
- 動作即時錄製
- 透過感測裝置追蹤被拍攝者的動作
- 紀錄座標/關節角度
- 3D重建模組
## 動作編輯(Motion Editing)
- 特定動作
- 特定演員、動作、形式
- 保留原動作的基礎上做編輯、修改
### Motion Retargeting
- 同動作換到不同人物(Ex.身材比例不同)
### Motion Graph
- 將動作(不同狀態)用graph連接
- 動作與動作轉換之間有條件限制
## 動力學模擬
- 以物理定律為基礎
- 模擬物理現象
- 重力
- 動量
- 碰撞
- 摩擦
- 流體
- 彈性
- 碎形
### 粒子系統
- 狀態
- 位置
- 速度
- 生命週期
- 顯像性質(Rendering properties)
#### 硬質物體
- 鋼體系統
- 碰撞
- 限制
#### 變形物體
- 彈性物體
- FFD
- 彈性力學
- 皮膚
- 骨架驅動
#### 布料
- 布料模擬
- 不可延伸性
- 碰撞 偵測、處理
## Dynamic+Control
### 肌腱韌帶模擬
- 由肌肉、肌腱、韌帶帶動皮膚
## 群體/行為動畫
- 定義行為模式
- 呈現群體行為
- 透過電腦產生大量個體行為
## 深度學習
## 總結
- Keyframing: interpolating between keyframes
- Skeletal animation: human and animals
- Kinematics: representing and posing a character
- Motion capture
- Motion editing
- Motion synthesis
- Dynamics and simulation:
- passive objects
- active objects with force/torque control
- Behavior animation: group and crowd
# ODE_Implicit
## Outline
- 常微分方程的穩定度
- 傳遞誤差
- 剛性系統
- 隱性法解微分方程(剛性系統)
## 常微分方程的穩定度
### 解析解
- 穩定:
- Ex. $y'=-y$
- 差距隨時間變小(系統最終趨近於同值(收斂))
- 不穩定:
- Ex. $y'=y$
- 差距隨時間變大
- 中性穩定:
- Ex. $y'=1/2$
- 差距不隨時間改變
### 數值解
- 系統發散可能原因:
1. 微分方程本身定義的系統不穩定
2. 系統穩定,但數值方法不對
### 決定穩定度與精度
- 判斷常微分方程是否穩定:套用$x'=Ax$,其中$A$為常數
- 觀察數值方法解方程的**穩定度**、**精度**
#### Ex. Euler's Method
- 應用$x'=Ax$:
- $x_{n+1}=x_n+hAx_n=(1+Ah)x_n$
- $\rightarrow x_n={(1+Ah)}^nx_0$
- 若$Re(A)$($A$的實數部)$<0$,則此系統穩定
- 若$|1+Ah|<1$,則數值解穩定
## 傳遞誤差
- 誤差在遞迴間的增減情況
### Ex. Euler's method
- Global error:propagated error + local error
- $e_{n+1}\leq (1+hK)e_n+\frac{h^2}{2}x''(\xi_n)$
- $(1+hK)e_n$:propagated error
- $\frac{h^2}{2}x''(\xi_n)$:local error
- $h$:time step,$K$:與ODE特性相關
- 截斷錯誤(Truncation error - 忽略$\frac{h^2}{2}x''(\xi_n)$項)
- $e_n\leq \frac{h^2}{2}[{(1+hK)}^{n-1}x''(\xi_n)+{(1+hK)}^{n-2}x''(\xi_1)+\cdots+x''(\xi_n)]$
- 若$|1+hK|<1$,則error不會增加
<br>
- 推廣至高階微分方程
- $e_{n+1}\leq (I+hJ_f)e_n$+(local error at step $n+1$)
- Jacobian of $f$:$J_f(i, j)=\frac{\partial f_i}{\partial x_i}$
- 若$(I+hJ_f)$的全部eigenvalues都小於1,則error不會增加
#### 穩定度分析
- Growth factor(公比:$(1+hK)$、$(I+hJ_f)$)
- 數值方法
- Step size (h)
- ODE
#### Mean Value Theorem
- $\frac{f(a)-f(b)}{a-b}=f'(s)$, $s=\frac{a+b}{2}$
## 剛性方程式
- 以ODE:$x'=-kx$(stable)為例
- $k$:剛性係數(常數)
- Ex. Spring-Damper System
- Spring force:
- 維持位置平衡性
- $F_s=-k_sx$
- Damping force:
- 維持速度平衡性
- $F_d=-cv$
- $\rightarrow ma=-cv$
- $\rightarrow \dot{v}=-\frac{c}{m}v$
- $\rightarrow$ 阻尼系統(Damper System)
- 補救:
- Small step size $\rightarrow$ 沒有效率
- Implicit methods
### Ex. Euler's method
- $x_{n+1}=x_n+hf(x_n, t_n)$
$=x_n+h(-kx_n)$
$=(1-hk)x_n$
- 若$|1-hK|<1$,則收斂
$\rightarrow h<\frac{2}{k}$
## 隱性法/隱性函數(Implicit Method)
- 上述的Euler's method 是顯性(explicit)
- 根據所知系統狀態及時間算出結果
### Euler Method
- Explicit Euler Method
- $x_{n+1}=x_n+hf(x_n, t_n)$
- Implicit (Backward) Euler Method
- $x_{n+1}=x_n+hf(x_{n+1}, t_{n+1})$
- Ex. $x'=-kx$
- $x_{n+1}=x_n+h(-kx_{n+1})$
$\rightarrow x_{n+1}=\frac{1}{(1+hK)}x_n$
- $\forall h >0$, 此系統穩定
#### Implicit Euler Method
- $x_{n+1}=x_n+hf(x_{n+1}, t_{n+1})$
- $\vec{x} =\begin{bmatrix}
x_1
\\
\vdots
\\
x_k
\end{bmatrix}$
- $\dot{\vec{x}}=\vec{f}(\vec{x})$
- $\vec{f}\in (R^k \rightarrow R^k)$
- 解系統方程式
- Root finding
- Approximate $f$ by $\frac{\partial f}{\partial x}$
##### Ex. solving a $k$th-order ODE
$\frac{d^{(k)}y}{dt}=f(y^{(k-1)},y^{(k-2)}, \cdots, y', y, t)$
- 轉換成一階微分方程構成之系統方程式
- $\dot{X}(t)=\vec{f}(X(t))$
- Implicit method
<br>
$\frac{d}{dt}X(t)=\dot{X}(t)=f(X(t))$
$X_{n+1}=X_n+hf(X_{n+1})$
One-term Tayler series: $f(X_{n+1})\approx f(X_n)+J_f(X_{n+1}-X_n)$
$X_{n+1}=X_n+h(f(X_n)+J_f(X_{n+1}-X_n))$
$X_{n+1}=X_n+{(I-hJ_f)}^{-1}hf(X_n)$
## Jacobian
- $\vec{f}(\vec{x})=\begin{bmatrix}
f_1(x_1, x_2, \cdots, x_m)
\\
f_2(x_1, x_2, \cdots, x_m)
\\
\vdots
\\
f_n(x_1, x_2, \cdots, x_m)
\end{bmatrix}$
- $\vec{f}\in (R^m \rightarrow R^n)$
- $\frac{d\vec{f}(x)}{dx}
\Rightarrow J_f=\begin{bmatrix}
\frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \cdots & \frac{\partial f_1}{\partial x_m}
\\
\frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \cdots & \frac{\partial f_2}{\partial x_m}
\\
\vdots & \vdots & \ddots & \vdots
\\
\frac{\partial f_n}{\partial x_1} & \frac{\partial f_n}{\partial x_2} & \cdots & \frac{\partial f_n}{\partial x_m}
\end{bmatrix}$
- $J_f\in R^{n\times m}$
- $\Delta f=J_f\cdot\Delta x$
- $v_f=J_f\cdot v_x$
# Particles
## 粒子
- 點質量物體,沒有體積,沒有朝向
- 特性
- 質量
- 位置
- 速度
- 外力
- 生命週期
- 顯像性質
- ...
- 粒子資訊
- 位置、速度、外力、質量
- 2nd order ODE
- $\ddot{x}=\frac{f}{m}$
- 1st order ODEs
- $\dot{x}=v$
- $\dot{v}=\frac{f}{m}$
### 粒子系統
- 多粒子集合
- 描述
- 氣體
- 火焰
- 水/流體
- 變形曲面(Ex. 布料)
- 彈性物體
- 群體行為
<br>
1. Particle System $\rightarrow$ Solver(ODE Solver)
- 狀態
- 微分
2. Solver $\rightarrow$ Particle System
- $\Delta x$、$\Delta v$、$f$(Solver 計算)
3. Paricle System 更新粒子資訊
## Force
### Spatial Forces
- 與該粒子附近區域(local region)的粒子有關
- 空間資料結構能使計算變簡便
### Unary Forces
- 只與該粒子本身有關係
- Ex.
- 重力:$f=mg$
- 黏滯力:$f=-k_dv$
- 風場:$f=kv_{wind}$
### n-ary Forces
- 與 n 個粒子有關係
- Ex.
- binary forces - spring and damper
- $f_a=-k_s(|x_a-x_b|-l_0)\frac{x_a-x_b}{|x_a-x_b|}-k_d(\frac{(v_a-v_b)\cdot()}{|x_a-x_b|})$
#### Spring Force(彈簧力)
- 粒子位於比自然長度更**遠**的位置,彈簧力需要將它拉回
- $\Delta l=|\vec{x}_a-\vec{x}_b|-r>0$,$r$:rest length(自然長度)
- $\vec{f}_a=-(k\Delta l)\vec{l}, k>0$
- $\vec{l}=\frac{\vec{x}_a-\vec{x}_b}{|\vec{x}_a-\vec{x}_b|}$
- 粒子位於比自然長度更**近**的位置,彈簧力需要將它推出
- $\Delta l=|\vec{x}_a-\vec{x}_b|-r<0$
- $\vec{f}_a=-(k\Delta l)\vec{l}$,$k>0$
- $\rightarrow \vec{f}_a=-k_s(|\vec{x}_a-\vec{x}_b|-r)\vec{l}$,$k_s>0$
$=\vec{f}_a=-k_s(|\vec{x}_a-\vec{x}_b|-r)\frac{\vec{x}_a-\vec{x}_b}{|\vec{x}_a-\vec{x}_b|}$
#### Damper Force(阻尼力)
- 速度維持於平衡質的彈簧
- 兩粒子遠離,阻尼力須將其拉回
- $\Delta v=(\vec{v}_a-\vec{v}_b)\cdot\vec{l}>0$
- $\vec{f}_a=-(k\Delta v)\vec{l}$,$k>0$
- 兩粒子接近,阻尼力須將其推開
- $\Delta v=(\vec{v}_a-\vec{v}_b)\cdot\vec{l}<0$
- $\vec{f}_a=-(k\Delta v)\vec{l}$,$k>0$
- $\rightarrow \vec{f}_a=-k_d((\vec{v}_a-\vec{v}_b)\cdot\vec{l})\vec{l}$,$k_d>0$
$=-k_d\frac{(\vec{v}_a-\vec{v}_b)\cdot(\vec{x}_a-\vec{x}_b)}{|\vec{x}_a-\vec{x}_b|}\frac{(\vec{x}_a-\vec{x}_b)}{|\vec{x}_a-\vec{x}_b|}$
##### Notes
- 根據能量守恆定律,若粒子系統僅有質量與彈簧力,當系統受到外力時,即使外力已消失,系統會無限震盪(沒有能量消散)
- 阻尼力/黏滯力:抵抗運動
- 外力消失後,讓粒子系統緩緩靜止
- 建議:至少要有一點阻尼力
- 也不要太多,以免粒子系統反應性不佳
## 碰撞偵測與反應
### 碰撞偵測
- 判斷粒子與平面是否有發生碰撞
- 靠近平面
- $N\cdot(x-p)<\varepsilon$
- $x$:粒子位置
- $p$:平面上任意點
- $N$:平面法向量,$|N|=1$
- 朝向平面前進
- $N\cdot v<0$
### 碰撞反應
- 正確:倒退回碰撞發生的時間點
- continuous collision detection
- 不太精確,但較簡單的替代方案
- discrete collision detection
- 發生穿刺後再做 collision response
<br>
假設沒有摩擦力
- 碰撞前
- $v=v_N+v_T$
- 碰撞後
- $v'=-k_rv_N+v_T$
- $k$:coefficient of restitution
## Contact
- 碰到平面後沿著平面移動
- 靠近平面
- $|N\cdot (x-p)|<\varepsilon$
- 沿平面移動
- $|N\cdot v|<\varepsilon$
- 受力與平面法線反方向
- $N\cdot f<0$
### 接觸力
- 外力往平面方向施壓
- $f^c=-(N\cdot f)N$,$N\cdot f<0$
- 外力遠離平面方向
- $f^c=0$,$N\cdot f>0$
- (動)摩擦力
- $f^f=-k_f(-N\cdot f)v_t$,$N\cdot f<0$
# ConstrainedParticles
## Outline
- 限制力
- 單一限制條件
- 多重限制條件
- 參數化限制
## 簡單例子
- 珠子在圓形軌道上運動
- 可以自由移動,但不能離開軌道
### Penalty Constraints
- 運用彈簧力
- 問題:(for $k$)
- 太弱會導致珠子容易脫離軌道
- 太強會變成剛性系統
## Constraint Force(限制力)
- 合法加速度?
- 跟速度($v$)、法向量($n$)有關
- 計算出 $\hat{f}$ 使 $f+\hat{f}$ 只會產生合法加速度
- $\hat{f}$:抵銷會造成非法加速度的力
### Single implicit constraint
- 限制條件
- $C(x)=|x|-r=0$
- 參數限制
- $x=\begin{bmatrix}
rcos\theta
\\
rsin\theta
\end{bmatrix}$
#### 合法加速度
- 合法位置($r=1$)
- $C(x)=\frac{1}{2}(x\cdot x-1)$
- 合法速度
- $\dot{C}(x)=x\cdot \dot{x}=0$
- 合法加速度
- $\ddot{C}(x)=\dot{x}\cdot \dot{x}+x\cdot \ddot{x}=0$
#### 合法條件
- 起始滿足合法位置、速度
- $C(x)=0$
- $\dot{C}(x)=0$
- 確定加速度合法
- $\ddot{C}(x)=0$
#### 限制力
- 合法加速度條件
- $\ddot{C}(x)=\dot{x}\cdot \dot{x}+x\cdot \ddot{x}=0$
- $\ddot{x}=\frac{f+\hat{f}}{m}$
- $\rightarrow \ddot{C}(x)=\dot{x}\cdot \dot{x}+x\cdot\frac{f+\hat{f}}{m}=0$
- $\rightarrow \hat{f}\cdot x=-f\cdot x-m\dot{x}\cdot\dot{x}$
<br>
$\hat{f}\cdot x=-f\cdot x-m\dot{x}\cdot\dot{x}$
- 一個方程式,兩個未知數
- 還需要一個條件
##### Virtual Work(虛功)
- 加上限制力不改變系統總能量(被動)
- 動能:$T=\frac{1}{2}m\dot{x}\cdot\dot{x}$
- $\dot{T}=\frac{1}{2}m(\ddot{x}\cdot\dot{x}+\dot{x}\cdot\ddot{x})=m\dot{x}\cdot\ddot{x}=\dot{x}(f+\hat{f})$
- $\dot{T}$:virtual work
- $\hat{f}\cdot\dot{x}=0$,$\forall\dot{x}\in\begin{Bmatrix}\dot{x}|x\cdot\dot{x}=0\end{Bmatrix}$(合法速度的集合)
- $\rightarrow \hat{f}=\lambda x$
- $\hat{f}\cdot x=-f\cdot x-m\dot{x}\cdot\dot{x}$ 代入
- $\rightarrow \lambda =\frac{-f\cdot x-m\dot{x}\cdot\dot{x}}{x\cdot x}$
##### Geometric Interpretation
- 限制力
- $\hat{f}=\lambda x=\frac{-f\cdot x-m\dot{x}\cdot\dot{x}}{x\cdot x}x$
- 若系統速度為0
- $\rightarrow \hat{f}=-\frac{f\cdot x}{x\cdot x}x$
- 只留下切線方向上的力
## 推廣至粒子系統
- 推導粒子系統的限制力
### 粒子限制
- Paritcle i:
- $\vec{X}_i=\begin{bmatrix}
\vec{x}_i
\\
\vec{v}_i
\end{bmatrix}$
- 外力 for particle i:
- $\vec{f}_i$
- Particle system:
- $Y=\begin{bmatrix}
X_1
\\
X_2
\\
\vdots
\\
X_n
\end{bmatrix}$,$Y\in R^{6n}$
- $6$:$x$、$v$、$f$、$m$、$\Delta x$、$\Delta v$
- 限制條件
- 每個都是function:$C_i(x_1, x_2, \cdots)$
- $C_i(x_1, x_2, \cdots)=0$,$\forall i$
- $\frac{\partial C_i}{\partial x}$,$\forall i$
### 運動方程
- n 個粒子的系統
- $\begin{bmatrix}
\ddot{x}_1
\\
\ddot{x}_2
\\
\vdots
\\
\ddot{x}_n
\end{bmatrix}=\begin{bmatrix}
\frac{1}{m_1} & 0 & \cdots & 0
\\
0 & \frac{1}{m_2} & \ddots & \vdots
\\
\vdots & \ddots & \ddots & 0
\\
0 & \cdots & 0 & \frac{1}{m_n}
\end{bmatrix}\begin{bmatrix}
f_1
\\
f_2
\\
\vdots
\\
f_n
\end{bmatrix}$
- $\rightarrow \ddot{q}=WQ$,$W\in R^{6n\times 6n}$,$Q\in R^{6n\times 1}$
#### 限制方程式
- 系統的限制方程
- $C(q)=0$,$C\in R^{3m}$
- $\dot{C}=\frac{\partial C}{\partial q}\frac{dq}{dt}=J\dot{q}=0$,$J$:Jacobian
- $\ddot{C}=\dot{J}\dot{q}+J\ddot{q}=0$
- 計算合法加速度
- $\ddot{q}=W(Q+\hat{Q})$,$Q$:Constraint forces
- $\rightarrow \ddot{C}=\dot{J}\dot{q}+JW(Q+\hat{Q})=0$
- $\rightarrow JW\hat{Q}=-\dot{J}\dot{q}-JWQ$
#### Principle of Virtual Work
- 確保限制力不會增加功
- $\hat{Q}\dot{q}=0$,$\forall \dot{q}\in \begin{Bmatrix}\dot{q}|J\dot{q}=0\end{Bmatrix}$
- 向量須滿足
- $\hat{Q}=J^T\lambda$
### 限制力的兩個條件
- 合法加速度
- $JW\hat{Q}=-\dot{J}\dot{q}-JWQ$
- 虛功的原則
- $\hat{Q}=J^T\lambda$
- $\rightarrow JWJ^T\lambda =-\dot{J}\dot{q}-JWQ$
#### Constraint Gradients
- $\hat{Q}=J^T\lambda$
- Normal of $C_1$:$\frac{\partial C_1}{\partial q}$
- Normal of $C_m$:$\frac{\partial C_m}{\partial q}$
- $J=\begin{bmatrix}
\frac{\partial C_1}{\partial q_1} & \frac{\partial C_1}{\partial q_2} & \cdots & \frac{\partial C_1}{\partial q_n}
\\
\frac{\partial C_2}{\partial q_1} & \frac{\partial C_2}{\partial q_2} & \cdots & \frac{\partial C_2}{\partial q_n}
\\
\vdots & \vdots & \ddots & \vdots
\\
\frac{\partial C_m}{\partial q_1} & \frac{\partial C_m}{\partial q_2} & \cdots & \frac{\partial C_m}{\partial q_n}
\end{bmatrix}$
- 每一列都是該平面的法向量
<br>
- 合法狀態:平面相交
- $\hat{Q}=J^T\lambda \rightarrow \sum_{i=1}^{m}\lambda_i\frac{\partial C_i}{\partial q}$
- 限制力所作之功為 0
##### Lagrange Multiplier
[Wikipedia](https://zh.wikipedia.org/wiki/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E4%B9%98%E6%95%B0)
- Maximize $f(x, y)$
- Sub. to $g(x, y)=0$
## 參數化限制
$x=\begin{bmatrix}
rcos\theta
\\
rsin\theta
\end{bmatrix}$
- 限制
- $\dot{x}=\frac{\partial x}{\partial\theta}\frac{d\theta}{dt}=T\dot{\theta}$
- $T=\frac{\partial x}{\partial\theta}$
- $\ddot{x}=\dot{T}\dot{\theta}+T\ddot{\theta}=\frac{f+\hat{f}}{m}$
- Degree of freedom:$1$
- Solve for $\ddot{\theta}$
- 兩邊同乘$T$
- Virtual work principle:$\hat{f}\cdot T=0$
- $\rightarrow \ddot{\theta}=\frac{T\cdot \frac{f}{m}-T\cdot\dot{T}\dot{\theta}}{T\cdot T}$
### Lagrangian Dynamics
- 參數空間下描述物體運動狀態的動力學
- **並非**於不受限制的空間中建立運動方程
- **而是**受限制空間內用額外參數($u$)描述系統運動狀態$\rightarrow$解參數空間加速度($\ddot{u}$)
### 優劣
- 優點:
- 運動自由度較少
- 限制條件一定會滿足
- 缺點:
- 很難找到好的參數化函數
- 難以結合限制條件
# RigidBodyDynamics
## 剛體運動模擬
- 粒子系統:只有考慮到每個粒子單獨運動和互動間的關係
- 實心物體運動
- 粒子系統不足
### 問題
- 無限制條件系統(free space)
- 有限制條件系統
- 碰撞偵測、接觸
- 運算效率
- 剛體:passive object
- 受到外力才會有運動
## 剛體觀念
- 移動 $\rightarrow$ 轉動
- 位置 $\rightarrow$ 朝向
- 線性速度 $\rightarrow$ 角速度
- 質量 $\rightarrow$ 轉動慣量
- 線性動量 $\rightarrow$ 角動量
- 力 $\rightarrow$ 力矩
- 粒子系統:粒子狀態
- $Y(t)=\begin{bmatrix}x(t)\\ v(t) \end{bmatrix}$
- $\frac{d}{dt}Y(t)=\begin{bmatrix} v(t) \\ \frac{f(t)}{m} \end{bmatrix}$
- 剛體系統:剛體狀態
- $Y(t)=\begin{bmatrix}x(t) \\ ? \\ v(t) \\ ? \end{bmatrix}$
### 位置 vs. 朝向
- $x(t)=\begin{bmatrix} x(t) \\ y(t) \\ z(t) \end{bmatrix}$
- $R(t)=\begin{bmatrix}
r_{xx}(t) && r_{yx}(t) && r_{zx}(t)
\\
r_{xy}(t) && r_{yy}(t) && r_{zy}(t)
\\
r_{xz}(t) && r_{yz}(t) && r_{zz}(t)
\end{bmatrix}$
- $x(t)$(位移)$\rightarrow$$R(t)$(朝向改變量:旋轉):body space $\rightarrow$ world space
- $r_i(t)=x(t)+R(t)r_{0i}$
- $x(t)$:world space 中 body space 的原點座標
- $r_{0i}$:body space 的座標
- 假設剛體為均勻密度:$x(t)$為質心
- 以$x$軸單位方向向量($(1, 0, 0)$)為例
- $R(t) \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix}
=\begin{bmatrix}
r_{xx}(t) && r_{yx}(t) && r_{zx}(t)
\\
r_{xy}(t) && r_{yy}(t) && r_{zy}(t)
\\
r_{xz}(t) && r_{yz}(t) && r_{zz}(t)
\end{bmatrix} \begin{bmatrix}
1 \\ 0 \\ 0 \end{bmatrix}
=\begin{bmatrix}
r_{xx}(t) \\ r_{xy}(t) \\ r_{xz}(t)
\end{bmatrix}$
- $R$的第一行
- $R(t)$代表在時間 t,world space 內$x, y, z$軸方向
- $x(t)$:位置,$R(t)$:朝向
#### Body Space vs. World Space
- Body space:(= object space = local space)
- 物體本身的座標系統
- 固定、不會改變的空間
- 剛體內部各點的相對位置是固定的
- 幾何中心=body space 的原點
- World space:
- 多物體的共同座標系統
- 全域性
### 線性速度 vs. 角速度
- 線性速度
- 單位時間內的位移量
- $v(t)=\frac{dx(t)}{dt}$
- 角速度
- $x(t)$、$R(t)$兩者獨立
- 固定質心位置的情況下,任何移動都是轉動造成的
- 將線性速度與角速度分開來看
#### 角速度
- $\omega(t)$:三維向量,描述角速度
- $\left\{\begin{matrix}
\dot{r}(t)\perp b
\\
\dot{r}(t)\perp \omega(t)
\\
|\dot{r}(t)|=|b||\omega(t)|
\end{matrix}\right.$
- $\rightarrow \dot{r}(t)=\omega(t)\times b=\omega(t)\times b+\omega(t)\times a=\omega(t)\times r(t)$
- $\because \omega(t)\parallel a$
- $\therefore\omega(t)\times a=0$
- $R(t)$根據時間,行變換
- $\dot{R}(t)=\begin{bmatrix}
\omega(t)\times\begin{pmatrix} r_{xx}(t) \\ r_{xy}(t) \\ r_{xz}(t) \end{pmatrix}
&&
\omega(t)\times\begin{pmatrix} r_{yx}(t) \\ r_{yy}(t) \\ r_{yz}(t) \end{pmatrix}
&&
\omega(t)\times\begin{pmatrix} r_{zx}(t) \\ r_{zy}(t) \\ r_{zz}(t) \end{pmatrix}
\end{bmatrix}$
- 簡化
- $\dot{R}(t)=\omega(t)^{*}R(t)=\begin{pmatrix}
0 && -\omega_z && \omega_y
\\
\omega_z && 0 && \omega_y
\\
-\omega_y && \omega_x && 0
\end{pmatrix}\begin{pmatrix}
r_{xx}(t) && r_{yx}(t) && r_{zx}(t)
\\
r_{xy}(t) && r_{yy}(t) && r_{zy}(t)
\\
r_{xz}(t) && r_{yz}(t) && r_{zz}(t)
\end{pmatrix}$
##### 簡化矩陣
- $a\times b =\begin{pmatrix}
a_yb_z-b_ya_z
\\
-a_xb_z+b_xa_z
\\
a_xb_y-b_xa_y
\end{pmatrix}$
- $a \times b=a^{*}b=\begin{pmatrix}
0 && -a_z && a_y
\\
a_z && 0 && -a_x
\\
a_y && a_x && 0
\end{pmatrix}\begin{pmatrix}
b_x \\ b_y \\ b_z \end{pmatrix}$
### Particles
- 剛體:由大量小粒子組成
- 第 $i$ 個粒子在時間 $t$ 時在 world space 的位置:
- $r_i(t)=x(t)+R(t)r_{0i}$
- $x(t)$:world space 中 body space 的原點座標
- $r_{0i}$:在 body space 內的座標
- $\frac{d}{dt}r_i(t)=\frac{d}{dt}x(t)+\frac{d}{dt}R(t)r_{0i}$
- $\rightarrow \dot{r}_i(t)=\dot{x}(t)+\omega(t)^{*}R(t)r_{0i}$
$=v(t)+\omega(t)^{*}(R(t)r_{0i}+x(t)-x(t))$
$=v(t)+\omega(t)^{*}(r_i(t)-x(t))$
- $v(t)$:線性速度
- $\omega(t)^{*}(r_i(t)-x(t))$:角速度
### 質量 vs. 慣量
#### 質量
- 第 $i$ 個物體的質量:$m_i$
- $M=\sum_{i=1}^{N}m_i$
- 質心
- $COM=\frac{\sum_{i=1}^{N}m_ir_i(t)}{M}$
- $COM \in \mathbb{R}^3$
- $COM$ in body space:$(0, 0, 0)$
#### 轉動慣量
- 質量相對於質心的分布狀況
- $I(t)=\sum_{i=1}^{N}\begin{pmatrix}
m_i({r^{'}}^2_{iy}+{r^{'}}^2_{iz}) && -m_ir^{'}_{ix}r^{'}_{iy} && -m_ir^{'}_{ix}r^{'}_{iz}
\\
-m_ir^{'}_{iy}r^{'}_{ix} && m_i({r^{'}}^2_{ix}+{r^{'}}^2_{iz}) && -m_ir^{'}_{iy}r^{'}_{iz}
\\
m_ir^{'}_{iz}r^{'}_{ix} && m_ir^{'}_{iz}r^{'}_{iy} && m_i({r^{'}}^2_{ix}+{r^{'}}^2_{iy})
\end{pmatrix}$
- $r^{'}_i=r_i(t)-x(t)$
- $I(t)$ 跟朝向有關,與絕對位置無關
- 累加 $\rightarrow$ 積分
- 會隨著物體轉動而改變
- 但在 body space 是定值
##### 推導
- $I(t)=\sum_{i=1}^{N}m_ir^{'T}_ir^{'}_i\begin{pmatrix}
1 && 0 && 0 \\ 0 && 1 && 0 \\ 0 && 0 && 1 \end{pmatrix} - m_i\begin{pmatrix}
{r^{'}}^2_{ix} && r^{'}_{ix}r^{'}_{iy} && r^{'}_{ix}r^{'}_{iz}
\\
r^{'}_{iy}r^{'}_{ix} && {r^{'}}^2_{iy} && r^{'}_{iy}r^{'}_{iz}
\\
r^{'}_{iz}r^{'}_{ix} && r^{'}_{iz}r^{'}_{iy} && {r^{'}}^2_{iz}
\end{pmatrix}$
$=\sum_{i=1}^{N}m_i({r^{'}}^T_ir^{'}_i1-r^{'}_i{r^{'}}^T_i)$
##### Body Space 內的轉動慣量
- $r^{'}_i(t)=r_i(t)-x(t)=R(t)r_{0i}$
- $R(t){R(t)}^T=1$
- $\rightarrow I(t)
=\sum_{i=1}^{N}m_i({r^{'}}^T_ir^{'}_i1-r^{'}_i{r^{'}}^T_i)$
$=\sum^{N}m_i[{r_{0i}}^Tr_{0i}R(t){R(t)}^T-R(t)r_{0i}{r_{0i}}^T{R(t)}^T]$
$=R(t)\sum^{N}m_i[{r_{0i}}^Tr_{0i}1-r_{0i}{r_{0i}}^T]{R(t)}^T=R(t)I_{body}{R(t)}^T$
- $I_{body}$:body space 內的轉動慣量
### 力 vs. 力矩
### 力
- $F(t)=\sum f_i(t)$
### 力矩
- $\tau(t)=\sum (p_i(t)-x(t))\times f_i(t)$
## 剛體運動方程 :star:
- $\frac{d}{dt}Y(t)=\frac{d}{dt}\begin{pmatrix} x(t) \\ R(t) \\ Mv(t) \\ I(t)\omega(t) \end{pmatrix}=\begin{pmatrix} v(t) \\ \omega(t)\times R(t) \\ F(t) \\ \tau(t) \end{pmatrix}=\begin{pmatrix} v(t) \\ \omega(t)^{*}R(t) \\ F(t) \\ \tau(t) \end{pmatrix}$
- $Mv(t)$:線性動量
- $I(t)\omega(t)$:角動量
### 實作上
- 四元數 取代 矩陣
- Green's Theorem 計算轉動慣量
- 幾何形狀不規則的剛體
- [C code](http://www.cs.berkeley.edu/~jfc/mirtich/massProps.html)
# ClothAnimation
## 布料
### 布料模擬
#### 需求
- 角色動畫
- 遊戲
- 服裝設計
- 布料設計
#### 挑戰
- 真實感
- 互動性
- 穩定性
- 複雜性
- 碰撞偵測/處理
### 布料模型
- 布料工程
- 機械性質量測
- 工業應用
- 電腦圖學
- 模擬布料形狀、型變
- 幾何方法 $\rightarrow$ 物理模擬
#### CG 布料模擬
- 幾何方法(離散)
- 連續數值
- 粒子系統
##### 粒子系統(Particle-based)
- 紡織線
- 粒子組成線段
###### 靜態 Breen et al.(1994)
- 物體形狀符合最小能量
- Energy-based model
- $U_{total_i}=U_{repel_i}+U_{stretch_i}+U_{bend_i}+U_{trellis_i}$
- 透過量測系統(Kawabata system)取得布料的材料系數
- 伸張測試、簡諧力
###### 推廣到動態
- 利用彈簧
- 直線方向型變(Stretch)
- 簡諧方向型變(Shearing)
- 彎曲(Bending)
- Provot(1995)
- 加入彈簧系統
- 
### Baraff and Witkin(1998)
- [Large steps in cloth simulation](https://dl.acm.org/doi/10.1145/280814.280821)
- SIGGRAPH'98
- 布料模擬
- Implicit integration
- Large time step、faster simulations
- 三角形網格
- 利用 Jocaboian 的稀疏性
### 牛頓第二運動定律
- n 個粒子
- $\ddot{x}=M^{-1}f(x, \dot{x})$
- $x$:$3n\times 1$
- $M$:$3n\times 3n$
- Diagonal matrix
- $M_{i, j}$:
- $i\neq j$:$0$
- $i=j$:$\begin{bmatrix}
\frac{1}{m_i} && 0 && 0
\\
0 && \frac{1}{m_i} && 0
\\
0 && 0 && \frac{1}{m_i}
\end{bmatrix}$
#### 微分方程
- $\frac{d}{dt}\begin{pmatrix} x \\ v \end{pmatrix}=\begin{pmatrix} v \\ M^{-1}f(x, v) \end{pmatrix}$
##### 顯性 Euler method
- $\begin{pmatrix} \Delta x \\ \Delta v \end{pmatrix}=h\begin{pmatrix} v_0 \\ M^{-1}f(x_0, v_0) \end{pmatrix}$
##### 隱性 Euler method
- $\begin{pmatrix} \Delta x \\ \Delta v \end{pmatrix}=h\begin{pmatrix} v_0+\Delta v \\ M^{-1}f(x_0+\Delta x, v_0+\Delta v) \end{pmatrix}$
###### 近似 $f$ 函數(Taylor Series)
- $f(x_0+\Delta x, v_0+\Delta v)=f(x_0, v_0)+\frac{\partial f}{\partial x}\Delta x+\frac{\partial f}{\partial v}\Delta v$
- $\rightarrow \begin{pmatrix} \Delta x \\ \Delta v \end{pmatrix}=h\begin{pmatrix} v_0+\Delta v \\ M^{-1}(f_0+\frac{\partial f}{\partial x}\Delta x+ \frac{\partial f}{\partial v}\Delta v) \end{pmatrix}$
- $\rightarrow (I-hM^{-1}\frac{\partial f}{\partial v}-h^2M^{-1}\frac{\partial f}{\partial x})\Delta v=hM^{-1}(f_0+h\frac{\partial f}{\partial x}v_0)$
##### 解方程式
- 彈簧數目少:容易
- 複雜模型:困難
- 能量 $\rightarrow$ 計算力
- $E(x)$
- $f=-\frac{\partial E}{\partial x}$
- 解釋:
- $w=f_e\cdot x \rightarrow f_e=\frac{\partial w}{\partial x}$
- $f_i=-f_e=-\frac{\partial U}{\partial x}$
- $w$:功
- $f_e$:外力
- $x$:位移量
- $f_i$:內部力(維持形狀)
- $U$:系統位能
- 問題:阻尼力無法這樣得出
<br>
- $E_C(x)=\frac{k}{2}{C(x)}^TC(x)$
- $E_C(x)$:純量
- $C(x)$:需要滿足的(形狀)限制條件,$C(x)=0$
- $f=-\frac{\partial E_C}{\partial x}=-k\frac{\partial {C(x)}^T}{\partial x}C(x)$
- $f \in \mathbb{R}^{3n\times 1}$
- $\frac{\partial {C(x)}^T}{\partial x} \in \mathbb{R}^{m\times 3n}$
- $C(x) \in \mathbb{R}^{m\times 1}$
- $\frac{\partial f_i}{\partial x_j}=-k\begin{pmatrix} \frac{\partial {C(x)}^T}{\partial x_i}\frac{\partial C(x)}{\partial x_j}+\frac{{\partial}^2{C(x)}^T}{\partial x_i \partial x_j}C(x) \end{pmatrix}$
### 三角網格模型
- 線性型變、形狀角度變化
- $C(x)$:Contraint Equation
#### 基本概念
- 布料型變 $\rightarrow$ 曲面
- 測量型變:$\mathbb{R^2}\rightarrow \mathbb{R}^3$
- $w_u=\frac{\partial w}{\partial u}$
- $w_v=\frac{\partial w}{\partial v}$
#### 伸展/壓縮
- $(\Delta x, \Delta y, \Delta z)\rightarrow (\Delta u, \Delta v)$
- Taylor Series
- $w(u+\Delta u, v+\Delta v)=\begin{bmatrix}
w_x(u+\Delta u, v+\Delta v)
\\
w_y(u+\Delta u, v+\Delta v)
\\
w_z(u+\Delta u, v+\Delta v)
\end{bmatrix}\approx w(u, v)+J_w(u, v)\begin{bmatrix} \Delta u \\ \Delta v \end{bmatrix}$
- $J_w(u, v)=\begin{bmatrix}w_u && w_v\end{bmatrix}$
- $\Delta x=\begin{bmatrix} \Delta x \\ \Delta y \\ \Delta z \end{bmatrix}=w(u+\Delta u, v+\Delta v)-w(u, v)\approx J_w(u, v)\begin{bmatrix} \Delta u \\ \Delta v \end{bmatrix}=\begin{bmatrix}w_u && w_v\end{bmatrix}\begin{bmatrix} \Delta u \\ \Delta v \end{bmatrix}$
- 先看兩邊(三角形網格)
- $\Delta x_1=w_u\Delta u_1+w_v\Delta v_1$
- $\Delta x_2=w_u\Delta u_2+w_v\Delta v_2$
- $\rightarrow \begin{bmatrix}w_u && w_v\end{bmatrix}=\begin{bmatrix}\Delta x_1 && \Delta x_2\end{bmatrix}{\begin{bmatrix}\Delta u_1 && \Delta u_2 \\ \Delta v_1 && \Delta v_2\end{bmatrix}}^{-1}$
### 力與能量
- 線性力(Stretch Forces)
- $C(x)=a\begin{pmatrix}\parallel w_u(x) \parallel -b_u \\ \parallel w_v(x) \parallel -b_v\end{pmatrix}$
- $a$:三角形範圍
- $b$:rest length
- 簡諧方向型變(Shear Forces)
- $C(x)=aw_u(x)^Tw_v(x)$
- 彎曲(Bending Forces)
- $C(x)=\theta$
#### 阻尼力(Damping Forces)
- $\frac{dE}{dt}={\frac{\partial E}{\partial x}}^T\frac{dx}{dt}=0$
- 在平衡點(速度最快)時 $E$ 最小
- 非阻尼力要求
- $d=-k_d\frac{\partial C(x)}{\partial x}\dot{C}(x)$
- $\frac{\partial C(x)}{\partial x}$:力的方向
- $\dot{C}(x)$:速度
- 方向與彈性力(spring force)方向一致
### 限制
- penalty method
- 剛體系統
- Lagrange multipliers(虛功)
- 限制力
- 參數化限制(Parametric constraint/reduced coordinate/general coordinate)
- 修正質量矩陣
#### 加速度為0
- 例:z 軸加速度為 $0$
- $\ddot{x}_i=\begin{pmatrix} \frac{1}{m_i} && 0 && 0 \\ 0 && \frac{1}{m_i} && 0 \\ 0 && 0 && 0 \end{pmatrix} f_i$
- $\rightarrow \ddot{x}_i=W_{ii}f_i$
- $W_{ii}=\frac{1}{m_{ii}}S_i \in \mathbb{R}^{3\times 3}$
### 非軸上的 $0$ 加速度
- 對於第 $i$ 個粒子
- $\ddot{x}_i=W_{ii}f_i$
- $W_{ii}=\frac{1}{m_{ii}}S_i \in \mathbb{R}^{3\times 3}$
- $S_i$:
- $I$:if ndof($i$)=$3$
- $(I-p_i{p_i}^T)$:if ndof($i$)=$2$
- $(I-p_i{p_i}^T-q_i{q_i}^T)$:if ndof($i$)=$1$
- $0$:if ndof($i$)=$0$
- $\parallel p_i \parallel = \parallel q_i \parallel =1$,$p_i \perp q_i$
#### 驗證 $S_i=(I-p_i{p_i}^T)$
- $f_i=\alpha p_i$
- $\ddot{x}_i=W_{ii}f_i=\frac{1}{m_i}(I-p_i{p_i}^T)\alpha p_i$
- $\parallel p_i \parallel =1={p_i}^Tp_i$
- $\rightarrow =\frac{\alpha}{m_i}(p_i-p_i{p_i}^Tp_i)=0$
### 任意速度限制條件
- 無限制
- $(I-hM^{-1}\frac{\partial f}{\partial v}-h^2M^{-1}\frac{\partial f}{\partial x})\Delta v=hM^{-1}(f_0+h\frac{\partial f}{\partial x}v_0)$
- 加限制
- $(I-hW\frac{\partial f}{\partial v}-h^2W\frac{\partial f}{\partial x})\Delta v=hW(f_0+h\frac{\partial f}{\partial x}v_0)+z$
## 其他方法
### Edberhardt et al.(1995.)
- 特殊材質布料
- 編織物
- 當作實心物體作顯像
### 避免剛性
- 避免使用線性彈簧模擬
- 改用非線性彈簧(力與位移量關係非線性)
- 互動性應用
### Ko, Choi(SIGGRAPH 2002)
- 布料特性
- 對壓縮抵抗力弱(容易彎曲)
- 對延展、伸張抵抗力強
- 用彈簧連結
- 彈簧的 $k$ 值很大(剛性強)
- 需要壓縮力夠強才能產生非平面方向的力
- 梁柱
- 受到垂直方向的力不太會產生彎曲型變
- 力大於一定程度就為崩潰(產生型變)
- 用非線性模型描述彎曲/壓縮力
- 伸長量比例 - 力
### Constrained Lagrange Mechanics
- 布料的延展性
- Augment Lagrange equation with constraints
- $L(x, v)=\frac{1}{2}v^TMv-V(x)-C(x)^T\lambda$
- $C(x)$:Constraints
- $\lambda$:Lagrange Multipliers
- $V(x)$:Potential energy
- Constrained dynamics equation
- $M\dot{v}+\bigtriangledown V(x)+\bigtriangledown C(x)^T\lambda =0$
- $C(x)=0$
#### Lagrange Mechanics
- 牛頓力學
- 3D 座標(向量)
- 座標轉換:困難
- 能量描述物體運動(純量)
- 座標轉換:較容易
- generalized coordinate
- $\rightarrow$ 等效的 $Lagrangian$
- $L(x, v)=$ Kinetic Energy $-$ Potential Energy
$=T(x, v)-V(x, v)$
- $\frac{d}{dt}\frac{\partial L}{\partial v}-\frac{\partial L}{\partial x}=0$
#### 解 ODE
- $M\dot{v}+\bigtriangledown V(x)+\bigtriangledown C(x)^T\lambda =0$
- $C(x)=0$
<br>
- Implicit Constraint Direction (ICD)
- $v^{n+1}=v^n-hM^{-1}(\bigtriangledown V(x^n)+\bigtriangledown C(x^{n+1})^T{\lambda}^{n+1})$
- $x^{n+1}=x^n+hv^{n+1}$
- $C(x^{n+1})=0$
##### Step and Project (SAP)
- 解 ICD:需要大量計算
- 解根:$5N$ 個
- $N$:vertex個數
- 替代方案
- 解第一、二式(忽略限制條件)
- 得到 $x^{n+1}_0$
- $C(x^{n+1}_0)=0$
- 將$x^{n+1}_0$投影至限制空間($\left\{x^{n+1}|C(x^{n+1})=0\right\}$)
- 意即找到離 $x^{n+1}_0$ 最接近的 $x^{n+1}$
### Subspace clothing simulatino using adaptive bases
- SIGGRAPH 2014
- 低維度子空間
- 不同空間、時間:使用不同的基底向量描述
### A perceptual control space for garment simulation, SIGGRAPH 2015
- 直覺性描述
- 彈性係數$\rightarrow$柔軟度
- $\cdots$
- 離散取樣
- 建立對應函數
# KeyFraming
[4-3 Spatial Key Framing](https://pt.coursera.org/lecture/interactive-computer-graphics/4-3-spatial-key-framing-gQPxL)
## 關鍵影格
- 動畫師決定關鍵影格
- 電腦產生影格間的畫面
### 關鍵?
- 關鍵影格
- 參數描述
- 系列的關鍵影格:
- 高維空間的點
- 產生平滑曲線(自然運動)
### 關鍵影格產生
- 設定關鍵影格
- 直接給定
- 正/逆向運動學(FK、IK)
- 填補(內插)
- 線性、三次多項室、參數化曲線
- 軌跡(填補畫面)速度
- 速度曲線
### 優缺點
- 容易控制動作
- 減輕作畫負擔
<br>
- 參數過多(DOF,degree of freedom 高)
- 水、煙
- 風吹草動
- 群眾運動
## 插值
- Ex. 球體彈跳運動
- 曲線並非單數學性插值
- 平滑插值工具
- 使用者要能夠操控
### 問題
- 給定位置(點)、時間
- 產生平滑曲線
- 根據時間差分配虛點
- 速度控制:根據不同時間點決定位置
### 插值、曲線近似
#### 曲線描述
##### 參數化曲線
- 參數型式:$P=P(u)=(x, y, z)$
- $x=P_x(u), y=P_y(u), z=P_z(u)$
#### 近似空間曲線
- 插值 vs. 近似
- 匹配資料 vs. 設計
- 複雜度
- 效率 vs. 可變性
- 三次多項式已足夠
- 連續性
- 全域/局部控制
##### 全域/局部控制
- 使用者編輯
- 改變控制點
- 全域控制:牽一髮動全身
###### 全域控制:多項式插值
- 多項式插值
- $n+1$ 個資料點:決定 $n$ 次多項式
- Lagrange Interpolation
<br>
- 用高次多項式來插值
- 過度捲曲
- 全域
- 曲線盡可能平滑
- 降低捲曲
- 高次方多項式不好 :no_good:
###### 局部控制:複合分段
- 將曲線分割為多個小段
- 參數化型式
- 維持連續性
- 位置
- 切線
- 曲率
### Splines:分段式多項式(局部控制)
- 多個低次方多項式(三次)對控制點(關鍵影格)做插值
- 誤差(bending energy)
- 描述方式:曲率平方累加值
- 二階微分 $\rightarrow$ 曲率
- 最小化
- 嘗試讓曲率變化(curvature)$=0$
- 如果不行,則平均分散到整個曲線
- **三次多項式**最常見
- 滿足插值、達到 $C1$ 連續的最低次
- 更高次:捲曲過多
- 更低次:型態限制
#### 線性分段式多項式
- 基底向量
- Ex. 折線
- $P(u)=(1-u)p_1+up_2$
- $1-u$、$u$:基底函數
- $p_1$、$p_2$:控制點
#### Hermite 插值法
- Hermite 曲線
- $P(u)=(P_x(u),P_y(u),P_z(u))$
- $P_x(u)=a_xu^3+b_xu^2+c_xu+d_x$
- 參數(條件)
- 端點的位置
- 端點的切線斜率
- 連續性
- 端點位置、切線斜率共用
- $C_0$、$C_1$ 連續
##### Hermite 曲線型式
- 三次多項式、一階微分
- $P_x(u)=a_xu^3+b_xu^2+c_xu+d_x$
- $\dot{P_x}(u)=3a_xu^2+2b_xu+c_x$
- 條件:$P_x(0), P_x(1), \dot{P_x}(0), \dot{P_x}(1)$
- 解:
- $a_x=2(P_x(0)-P_x(1))+\dot{P_x}(0)+\dot{P_x}(1)$
- $b_x=3(P_x(1)-P_x(0))-2\dot{P_x}(0)-\dot{P_x}(1)$
- $c_x=\dot{P_x}(0)$
- $d_x=P_x(0)$
<br>
- $P_x(u)=\begin{bmatrix} u^3 && u^2 && u && 1 \end{bmatrix}\begin{bmatrix} a_x \\ b_x \\ c_x \\ d_x \end{bmatrix}$
$=\begin{bmatrix} u^3 && u^2 && u && 1 \end{bmatrix}\begin{bmatrix}2 && -2 && 1 && 1 \\ -3 && 3 && -2 && -1 \\ 0 && 0 && 1 && 0 \\ 1 && 0 && 0 && 0 \end{bmatrix}\begin{bmatrix} P_x(0) \\ P_x(1) \\ \dot{P_x}(0) \\ \dot{P_x}(1) \end{bmatrix}$
$=U^TMB_x$
###### 矩陣型式下的參數化曲線
- $P(u)=U^TMB$
- $M$:係數矩陣
- $B$:幾何資訊
- $B=\begin{bmatrix} P_x(0) && P_y(0) && P_z(0) \\ P_x(1) && P_y(1) && P_z(1) \\ \dot{P_x}(0) && \dot{P_y}(0) && \dot{P_z}(0) \\ \dot{P_x}(1) && \dot{P_y}(1) && \dot{P_z}(1) \end{bmatrix}$
- 第 $i$ 段:$B=\begin{bmatrix} p_i \\ p_{i+1} \\ \dot{p_i} \\ \dot{p_{i+1}}\end{bmatrix}$
##### Blending Functions
- $P(u)=U^TMB={\begin{bmatrix} 2u^3-3u^2+1 \\ -2u^3+3u^2 \\ u^3-2u^2+u \\ u^3-u^2 \end{bmatrix}}^T\begin{bmatrix} p_1 \\ p_2 \\ \dot{p_1} \\ \dot{p_2} \end{bmatrix}$
- $P_x(u)=(2u^3-3u^2+1)p_{1x}+(-2u^3+3u^2)p_{2x}+(u^3-2u^2+u)\dot{p_{1x}}+(u^3-u^2)\dot{p_{2x}}$
- $U^TM$:基底函數
#### Bezier 曲線
- 給四個控制點
- Hermite:給兩端點位置+切線斜率
- $\dot{P}(0)=3(p_2-p_1)$
- $\dot{P}(1)=3(p_4-p_3)$
- $P(u)=\begin{bmatrix} u^3 && u^2 && u && 1 \end{bmatrix}\begin{bmatrix}2 && -2 && 1 && 1 \\ -3 && 3 && -2 && -1 \\ 0 && 0 && 1 && 0 \\ 1 && 0 && 0 && 0 \end{bmatrix}\begin{bmatrix} 1 && 0 && 0 && 0 \\ 0 && 0 && 0 && 1 \\ -3 && 3 && 0 && 0 \\ 0 && 0 && -3 && 3 \end{bmatrix}\begin{bmatrix} p_1 \\ p_2 \\ p_3 \\ p_4 \end{bmatrix}$
- $P(u)=\begin{bmatrix} u^3 && u^2 && u && 1 \end{bmatrix}\begin{bmatrix}-1 && 3 && -3 && 1 \\ 3 && -6 && 3 && 0 \\ -3 && 3 && 3 && 0 \\ 1 && 0 && 0 && 0 \end{bmatrix}\begin{bmatrix} p_1 \\ p_2 \\ p_3 \\ p_4 \end{bmatrix}$
- Hermite spline 的變形
- $C_1$ 連續要另外處理
- $\dot{P}(0)=3(p_1-p_0)$
- $\frac{dx}{du}=3(x_1-x_0)$
- $\frac{dy}{du}=3(y_1-y_0)$
- $\frac{dy}{dx}=\frac{(y_1-y_0)}{(x_1-x_0)}$
#### Catmull-Rom Splines
- Hermite、Bezier:需要注意控制點設定才能保證 $C_1$ 連續
- Catmull-Rom Splines:自動滿足 $C_1$ 連續
- $p_i$ 的切線:$s(p_{i+1}-p_{i-1})$,$i=2..n-1$
- $\dot{p_i}=s(p_{i+1}-p_{i-1})$
- 端點:外插 or 額外控制點
- $s$:張力參數,通常 $s=\frac{1}{2}$
- 條件
- $P(0)=p_2$
- $P(1)=p_3$
- $\dot{P}(0)=3(p_3-p_1)$
- $\dot{P}(1)=3(p_4-p_2)$
- $\rightarrow P(u)=U^T\begin{bmatrix} -s && 2-s && s-2 && s \\ 2s && s-3 && 3-2s && -s \\ -s && 0 && s && 0 \\ 0 && 1 && 0 && 0 \end{bmatrix}\begin{bmatrix} p_1 \\ p_2 \\ p_3 \\ p_4 \end{bmatrix}$
### Now What?
- 有:
- 關鍵影格
- 軌跡(曲線)
- 運動效果(速度)
- 速度曲線
#### 速度控制
- 速度曲線
- 定義位移量(s)-時間(t)的關係
##### 參數化不均勻問題
- 參數空間內的移動量與三維空間的移動量不一致
- $u_2-u_1\neq s(u_2)-s(u_1)$
- $s(u)=\int \sqrt{{\frac{dP_x(u)}{du}}^2+{\frac{dP_y(u)}{du}}^2+{\frac{dP_z(u)}{du}}^2} du$
#### 位移長度的再參數化
- 再參數化:函數對應(mapping)
- 使位移變化量成正比
- 問題
- $arclength(u_1, u_2)=\Delta s$
- 給定不同參數值 $u_1, u_2$,算出位移量
- 給定位移量,算出參數值
-
##### Finite Differences(近似解)
- 曲線切段
- 各段視為直線
- 積分
- 曲線上取樣
- 使用直線近似
- 建表(Lookup Table)
- $u$-$ArcLength$
- $u$(參數)間隔越小 $\rightarrow$ 近似越準確
- $P(u)=P(u(s(t)))$
### 流程
- Key frames(vector/control point)
- 插值
- Space curve
- Arclength reparameterization
- Lookup table
- Speed curve
### 速度曲線
#### Ease-in Ease-out
- 開始、結束速度小
##### Sine 插值法
- $s(t)=\frac{1}{2}sin(t\pi - \frac{\pi}{2})+\frac{1}{2}$,$0\leq t\leq 1$
##### 分段式曲線
- 頭尾:Sinusoidal segments(Sine 插值法)
- 中段:Linear segment
##### 不使用 sine
- $V_1=V_2 \rightarrow A^*t_1=-D^*(1-t_2)$
# 3DRotation
## 旋轉
### 3-D 轉換
- 移動
- Translate:$P'=P+T$
- $P, T\in \mathbb{R}^3$
- Scale:$P'=SP$
- $S\in \mathbb{R}^{3\times 3}$
- Rotate:$P'=RP$
- $R\in \mathbb{R}^{3\times 3}$
- $\rightarrow P'=MP$
- $P \in \mathbb{R}^4$:齊次座標系統
- $M$:轉換矩陣
- 物體本身的移動旋轉
- 攝影機相對物體的移動旋轉
#### 齊次座標系統
- $4\times 4$ 矩陣
- $(\frac{x}{w}, \frac{y}{w}, \frac{z}{w})=[x, y, z, w]$
- $(x, y, z)=[x, y, z, 1]$
- 通常設定 $w=1$
#### Translation(移動)
- $\begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix}=\begin{bmatrix} 1 && 0 && 0 && t_x \\ 0 && 1 && 0 && t_y \\ 0 && 0 && 1 && t_z \\ 0 && 0 && 0 && 1 \end{bmatrix}\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}$
#### Scaling
- $\begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix}=\begin{bmatrix} s_x && 0 && 0 && 0 \\ 0 && s_y && 0 && 0 \\ 0 && 0 && s_z && 0 \\ 0 && 0 && 0 && 1 \end{bmatrix}\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}$
#### Rotation
- X 軸
- $R_x(0)=\begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix}=\begin{bmatrix} 1 && 0 && 0 && 0 \\ 0 && cos\theta && -sin\theta && 0 \\ 0 && sin\theta && cos\theta && 0 \\ 0 && 0 && 0 && 1 \end{bmatrix}\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}$
- Y 軸
- $R_y(0)=\begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix}=\begin{bmatrix} cos\theta && 0 && sin\theta && 0 \\ 0 && 1 && 0 && 0 \\ -sin\theta && 0 && cos\theta && 0 \\ 0 && 0 && 0 && 1 \end{bmatrix}\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}$
- Z 軸
- $R_z(0)=\begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix}=\begin{bmatrix} cos\theta && -sin\theta && 0 && 0 \\ sin\theta && cos\theta && 0 && 0 \\ 0 && 0 && 1 && 0 \\ 0 && 0 && 0 && 1 \end{bmatrix}\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}$
### 轉換矩陣的結合
- $P'=M_1M_2M_3\cdots M_nP$
- $M=M_1M_2M_3\cdots M_n$
- $P'=MP$
- $P^T=(M_1M_2M_3\cdots M_nP)^T$
- $M^T=M_n^TM_{n-1}^T\cdots M_2^TM_1^T$
- $P'^T=P^TM^T$
#### 旋轉矩陣 推導
1. 向量旋轉
- $x'=rcos(\theta+\alpha)$
$=r(cos\theta cos\alpha -sin\theta sin\alpha)$
$=(cos\theta rcos\alpha -sin\theta rsin\alpha)$
$=(cos\theta x-sin\theta y)$
- $y'=rsin(\theta+\alpha)$
$=(sin\theta rcos\alpha + cos\theta rsin\alpha)$
$=(sin\theta x+cos\theta y)$
- $\rightarrow \begin{bmatrix} x' \\ y' \end{bmatrix}=\begin{bmatrix} cos\theta && -sin\theta \\ sin\theta && cos\theta \end{bmatrix}\begin{bmatrix} x \\ y \end{bmatrix}$
2. 坐標軸轉換
- $V=x^0\bar{x}+y^0\bar{y}=x^1\bar{u}+y^1\bar{v}$
$=x^1(cos\theta\bar{x}+sin\theta\bar{y})+y^1(-sin\theta\bar{x}+cos\theta\bar{y})$
- $\rightarrow \begin{bmatrix} x^0 \\ y^0 \end{bmatrix}=\begin{bmatrix} cos\theta && -sin\theta \\ sin\theta && cos\theta \end{bmatrix}\begin{bmatrix} x^1 \\ y^1 \end{bmatrix}=\begin{bmatrix} \bar{u} && \bar{v} \end{bmatrix}\begin{bmatrix} x^1 \\ y^1 \end{bmatrix}$
#### 旋轉矩陣
- 代表 朝向矩陣(座標系統)
- 行/列向量間互相垂直、長度為$1$(單位長度)
- orthonormal
- 數值計算誤差可能造成 non-orthonormal
- 不再是旋轉矩陣
- 矩陣 插值
- 可能造成 non-orthonormal
- 不再是旋轉矩陣
### 3D 旋轉 描述方法
- 旋轉矩陣
- Fixed Angle
- Euler Angle
- Axis angle
- Quaternion(四元數)
<br>
- 參數不需要到 $3\times 3$
- 減少參數
- 自由度更低
#### Fixed Angle(固定角)
- 三個角度+旋轉順序
- 代表旋轉軸(**全域坐標軸**)的旋轉量
- 不能連續兩個以上同軸,但中間有間隔就可以
- Ex. x-y-x 可以,x-x-z 不行
- Ex. x-y-z order $(\theta_x, \theta_y, \theta_z)$
- $P'=R_z(\theta_z)R_y(\theta_y)R_x(\theta_x)P$
##### 插值 問題
- Ex. $(0, 90, 0)$ and $(90, 45, 90)$ in x-y-z
- $\rightarrow (0, 45, 0)$ in \*-x-\*
- 直接插值(相加除二)
- $\rightarrow (45, 67.5, 45)$
- 希望結果:
- $(90, 22.5, 90)$
#### Euler Angle(尤拉角)
- 三個角度+旋轉順序
- 代表旋轉軸(**區域坐標軸**)的旋轉量
- 不能連續兩個以上同軸,但中間有間隔就可以
- Ex. x-y-x 可以,x-x-z 不行
- 尤拉角的順序等同於固定角順序的 inverse
### 問題:Gimbal Lock
- Gimbal:允許旋轉的機械裝置
- 任兩旋轉軸同向
- 喪失自由度
- 旋轉矩陣的任兩個列向量相同(同方向)
- non-orthornormal
- 非旋轉矩陣
#### 旋轉軸角(Axis Angle) 描述法
- 尤拉旋轉定理
- 3-D 旋轉由 4 個參數描述
- 旋轉軸:A,角度:$\theta$
- $(A_x, A_y, A_z, \theta)$
- 插值($(A_1, \theta_1), (A_2, \theta_2)$ 求 $(A_k, \theta_k)$)
- $B=A_1\times A_2$
- $\phi =cos^{-1}\frac{A_1\cdot A_2}{|A_1||A_2|}$
- $A_k=R_B(k\phi)A_1$
- $R_B$:旋轉軸為 $B$ 的旋轉矩陣
- $\theta_k=(1-k)\theta_1+k\theta_2$
##### 旋轉軸角 vs. 四元數
- 固定角/尤拉角 $\rightarrow$ 四元數
- 需要用到 旋轉軸角
#### 四元數(Quaternion)
- 4-tuple
- $q=(s, x, y, z)$/$[s, v]$
- $s$:純量,與旋轉角度成正比
- $v$:向量,與旋轉軸方向相同(長度不為 $1$)
- 旋轉軸角 $\rightarrow$ 四元數
- $q=[cos(\frac{\theta}{2}), sin(\frac{\theta}{2})\cdot (A_x, A_y, A_z)]$
##### 四元數的運算
- 加
- $[s_1, v_1]+[s_2, v_2]=[s_1+s_2, v_1+v_2]$
- 乘
- $[s_1, v_1]\cdot [s_2, v_2]=[s_1s_2-v_1\cdot v_2, s_1v_2+s_2v_1+v_1\times v_2]$
- 有結合率,沒有交換率
- $q_1(q_2q_3)=(q_1q_2)q_3$
- $q_1q_2\neq q_2q_1$
- 點在空間的描述:$[0, x, y, z]$
- 單位元素:$[1, 0, 0, 0]$
- $q\cdot [1, 0, 0, 0]=q$
- 反元素
- $^{-1}=\frac{[s, -v]}{{||q||}^2}$
- $||q||=\sqrt{s^2+x^2+y^2+z^2}$
- $qq^{-1}=[1, 0, 0, 0]$
##### 四元數的旋轉
- 旋轉向量 $v$
- $[0, v]$
- $v'=Rot_q(v)=q\cdot v\cdot q^{-1}$
- $q$:旋轉的四元數表示式
- $q$、$-q$:相同朝向/旋轉量
###### 旋轉 連乘
- $Rot_q(Rot_p(v)) =Rot_q(pvp^{-1}) =qpvp^{-1}q^{-1} =qpv(qp)^{-1} =Rot_{qp}(v)$
- $p^{-1}q^{-1}=(qp)^{-1}$
### Summary
- 旋轉矩陣
- orthornormal
- 缺點:插值
- 固定角
- 全域性旋轉軸
- 缺:插值、Gimbal lock
- 尤拉角
- 區域性旋轉軸
- 缺:插值、Gimbal lock
- 旋轉軸角
- 優:插值、Gimbal lock
- 缺:多個旋轉結合
- 四元數
- 優:插值、Gimbal lock、多個旋轉結合
### 可視化旋轉(Visualizing Rotations)
- 單旋轉量(一維)
- 圓弧(2-D)
- 雙旋轉量(二維)
- 球面(3-D)
- 插值:在 n-D 單位球面 移動
<br>
- 三旋轉量(三維)?
#### 四元數插值
- 四元數:在 4-D 單位球面上的點
- 單位四元數:$q=(s, x, y, z)$,$||q||=1$
##### 線性插值
- 插值結果不會在球面上
- 投射至球面
- 投射結果弧長不一定相同
##### 球型線性插值(slerp)
- 保持移動間距相同
- $slerp(A, B, u)=\frac{sin(1-u)\Omega}{sin\Omega}A+\frac{sinu\Omega}{sin\Omega}B$
###### Proof
- $P=\frac{sin(\Omega -\theta)}{sin\Omega}A+\frac{sin\theta}{sin\Omega}B$
- $\theta =u\Omega$
- $P=\alpha A+\beta B$
- $||P||=1$,$||A||=1$,$||B||=1$
- $A\cdot B=cos\Omega$
- $A\cdot P=cos\theta$
<br>
- $A(\alpha A+\beta B)=\alpha {|A|}^2+\beta cos\Omega =cos\theta$
- $alpha +\beta cos\Omega=cos\theta$
- ${|P|}^2=P\cdot P={\alpha}^2{|A|}^2+2\alpha \beta A\cdot B+{\beta}^2{|B|}^2=1$
- ${\alpha}^2+2\alpha\beta cos\Omega +{\beta}^2=1$
- $\rightarrow \alpha=\frac{sin(\Omega -\theta)}{sin\Omega}$,$\beta=\frac{sin\theta}{sin\Omega}$
##### Slerp:選取最短路徑
- $q_1\cdot q_2>0$
### 類比($\rightarrow$ 四元數)
- 歐式空間 $\rightarrow$ 4D 球面
- 位置 $\rightarrow$ 朝向
- 線性內插 $\rightarrow$ Slerp
### 多段曲線
- 歐式空間:線性內插 $\rightarrow$ Slerp
- $C_0$ 連續,$C_1$ 不連續
- 歐式空間 $C_1$ 連續:三次多項式
- $\rightarrow$ Slerp:?
#### 歐式空間的 Bezier
- $P(u)=\begin{bmatrix} u^3 && u^2 && u && 1 \end{bmatrix}\begin{bmatrix}-1 && 3 && -3 && 1 \\ 3 && -6 && 3 && 0 \\ -3 && 3 && 3 && 0 \\ 1 && 0 && 0 && 0 \end{bmatrix}\begin{bmatrix} p_1 \\ p_2 \\ p_3 \\ p_4 \end{bmatrix}$
#### 四元數的 Bezier
- 控制點:自動產生
- 三次方程式
- 遞迴式線性內插
- 應用 Slerp
##### 產生共線控制點
- $p(u)=\begin{bmatrix} u^3 && u^2 && u && 1 \end{bmatrix}\begin{bmatrix}-1 && 3 && -3 && 1 \\ 3 && -6 && 3 && 0 \\ -3 && 3 && 3 && 0 \\ 1 && 0 && 0 && 0 \end{bmatrix}\begin{bmatrix} p_n \\ a_n \\ b_{n+1} \\ p_{n+1} \end{bmatrix}$

##### De Casteljau 產生 Bezier 曲線
- 遞迴線性內插
- 幾何直覺:
- 將角切掉,無限多次 $\rightarrow$ 近似圓
- 次分割(subdivision)
###### 次分割(subdivision)
- $p(u)=(1-u)((1-u)p_0+up_1)+u((1-u)p_1+up_2)$
- $B_2(u)=(1-u)^2p_0+2u(1-u)p_1+u^2p_2$
##### De Casteljau on 4D 球面
- $p_1=slerp(q_n, a_n, \frac{1}{3})$
- $p_2=slerp(a_n, b_{n+1}, \frac{1}{3})$
- $p_3=slerp(b_{n+1}, q_{n+1}, \frac{1}{3})$
- $p_{12}=slerp(p_1, p_2, \frac{1}{3})$
- $p_{23}=slerp(p_2, p_3, \frac{1}{3})$
- $p=slerp(p_{12}, p_{23}, \frac{1}{3})$
### Summary
- 3D 旋轉表示
- 矩陣
- orthornormal matrix(旋轉矩陣)
- 尤拉角/固定角
- 旋轉軸角,四元數
- 四元數空間
- 四元數插值
- Slerp
- Bezier
# Kinematics
## 運動學
### 自由度(DOF)
- 設定物體運動狀態的最小座標數
- Ex. 剛體
- 位置:$x, y, z$
- 朝向:raw, pitch, yaw
- $\rightarrow 6$ DOF
#### 骨架模型的自由度
- 基礎:$3$ 座標 DOF+$3$ 旋轉 DOF
- 旋轉性關節
- 每個關節最多 $3$ DOF
- 肩:3 DOF
- 腕:2 DOF
- 膝:1 DOF
##### 旋轉接頭
- 3 DOF joint
- gimbal
- ball and socket
- 2 DOF joint
- universal
### 描述人體
- 層級模型(樹狀結構)
- root:任意點
- 通常選擇靠近腰部處
- node:關節
#### 關節空間 vs. 卡式座標
- 關節空間
- 由關節角度組成的空間
- 設定高維度向量以決定骨架姿勢
- 卡式座標
- 3D 空間
### 正向運動學(FK) 與 逆向運動學(IK)
- 架設骨架為剛體
- 正向運動學
- $P=f(\theta_1, \theta_2)$
- joint space $\rightarrow$ cartesian space
- 給定關節 角度 $\rightarrow$ 位置
- 渲染(rendering)
- 逆向運動學
- $(\theta_1, \theta_2)=f^{-1}(P)$
- cartesian space $\rightarrow$ joint space
- 給定關節 位置、朝向 $\rightarrow$ 角度
- 通常解不唯一
- 骨架與環境有互動
- 參數較少 $\rightarrow$ 較好控制
## 正向運動學(FK)
### 符號
- $V_i$:向量在第 $i$ 個座標系統的描述方式
- $_iT$:在全域空間中第 $i$ 個座標系統的原點位置
- $_j^iR$:兩座標系統間轉換的矩陣
- $V_j= {^i_jR}V_i$
### FK
- $_i^{i+1}R={_i^0R}\cdot {_0^{i+1}R}$
- $_0^iR=\begin{bmatrix} _iX && _iY && _iZ \end{bmatrix}$
- $_i^0R=_0^iR^{-1}=_0^iR^T$
- $R^{-1}=R^T$
<br>
- $_{i+1}T=_0^1R\left\{ _1^2R\cdots _{i-2}^{i-2}R(_{i-1}^iRV_i+V_{i-1})+V_{i-2}]\cdots ]+V_1 \right\}$
- $_{i+1}T={_0^iR}V_i+_iT$
#### 旋轉 結合
- $\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}=R_z(\alpha_1)\left\{ R_z(-\alpha_2)[R_z(\alpha_3)T_x(l_3)+T_x(l_2)]+T_x(l_1) \right\}$
- $R_z$:父-子 區域座標系統的相對旋轉
##### 簡化
- $\theta_1=\alpha_1$,$\theta_2=\alpha_2(+/-)\alpha_2$,$\theta_3=\alpha_3(+/-)\alpha_1(+/-)\alpha_2$
- $x=l_1cos(\theta_1)+l_2cos(\theta_2)+l_3cos(\theta_3)$
- $y=l_1sin(\theta_1)+l_2sin(\theta_2)+l_3sin(\theta_3)$
### Acclaim 格式
- 骨架動畫檔案
- .ASF:骨架檔
- .AMC:動作檔
- ASF:全域座標系統,AMC:區域座標系統
#### ASF
- 描述骨架
```ASF=
begin
id 2
name lfemur //左大腿
direction 0.342 -0.939 0
length 7.113
```
- 各關節座標、朝向
```ASF=+
axis 0 0 20 XYZ
```
- Ex. 尤拉角順序:$x\rightarrow y\rightarrow z$
- ${_0^iR}={_0^iR_z}\cdot{_0^iR_y}\cdot{_0^iR_z}$
```ASF=+
dof rx ry rz
limits (-160.0 20.0)
(-70.0 70.0)
(-60.0 70.0)
end
```
- 兩座標系統間的相對轉換
- ${_iR_{asf}}={^{i+1}_iR}={^0_iR}\cdot{^{i+1}_0R}$
- $\hat{V_i}={^0_iR}\hat{V_0}$
#### AMC
- 尤拉角描述
- ${_iR_{amc}}={_iR_z}\cdot{_iR_y}\cdot{_iR_x}$
#### 正向運動學 in ASF/AMC
- ${_i^{i+1}R}={_iR_{asf}}\cdot{_iR_{amc}}$
- ${_0^iR}={_0^1R_1^2}R\cdots{_{i-1}^iR}$
- $V_i=\hat{V_i}\cdot l_i$
- $l_i$:length
- ${_iT}={^{i-1}_0R}V_{i-1}+_{i-1}T$
## 逆向運動學(IK)
- $\theta_1, \theta_2, \theta_3=f^{-1}(P)$
### 問題
#### 多重解(冗餘)
- Ex.
- 2 equations(限制)
- 3 未知數
- $x=l_1cos(\theta_1)+l_2cos(\theta_2)+l_3cos(\theta_3)$
- $y=l_1sin(\theta_1)+l_2sin(\theta_2)+l_3sin(\theta_3)$
- $\rightarrow$ 多重解
- 同一個點但 path 中的每個 bone 可能可以任意移動
#### 無解
- 姿勢本身無法做到
#### IK 的難處
- 冗餘(多重解)
- 動作是否自然
- 關節限制
- 算出來的姿勢 和 一般會做的姿勢
- jacobian matrix
- inverse 可能不存在
### 解 IK
- Analytic method(解析解)
- Inverse-Jacobian method
- Optimization-based method(最佳化)
- Example-based method(資料驅動)
#### Analytic mehtod(解析解)
- Goal $(X,Y)$

<br>
- $cos(\theta_T)=\frac{X}{\sqrt{X^2+Y^2}}$
- $\theta_T=cos^{-1}\begin{pmatrix}\frac{X}{\sqrt{X^2+Y^2}}\end{pmatrix}$
- $cos(\theta_1-\theta_T)=\frac{L_1^2+X^2+Y^2-L_2^2}{2L_1\sqrt{X^2+Y^2}}$
- $\theta_1=cos^{-1}(\frac{L_1^2+X^2+Y^2-L_2^2}{2L_1\sqrt{X^2+Y^2}})$
- $cos(180-\theta_2)=\frac{L_1^2+L_2^2-(X^2+Y^2)}{2L_1L_2}$
- $\theta_2=180-cos^{-1}(\frac{L_1^2+L_2^2-(X^2+Y^2)}{2L_1L_2})$
#### Inverse-Jacobian method
- 遞迴式計算
##### Jacobian
- $f(\theta)=p$
- $p \in \mathbb{R}^n (n=6$ usually$)$
- end effector
- 連結的最終點
- $\theta \in \mathbb{R}^m (m=$ DOFs$)$
- Jacobian:對 p 微分時各自由度對各位置的影響
- $\frac{dp}{dt}=\frac{\partial f(\theta)}{\partial \theta}\frac{d\theta}{dt}=J(\theta)\frac{d\theta}{dt}$
- $J_{ij}=\frac{\partial f_i}{\partial \theta_j}$
- 速度:關節空間 $\rightarrow$ 卡式座標(全域空間)
- $\rightarrow V=J(\theta)\dot{\theta}$
###### Ex. Jocobian for a 2D arm
- 2D 機械臂,每個關節自由度為 $1$ (只有一個角度)
- $p=\begin{bmatrix} p_x && p_y \end{bmatrix}$
- $f(\begin{bmatrix} \theta_1 \\ \theta_2 \end{bmatrix})=\begin{bmatrix} p_x \\ p_y \end{bmatrix}$
- $J_f=J(\theta)=\begin{bmatrix} \frac{\partial p}{\partial\theta_1} && \frac{\partial p}{\partial\theta_2} \end{bmatrix}=\begin{bmatrix} \frac{\partial p_x}{\partial\theta_1} && \frac{\partial p_x}{\partial\theta_2} \\ \frac{\partial p_y}{\partial\theta_1} && \frac{\partial p_y}{\partial\theta_2} \end{bmatrix}$
##### 計算 Jocobian(解析)
- Ex. 3 個關節,各關節自由度為 $1$
- $\begin{bmatrix} x \\ y \end{bmatrix}=\begin{bmatrix} f_1(\theta) \\ f_2(\theta) \end{bmatrix}=\begin{bmatrix} l_1cos\theta_1+l_2cos\theta_2+l_3cos\theta_3 \\ l_1sin\theta_1+l_2sin\theta_2+l_3sin\theta_3 \end{bmatrix}$
- $\begin{bmatrix} \dot{x} \\ \dot{y} \end{bmatrix}=J\begin{bmatrix} \dot{\theta_1} \\ \dot{\theta_2} \\ \dot{\theta_3} \end{bmatrix}$
- $J=\begin{bmatrix} \frac{\partial f_1(\theta)}{\partial\theta_1} && \frac{\partial f_1(\theta)}{\partial\theta_2} && \frac{\partial f_1(\theta)}{\partial\theta_3} \\ \frac{\partial f_2(\theta)}{\partial\theta_1} && \frac{\partial f_2(\theta)}{\partial\theta_2} && \frac{\partial f_2(\theta)}{\partial\theta_3} \end{bmatrix}=\begin{bmatrix} -l_1sin\theta_1 && -l_2sin\theta_2 && -l_3sin\theta_3 \\ l_1cos\theta_1 && l_2cos\theta_2 && l_3cos\theta_3 \end{bmatrix}$
- 多關節、多自由度下,Jacobian 計算複雜且不通用
##### 計算 Jocobian(幾何)
- 假設只考慮 end effort $p$ 的位置
- $p \in \mathbb{R}^3$
- $\rightarrow$ Jacobian:$3\times N$
- $N$:總自由度
- 對於各關節的各自由度,分析 $p$ 如何根據自由度改變
#### 旋轉自由度
- $v=\omega\times r$
- $\frac{dp}{dt}=|\omega|\frac{\omega}{|\omega|}\times r=\frac{d\theta}{dt}a\times r$
- $\frac{dp}{d\theta}=a\times r$
- $\frac{\partial p}{\partial \theta_i}=a_i\times (p-r_i)$
- $a_i=\frac{\omega_i}{|\omega_i|}$: 旋轉軸 朝向(單位長度)
- $r_i$: 旋轉軸 位置
- $p$: end effector 位置
- 都要在全域座標系統下
- 多自由度關節:拆成單自由度的多關節
### 遞迴式 IK
- $\theta=f^{-1}(P)$
- $V=J(\theta)\dot{\theta}$
- $\dot{\theta}=J^{-1}(\theta)V$
- $\rightarrow \theta_{k+1}=\theta+\Delta tJ^{-1}(\theta_k)V$
- $t$:遞迴計算的遞增量
- $\Delta t$:小
#### Jacobian 的反矩陣可能不存在
- 非方形矩陣
- pseudo inverse
- Singularity
- 造成關節速度無限大
- 發生在無論 $\dot{\theta}$ 為多少都無法實現給定的姿勢
##### Singularity 補救方法
- 增加冗餘
- 加入多餘的自由度
- Jacobian matrix 非方形
#### Pseudo Inverse of the Jocobian
- $V=J\dot{\theta}$
- $\rightarrow J^TV=J^TJ\dot{\theta}$
- $\rightarrow (J^TJ)^{-1}J^TV=(J^TJ)^{-1}J^TJ\dot{\theta}$
- $J^+=(J^TJ)^{-1}J^T$
- $\rightarrow J^+V=\dot{\theta}$
##### 加入更多控制項
- Pseudo inverse 計算使關節角速度為最小的解
- 可能不是自然姿勢
- 加入一個控制項
- 加入前後線性速度不會改變
- 不會影響到 end effctor
#### 控制項(Control term)
- $J\dot{\theta}=V$
- $\dot{\theta}=J^+V+(J^+J-I)z$
- $C=(J^+J-I)z$:控制項
<br>
- $V=JC$
- $V=J(J^+J-I)z$
- $V=(J-J)z=0z=0$
- $\rightarrow$ 控制項 $C$:$J$ 的 $null space$
- $C=(J^+J-I)z$
- $J$ 的 $null space$:對限制條件沒有影響
- $\theta\in nullsapce(J)\Leftrightarrow J\theta=0$
##### Null Space 效用
- 次要目標(自然姿勢)
- $\dot{\theta}=J^+V+(J^+J-I)z$
- $min_z G(\theta)$
- 自然姿勢/關節剛性(關節活動度)
- $G(\theta)=\sum_{i}^{}\alpha_i(\theta_{natural}(i)-\theta(i))^2$
### Optimization-based method(最佳化)
- 將 IK 公式化為非線性最佳化問題
- Ex.
- minimize $x^2(y+1)+sin(x+y)$
- subject to $x\geq 0 ,y\geq 0$
- Objectve function
- Constraint
- Iterative algorithm
#### Objective Function
- $g$:goal,$e$:end effctor
- 位置距離
- ${||p_g-p_e||}^2$
- 朝向距離
- ${||{r_x^g}-{r_x^e}||}^2+{||{r_y^g}-{r_y^e}||}^2$
- 位置/朝向權重
- $w{||p_g-p_e||}^2+(1-w)({||{r_x^g}-{r_x^e}||}^2+{||{r_y^g}-{r_y^e}||}^2)$
- $w$:權重值
#### 非線性最佳化
- 限制
- minimize $G(\theta)$
- subject to $\left\{ \begin{matrix} a^T\theta=b_1 \\ a^T\theta \leq b_2 \end{matrix} \right.$
- $a^T\theta=b_1$:關節座標
- $a^T\theta \leq b_2$:關節限制
- 解
- 數值方法
- 通常是區域性最小
- 非全域性
- 跟初始狀態有關係
### Example-based method(資料驅動)
- 運動數據庫
- 插值
- Rose et al., “Artist-directed IK using radial basis function interpolation,” Eurographics’01
- 統計模型
- Grochow et al., “Style-based inverse kinematics,” SIGGRAPH’04
# MotionCapture
## 動作捕捉
### 使用 Motion Capture
#### 動作捕捉?
- 紀錄 3D 即時動作
- 追蹤動作(骨架建立)
- 參考點的 3D 座標
- 轉換成角度(IK)
- 驅動骨架
#### 優缺點
- 優點
- 動作細節只要有 marker 就能完整
- 缺點
- 不易
- 編輯
- 一般化
- 控制
- 花費高
#### 應用
- 動畫
- 電腦遊戲
- 特效
- (人型)機器人控制
- 互動式角色
#### 捕捉物
- 3D 位置
- $X$, $Y$, $Z$
- roll、pitch、yaw
- 誤差 造成:
- 關節分離
- 與環境接觸點錯誤
#### 捕捉?
- 可大可小
- 全身
- 臉、手
- 動物
#### 資料使用
- 離線拍攝
- 預先錄製
- 拍攝時處理較少
- 資料庫
- 編輯
- 動作融合
- 線上拍攝(演出式動畫)
- 完全靠 動作捕捉 產生
- 直接驅動角色
#### 歷史
- 生物力學
- 步態分析
- 動力學
- 記錄點少
- 手動標記、分析
- 受力狀態、肌肉活動
- 電腦動畫
- 旋轉掃描
- 捕捉影像
- 透明遮罩 追蹤
- 後期處理
- VR 追蹤
- 精確度需求較低
- sensor 較少
#### 流程
- 校正手續
- 動作捕捉
- 骨架預測
- IK 計算
### 動作捕捉系統
- 光學
- 追蹤每一個 marker
- 電磁式
- 電磁場感測
- 6 DOF
- 機械式
- 外骨架
- 慣性感測
- 加速度計、陀螺儀
#### 光學
##### 被動式
- Marker 本身不會送出訊號
- 攝影機:
- 紅外線、光感、…攝影機
- 空間解析度 高
- 時間解析度(每秒幀數) 高
- 不適合戶外
- 不能有反光性強的物質
- Marker 貼身(緊身衣)
- Marker 可能會互相影響
##### 主動式
- Marker 自動發出 LED 光束
- 自由設定頻率(避免 marker 混淆)
- 可在室外
- 成本便宜
- 精度(解析度)略差
#### 電磁式
- 機電轉換器
- 工具簡單
- 主要成本:sensors
- 電磁波干擾
- 精度略差
#### 機械式
- 穿戴外骨架
- 不會受到光線、電磁場干擾
- 不會有 marker 混淆問題
- 沒有範圍限制
- 對運動造成限制
- 不知道絕對位置
<br>
- Data glove
- 彎曲感測、光學追蹤
- 6 DOFs
- 提供力回饋
#### 慣性感測
- Sensors
- 陀螺儀
- 加速度計
- 可在戶外
- 校準困難
- 全域座標系統下的位置 不定
- 誤差
#### RGBD Camera
- RGB+深度 攝影機
- 皮膚型變+骨架動作
#### 技術議題
- 拍攝範圍
- 解析度
- 校正程序
- 不同設備有不同的校正程序
- 精度
- marker 移動範圍
- 環境
- 遮擋、對應
- 捕捉比率
- (Sensor)遮擋/對應
### 近期 Motion Capture 研究
- Skin
- Outdoor
- Nonintrusive
#### 皮膚(Skin Motion Capture)
- Park & Hodgins, SIGGRAPH'06
- 增加 markers
- 產生精細的表面模型
- 資料收集、清理
- Skin Animation
#### 戶外(Outdoor Motion Capture)
- Vlasic et al., "Practical Motion Capture in Everyday Surroundings," SIGGRAPH'07
- 慣性感測器+超音波測量
- 超音波測量:絕對位置(全域座標系統)
#### 非侵入式(Noninstrusive Motion Capture)
### Paper
#### Correct MOCAP using high rate IMUs
- Kuo et al., Creating impactful characters: correcting human impact accelerations using high rate IMUs in dynamic activities, TOG'19
- FK(Jacobian)預測 IMU 的加速度
- 修正關節角度,使得預測與測量到的 IMU 加速度適配
- 有需要(碰撞力/速度超過一定量)時再執行修正
# MotionEditingSynthesis
## Motion
-
- 非 $\in \mathbb{R}^n$
- 3 自由度
- 3 自由度
## 動作編輯 問題
- 特定動作
- 動作捕捉、關鍵影格
- 特定角色、動作、風格
- 保留一部分,改變一部分
## 動作編輯 Why?
-
## 動作編輯
- 時間軸修改
- Time warp / Speed control
- $m(t)=m_0(f(t))$
- $f: \mathbb{R}\rightarrow\mathbb{R}$
-
## 時間軸修改
- $m(t)=m_0(f(t))$
- 時間放大縮小:$f(t)=kt$
- 時間平移:$f(t)=t+k$
- Time warping
- 插值
- 事件 對齊
- Speed control
### 動態 Time Warping(DTW)
- 各影格對應到最適合的
-
- 動態規劃$\rightarrow$找到最佳路徑
- 限制
- 不能有負數斜率
- 負數斜率:動作倒播
##
- 放大縮小
- 平移
- 混合
- 過濾
### 動作混和
- 時間軸要先對齊
-
-
- $m(t)=am_0(t)+(1-a)m_1(t)$
- $a$:權重值
- 權重根據時間改變
- $m(t)=a(t)m_0(t)+(1-a(t))m_1(t)$
-
## RBF 插值
- RBF types
- Guassian
- $R(d)=e^{-\beta d^2}$
- Thin plate spline
- $R(d)=d^2log(d)$
- Multiquadric
- $R(d)=\sqrt{d^2+\beta^2}$
-
-
- $s(x)=A(x)+\sum_{i=1}^{N}r_iR_i(|x-x_i)$
- $A$:
- $r_i$:實數權重
- $R_i$:
- Ex. Fit data $(x, y)={(0.15, 1), (0.3, 0), (0.75, 0)}$
- $s(x)=A(x)+\sum_{i=1}^{3}r_iR_i(|x-x_i)$
## Motion Transition 跳過