機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。数式が整うまで少し時間かかります。リンクフリーです。

勉強ログです。リンクフリーです
目次へ戻る

Catmull-Clark subdivision surface のアルゴリズム解説

Catmull–Clark subdivision surfaceとは

Catmull–Clark subdivision surfaceとは、2024年現在使われているOpenSubdivの元になったアルゴリズムです。
BlenderもShade3DもOpenSubdivに対応しているようです。
Catmull-Clark Subdivisionに解説していくので、最新のSubdivision surfaceについて解説していくわけではないので、予めご了承ください。

アルゴリズム

多面体メッシュが引数です。(三角形でなくてもOKです。N角形群とお考え下さい)
1. 面の平均の点を求めます。これを面の新しい点と呼ぶことにします。

2. 辺の含む面の平均の点と辺の端点の平均を求めます。
辺の含む面の新しい点がA,F、辺の端点をM,Eとすると、以下です。

\begin{eqnarray}
\frac{A+F+M+E}{4}
\end{eqnarray}

これを辺の新しい点と呼ぶことにします。

3. 新しい点の座標を作成します。
イメージとしては、点の値を更新する感じです。
元の点をP、Pを含む面の新しい点の平均をF、Pに接続する辺の中点の平均をRとすると、新しい点の座標は以下です。
nはPを含む面の数とします。(nはPに接続する辺の数でもあります。)

\begin{eqnarray}
\frac{F+2R+(n-3)P}{n}
\end{eqnarray}

4. 面の新しい点とその面に接続する辺の新しい点を接続します。

5. 元の点に属するすべての辺の新しい点に接続します。

6. 4と5で作成した辺で閉じたのが新しい面です。

以上です。お疲れさまでした。
なんかややこしく見えますが、単純です。
アルゴリズムJavaScriptで書かれたソースを見つけたので解説予定です。<=書きました。参考リンク参照。

最後に

Catmull–Clark subdivision surfaceを読んだ方が分かりやすいと思います。

目次へ戻る