① 同じ立体を2つの方法で表示する
ボクセルは小さな立方体の集まりで形を表します。マーチングキューブ法は格子点の値を使い、表面に沿った三角形メッシュを作ります。左右の3D表示はドラッグで回転、ホイール/ピンチで拡大縮小できます。
ボクセル表示
計算中
マーチングキューブ法
計算中
立方体のサイズを小さくすると、左は段差が細かくなり、右は表面の形をより細かく追えるようになります。ただし、右も無限に滑らかな曲面ではなく、三角形の集まりです。
② 1個のキューブで何が起きる?
マーチングキューブ法は、隣接する 8つの格子点の内外を調べます。値が境界をまたぐ辺で交点を計算し、交点同士を三角形で結びます。格子点のON/OFFを切り替えて観察しましょう。
1セルの断面生成
● 橙色:内側の頂点(値 −1) ● 水色:外側の頂点(値 +1)
表示する段階
8頂点のうち1点が内側
ケース番号は8頂点の内外を8ビットで表したものです。全部で 2⁸ = 256 通りあります。回転・反転などで似た形をまとめられます。
こちらの例では各頂点の値を −1 / +1、しきい値を0とするため、交点は辺の中点になります。実際の表面では値に応じて交点の位置が変わります。
③ 交点はどう計算する?
1本の辺の両端の位置を P₁, P₂、スカラー値を v₁, v₂、しきい値を σ とすると、辺上の交点は線形補間で求められます。
t = (σ − v₁) / (v₂ − v₁)
P = P₁ + t (P₂ − P₁)
P = P₁ + t (P₂ − P₁)
例えば v₁ = −0.2、v₂ = +0.8、σ = 0 なら t = 0.2 となり、交点は P₁ から辺の20%の位置です。各キューブに同じ処理を繰り返して、三角形をつなぎます。
※ 左のボクセル表示はセル中心の値で内外を判断し、外から見える面のみ描画しています。右は格子点の値を使った標準的なマーチングキューブ法の三角形生成テーブルに基づきます。ケースによっては表面接続に曖昧さが生じることがあります。