ボクセルとマーチングキューブ法

3次元の格子データから、なめらかなポリゴン表面を作るしくみを操作して理解する

① 同じ立体を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₁)

例えば v₁ = −0.2、v₂ = +0.8、σ = 0 なら t = 0.2 となり、交点は P₁ から辺の20%の位置です。各キューブに同じ処理を繰り返して、三角形をつなぎます。

※ 左のボクセル表示はセル中心の値で内外を判断し、外から見える面のみ描画しています。右は格子点の値を使った標準的なマーチングキューブ法の三角形生成テーブルに基づきます。ケースによっては表面接続に曖昧さが生じることがあります。