等値面 — マーチングスクエア
レイマーチが光線で面を探すのに対し、場の値から直接、面の輪郭線を抜く手がある。各セルの 4 隅で値がしきい値より上か下かを判定すると、4 隅 × 2 値で 16 通りのパターンになる。そのパターンごとに、どの辺とどの辺を線で結ぶかが決まっている。値が分かれている辺の上で交点を線形補間して求め、辺どうしを結ぶ。
マーチングスクエア。連続な場 f(x, y) の f = iso を満たす曲線を、格子の各セルの局所判定だけで抜く手法。セル4隅の上下だけで線がそのセルを横切るかと通る辺が決まるので、曲線追跡なしに並列に処理できる。三次元の等値「面」を抜くマーチングキューブの二次元版で、医療画像の表面抽出やメタボールの輪郭生成に使われる。
場は metaballs の影響の合計にする。各球が距離 d の点に r² / d² の影響を投げ、その合計が (x, y) の値になる。球がいくつか漂っていて、各セルでその合計を明るさに塗る。しきい値 1.0 を境に、超えた側を明るく、下を暗く塗り分ける。
明るい側と暗い側の境目が、抜きたい等値線の通り道になる。格子で塗ると境目は階段状で、まだ線にはなっていない。
その境目を線分として引く。格子点ごとに影響の合計を一度だけ計算しておき、各セルの4隅 tl tr br bl がそれぞれしきい値の上か下かを4ビットの番号 code にまとめる。全隅が上(15)か全隅が下(0)のセルは線が通らないので飛ばす。残りは上下が分かれている辺を線が横切る。その横切る位置を辺の両端の値の差で線形補間して求め、辺どうしを結ぶ。
球を囲む滑らかな閉じた輪郭が出て、球が近づくと二つの輪が一本に繋がる。cross が辺を横切る位置で、(iso - va) / d は辺の片端 va からしきい値までが辺全体の何割かを返し、その割合だけ端から進めた点が交点になる。場が滑らかなので隣り合うセルの線分が端で繋がり、一本の連続した輪郭になる。code が 5 と 10 のときだけ対角に二本入るのは、上の隅と下の隅が斜めに分かれていて線が二回横切るため。
塗りが面で見せるところを、マーチングスクエアは同じしきい値の輪郭だけで抜く。r² / d² を足し合わせた影響の合計という場に、しきい値で線を引いている。smin で繋いだ円が距離で融合を作るのと別ルートで、影響を足し合わせる metaballs も同じ等値面の読み方に届く。