三維動畫形變算法(Linear rotation-invariant coordinates和As-Rigid-As-Possible)


      在三維網格形變算法中,個人比較喜歡下面兩個算法,算法的效果都比較不錯, 不同的是文章[Lipman et al. 2005]算法對控制點平移不太敏感。下面分別介紹這兩個算法:

  文章[Lipman et al. 2005]提出的網格形變算法需要求解兩次稀疏線性方程組:第一個方程定義了網格上離散坐標系之間的關系,通過求解該方程可以重組每個頂點的坐標系;第二個方程記錄了頂點在局部坐標系的位置信息,通過求解該方程可以得到每個頂點的幾何坐標。

在網格頂點建立局部坐標系(b1ib2iNi),i∈V。對於(i,j)∈E,定義差分算子δ:

δj(b1i) = b1jb1i

δj(b2i) = b2jb2i

δj(Ni) = NjNi

       將差分算子表示為b1ib2iNi的形式:

δj(b1i) = C11ijb1i + C12ijb2i + C13ijNi

δj(b2i) = C21ijb1i + C22ijb2i + C23ijNi

δj(Ni) = C31ijb1i + C32ijb2i + C33ijNi

       進一步表示為:

b1j = (C11ij+1)b1i + C12ijb2i + C13ijNi

b2j = C21ijb1i + (C22ij+1)b2i + C23ijNi

Nj = C31ijb1i + C32ijb2i + (C33ij+1)Ni

  上式為第一個方程,記錄了網格上離散坐標系之間的關系,其中的系數可以由原始網格得到。

xj - xi = <eij , b1i >b1i + <eij , b2i >b2i + <eij , Ni >Ni

  上式為第二個方程,記錄了頂點在局部坐標系的位置信息,其中的系數也可以由原始網格得到。

  算法效果:

 

  文章[Sorkine et al. 2007]提出了ARAP的網格形變算法,網格頂點的一環鄰域三角片組成一個單元(Cell),當頂點i對應的單元Ci變形為Ci’時,定義其剛性(rigidity)能量函數為:

  網格上所有單元的剛性能量之和為:

 

  根據能量函數,算法實現過程分兩步進行迭代,第一步更新Ri,第二步更新 pi’,下面為具體推導過程。

  1.更新Ri

  設eij = pi - pj,那么能量函數E(S’)可以表示為:

  忽略不含Ri的項,那么:

  定義協方差矩陣Si,將Si奇異值分解:Si = UiΣiViT,那么Ri = ViUiT

  2.更新pi’:

  權重wij和wi分別為:wij = 1/2(cotαij + cotβij),wi = 1。我們將E(S’)對pi’求偏導,並令其等於零:

 

  上式中wij = wji,於是,那么我們可以得到:

 

  上式相當於求解稀疏矩陣方程組。

  算法效果:

 

本文為原創,轉載請注明出處:http://www.cnblogs.com/shushen

 

 

參考文獻:

[1] Y. Lipman, O. Sorkine, D. Levin, and D. Cohen-Or. 2005. "Linear rotation-invariant coordinates for meshes." In ACM SIGGRAPH 2005 Papers (SIGGRAPH '05) 24:3 (2005), 479-487.

[2] O. Sorkine and M. Alexa. "As-Rigid-As-Possible Surface Modeling." In Proc. of Eurographics Symposium on Geometry Processing. Aire-la-Ville, Switzerland: Eurographics Association, 2007.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM