Multi-level Partition of Unityを実装(1)

Multi-level Partition of Unityは陰関数曲面をモデリングする方法で近年、注目されているようだ。
確かにCADではパラメトリック曲面が主流だが色んな点で陰関数曲面は自由度が高いうえに中身の詰まって密度のあるボリュームデータとして最初から扱える上に集合演算が容易な点はある。
ただ、可視化等ではパラメトリック曲面よりも遥かに難しいし、これまで培われてきた微分幾何の手法が自由にならない点もある。
 
さて、陰関数生成の方法としてはメタボールが有名だがRBF(Radial Basis Function)が非常に優れている。ただ、RBFでは大規模な連立一次方程式を解かなければならない点が難点だが、これらを改良した
CSRBF(Compactly-Supported RBF)が提案されてこの問題は大きく改善されたと思う。
それでも規模的には小さいとは言えない連立一次方程式を解く必要があるため大規模な点群を扱うには辛いものがあった。ところがFranke らが提案したPU(Partition of Unity)法はこの問題の一つの打開策となったと思う。それは重みを取り入れた事でちょうどスプラインに重みを付ける事で自由度が上がったのと似ているが
PU法では小さな領域毎にフィッティング(形状関数を生成)してそれらを結合することで陰関数を得る点が大きく異なる。そのため計算量は細分化されて軽量な算出を可能にした点は大きい。
 
そして近年、PUをさらに改良したMPU(Multi-level Partition of Unity) 法がOhtake らに提案されて状況は大きく変わったと感じる。MPU 法は将来的に有望な形状表現として評価されているようなのでこのMPU 法を実装してみようと思うのである。
 
まずはMPU 法のアルゴリズムの理解から。