先寫一些我要記錄的東西好了,一天到晚挖坑都不填的
簡單來說就是我們輸入一段動畫,然後可以計算出這一段動畫的path,也就是上圖看到的線,然後我們可以透過調整這條線來做成其他動畫。那為甚麼要這麼做呢?因為如果每一段動畫都需要人工捕捉,你可以想像這是相當大的工作量,那為甚麼能這麼做,如果有做過3D遊戲應該會知道,人物的動作跟移動是分開的,所以我們可以把動畫拆出path當作移動,然後在拿原始動畫-path就可以得到動作。
這個應該會比較清楚,如果從數值上理解的話,你可以理解成我們拆出高頻以及低頻的訊號,我們會傾向右邊的結果而不是中間的,因為我們知道高頻的資訊應該是在path的local space之下,其實這種方式在mesh的編輯也是一樣的,我們會把表面的起伏(高頻)記錄下來,只對laplasian的mesh(低頻)操作,等變形完再加回去。
Fit Curve
總之,這邊會遇到一個問題,我要怎麼算出這條path?一種直覺的方式就是線性回歸,我們想辦法找出能夠fit原始動畫的曲線。
但這邊要注意,我們要取出低頻訊號,所以我們不應該overfitting,所以我們可以使用Cubic B-spline Curve,當然也可以使用Bezier Curve,但這邊要注意一點,我們fit完的Curve應該要能夠很簡單的編輯。有關於Cubic B-spline Curve可以參考
總之,我們要想辦法用4個控制點來fit,由於只是三次式,所以自然沒有辦法fit到很接近,但這也是我們刻意為之的(只要低頻訊號)。
開始解以前,我們可以先來複習一下2D的linear regrssion。
那回到我們的path,我們所求變成三個參數P0~P3,也就是對應到4個控制點。
這邊可以注意到,最後我們解的是4*4的系統,所以解起來相當簡單,這也就是因為我們用的是cubic的curve。
這邊可以看我在blender裡面寫的code。
待續…
這是我自己的簡單實作在blender上,但這個實作還包含registration curve,這個有空在開一篇來講吧。