---
# System prepended metadata

title: Interactive Localized Liquid Motion Editing
tags: [Fluid Simulation, Paper, 3D Computer Game]

---

###### tags: `Paper`、`3D Computer Game`、`Fluid Simulation`
# [**Interactive Localized Liquid Motion Editing**](https://dl.acm.org/doi/10.1145/2508363.2508429)

## 1. Introduction

## 3. Overview
<center>

![](https://i.imgur.com/w1Ec15U.png)

</center>

上圖為本篇論文的演算法 pipline，主要有分為兩個部分 *keyframe design* 和 *sequence generation*。

在 keyframe design 部分，使用者可以透過拖曳或是 local mesh patch 的方式在修改特定幀的形狀。

在 sequence generation 部分，編輯過的 keyframe 會被傳送到 local subsequence，以 real-time 預覽生成的動畫，這樣的方式可以保留原始動畫，也可以<font color = "orange">透過時間曲線自行控制。</font>

最後，local subsequence 會合併到原始的 sequence，並且以 keyframe 為後續模擬的初始條件，繼續進行模擬。

## 4. Keyframe Designer
本篇論文提供了三種編輯方法：
1. 繪製筆畫以指定流體形狀
2. 拖曳小部分區域，是部分流體形狀改變
3. 提供一個小 mesh patch 作為 constrain

#### Fluid Shape Preprocessing
在使用者選擇的 frame $K$，作者會丟棄一些較小的 features，例如飛濺的小水滴，因為這些細部的 feature 會造成使用者編輯上的困難，同時對於流體整體形狀的影響很小。具體來說，作者運用形態學的開啟 (morphological opening operation)，並且設定 erodes 3 grid spacing，dilates 3 grid spacing，因為 opening 可以去除影像雜訊，最終達到移除細微 feature 的結果。
> [Mathematical morphology](https://en.wikipedia.org/wiki/Mathematical_morphology)： a theory and technique for the analysis and processing of geometrical structures based on set theory, lattice theory, and random function.
> 
    > [*Opening*](https://en.wikipedia.org/wiki/Opening_(morphology))： the dilation of the erosion of a set A by a structuring element B.
        $$A \circ B = ( A \ominus B) \oplus B$$
    > [*dilation*](https://en.wikipedia.org/wiki/Dilation_(morphology))：usually represented by $\ominus$ , uses a structuring element for probling and reducing the shapes contained in the input image.
    > [*erosion*](https://en.wikipedia.org/wiki/Erosion_(morphology))：usually represented by $\oplus$ , uses a structuring element for probling and expanding the shapes contained in the input image.

<center>

![](https://i.imgur.com/rrc80uv.png)

</center>

下一步，作者將 particles 分成三種：
1. 固體與流體交界處粒子，<font color="Blue">$\mathcal{B}^K$</font>
2. 液體與氣體交界處粒子，<font color="Red">$\mathcal{S}^K$</font>
3. 中間粒子，<font color="Green">$\mathcal{M}^K$</font>

上面這三種粒子的集合為 $\mathcal{P}^K$

<center>

![](https://i.imgur.com/C6xV2Ow.png)

</center>

<center>

![](https://i.imgur.com/YwvRCVS.png)

</center>

#### From User Sketch to Control Particles
下圖中，綠色線條為 user 指定的形狀，此時，系統會從 camera 位置，延伸出 ray 到所有該線條上的 control particles 以確定深度，沿 ray 方向生出 patch，width 由使用者自訂，以此來確定可影響範圍。

<center>

![](https://i.imgur.com/YnspnqT.png)

</center>

### 4.1 Objective Function of Control Particles
$\Theta_0(\mathcal{L}, \mathcal{B}, \sf{D}) = \underset{\mathbf{B}_\mit{i} \ \in \ \mathcal{B}} \sum{\phi^2_{\cal{L}} \ (\sf{D}(\bf{B_\mit{i}}))} \tag{1}$
$\mathcal{L}$ 是 control particles 也是 target shape，$\mathcal{B}$ 是邊緣 particles，$\mathbf{B}$ 是 particle 的 vector，$\phi_\mathcal{L}$ 是與 $\mathcal{L}$ 的距離公式，$\mathsf{D}$ 是變形 operator。<font color="Red">這段公式的意思是將要改變的 particles 透過 $\mathsf{D}$ function 改變形狀，並且與 target shape 做比較。然而，這樣子的算法因為要對所有的邊界 particles 做運算，會造成運算量龐大的問題，而且對於使用者其實只會想要針對要改變的 particle 進行控制，因此作者提出了另外一個公式，如下：</font>

$\Theta(\cal{L}, \cal{B}, \sf{D}) = \underset{\bf{L}_\mit{i} \ \in \ \cal{L}}\sum{\phi^2_\cal{B} \ (\sf{D}^{-1}(\bf{L_\mit{i}}))} \tag{2}$

若以 mesh patch 為 constrain，則公式可以簡化成如下：

$\Theta(t, s, \sf{D}) = ||\sf{D}^{-1}\mathcal{(t) - s}||^{2} \tag{3}$

$t$ 為 target location，$s$ 為 start location。

### 4.2 Optimizing the Deformation Operator

#### Reduced Model of Deformation Operator
在公式 2 中的 $\mathsf{D^{-1}}$ 表示如下：
<center>
    
$\mathsf{D^{-1}}(\mathbf{P}) = \mathsf{Adv}^{{N_A}}(\mathbf{P}, \mathbf{-V}).$

</center>

現在，我們可以通過優化 $V$ 來最小化 $\Theta$，但因為 $V$ 要 realtime 有困難，因此要透過簡化 $V$ 的模型，來解決此問題，接下來我們要先定義一個任意向量場 $\mathbf{H}$，且 $V = \nabla \times \mathbf{H}$，$$\mathbf{H}_R = 
\begin{cases} \mathbf{H} \ \mathbf{R}(\phi / \epsilon) + (1 - \mathbf{R}(\phi/\epsilon)) \mathbf{N}(\mathbf{H} \cdot \mathbf{N}) & \text{for 3D cases,} \\ \mathbf{H} \ \mathbf{R}(\phi / \epsilon) & \text{for 2D cases.}
\end{cases}$$ 上述公式中 $\phi$ 指的是<font color="orange">透過 [level set function](https://en.wikipedia.org/wiki/Level-set_method) 取得的與固體的邊緣形狀</font>，而 $\epsilon$ 則是<font color="orange">邊界漸變層厚度，若從 [boundary layer thickness](https://en.wikipedia.org/wiki/Boundary_layer_thickness) 來想，boundary layer thickness 指的是流體沿固體表面流動所形成的邊界層 ([boundary layer](https://en.wikipedia.org/wiki/Boundary_layer)) 的厚度和形狀的參數，並且這裡的厚度及形狀是一個漸進的數值</font>， $\mathbf{R}$ <font color="orange">是一個用來算漸進率的 function</font>，如下： $$\mathbf{R}(\psi) = \begin{cases} 1 & \psi \geq 1, \\ \frac{15}{8}\psi - \frac{10}{8}\psi^3+\frac{3}{8}\psi^5 & 1 > \psi > -1, \\
-1 & \psi \leq -1.\end{cases} \tag{4}$$ 到此，大概能猜到在 2D 中，<font color="orange">$\mathbf{R}(\phi / \epsilon)$ 的意思是，根據 particle 距離固體邊界的位置，算出其漸進率，並且乘上 $\mathbf{H}$，得出其在該位置的向量，包含法向量及切線向量</font>，然而，論文中並沒有提到 $\mathbf{N}$ 代表的意思，因此也較無法理解在 3D 的狀況下，$\mathbf{H}$ 所代表的物理意義。下方公式表示出了旋度及風力的向量公式 $$\mathbf{H}_C(\mathbf{X}, \mathbf{C}, \mathbf{A}, f, f_0) = \mathbf{A}E, \tag{5}$$ $$\mathbf{H}_W(\mathbf{X}, \mathbf{C}, \mathbf{A}, f, f_0) = \mathbf{A} \times (\mathbf{X} - \mathbf{C})E, \tag{6}$$ $E = \exp(-(f^2 + f_0)|| \mathbf{X} - \mathbf{C}||)$，$\mathbf{C}$ 指的是力的中心，$f$ 和 $f_0$ 是漸變參數，$\mathbf{A}$ 是軸或是力的方向，然而同樣，論文中並沒有給出 $\mathbf{X}$ 的確切意思，故有些推導不出來上面兩個方程式具體要表達的意思。最後，作者給了一個 $\mathbf{H}$ 的最終表示式，如下： $$\mathbf{H} = \sum_{i}^{N} \mathbf{H}^i_{c_i}, \ c_i \in \{ C, W \}, \tag{7}$$

在這裡，$C$ 指的是旋度 (curl force)，$W$ 指的是風力 (wind force)。總向量場 $\mathbf{H}$，就是所有向量場的總和。所以最終，$V = \nabla \times \mathbf{H}$ 可以用上面公式取代，而若要取得公式 2 裡，$\Theta$ 的最小值，就是要解決這些變數。

#### Regularization of Objective Function
<font color="orange">為了獲得穩定的結果並避免過度擬合</font>，作者在這裡給了兩個額外的正規化項 $$\mathbf{E}_{reg} = \sum_{\mathbf{L}_i\in\mathcal{L}} ||\delta\mathbf{L_\mit{i}}||^2 \tag{8}$$ 其中 $\delta \mathbf{L} = \mathsf{D^{-1}}(\mathbf{L}) - \mathbf{L}$，<font color="orange">帶回之前的公式考慮，可以知道這裡是在把目前的形狀與 backward 的做比較</font>，而第二項為 $\mathbf{E}_{lap}$ <font color="orange">是應用於 $\mathcal{L}$ 的拉普拉斯正則化</font>。即$$\mathbf{E}_{lap} = \sum_{\mathbf{L}_i \in \mathcal{L}} || \sum_{\mathbf{L}_j \in \mathcal{N}(\mathbf{L}_i)} w_{ij}(\delta\mathbf{L}_j - \delta\mathbf{L}_i)||^2 \tag{9}$$ <font color="orange">這裡可以猜測是將現在的 particle 與相鄰的 control particle 做比較</font>，最後的 function 可以寫成，$$\mathbf{E}_{final} = \Theta + w_r\mathbf{E}_{reg} + w_l\mathbf{E}_{lap} \tag{10}$$ 而 $w_r$ 及 $w_l$ 為 user 控制的參數，$w_r$ 控制穩定量，$w_l$ 控制對應的液體部分。

<center>

![](https://i.imgur.com/d3U5F16.png)

</center>

## 5 Sequence Generator

### 5.1 Update of Local Subsequence
$\mathbb{S}^K = \{ \mathcal{P}^{K-i}|0 < i < w\}$，$w$ 指的是 local window size ($w = 50$)，作者的計劃是在 $\mathbb{S}^K$ 中對每個幀進行變形，以便在 K 幀處變形量平滑地增加到完全變形 D

### 5.2 Generation of Final Animation

## 6. Implementation Details

## 7. Results
<center>

![](https://i.imgur.com/ce9O9y1.png)

</center>

<center>

![](https://i.imgur.com/Ac6HEvg.png)

</center>

## 8. Conclusion

----
## 參考資料
- [影像處理的形態學（Morphology）應用](https://medium.com/%E9%9B%BB%E8%85%A6%E8%A6%96%E8%A6%BA/%E5%BD%A2%E6%85%8B%E5%AD%B8-morphology-%E6%87%89%E7%94%A8-3a3c03b33e2b)