ベジエクリッピング法によるメタボールの表示
各メタボールの密度分布を
ベジエ関数
で定義し、レイ(視線)上の総密度もベジエ関数として表して、
総密度 = しきい値
となる最初の点(表面との交点)をベジエクリッピング法で求めます。 2つのボールが近づくと密度が加算され、滑らかに融合します。
操作:
画像をクリックすると、その画素のレイ上の密度関数(ベジエ関数)と制御多角形、クリッピングで絞り込まれた区間が下に表示されます。
アニメーション(接近・融合・分離)
ボール中心間距離
影響半径 R
しきい値 T
密度関数の制御点 b₁
密度関数の制御点 b₂
解像度
138×120(速い)
275×240
413×360
550×480(遅い)
密度関数 f(s)(s = r²/R², b₀=1, b₃=0 固定)
クリックしたレイ上の密度関数 F(t) − T(ベジエ関数)とクリッピング
画像をクリックしてください。
アルゴリズム
密度関数をベジエ関数で定義:
中心からの距離 r を s = r²/R² に正規化し、密度を3次ベジエ関数で表す(s ≥ 1 では 0)。
f(s) = Σ
k=0..3
b
k
B
k
3
(s), b₀ = 1, b₃ = 0(b₂ = 0 で s = 1 において C¹ 連続)
b = (1,0,0,0) のとき f = (1−s)³ となり、従来のソフトオブジェクトの密度関数と一致する。b₁, b₂ で分布形状を自由に制御できる。
レイ上で区間分割:
レイ p(t) = o + t d と各ボールの影響球(半径 R)の出入り点で t 軸を区間に分割する。各区間では、どのボールが影響しているかが一定である。
レイ上の密度をベジエ関数に:
区間 [t
a
, t
b
] を u ∈ [0,1] に正規化すると s
i
(u) は u の2次式(2次ベジエ関数)。 ベジエ関数の乗算で f(s
i
(u)) は
6次ベジエ関数
となり、総密度からしきい値を引いた
G(u) = Σ
i
f(s
i
(u)) − T (6次ベジエ関数,制御点 g
j
は u = j/6 に配置)
ベジエクリッピング:
制御点 (j/6, g
j
) の凸包と u 軸の交差区間 [u
min
, u
max
] の外には解がないので、de Casteljau 法でその区間を切り出す。 縮小率が小さい(区間が 80% 以上残る)ときは2分割し、
手前(t の小さい側)を優先
して探索する。凸包が u 軸と交わらなければその区間に交点はない(取りこぼしなし)。
法線と色:
交点で密度の勾配 ∇F = Σ f′(s
i
)·2(p − c
i
)/R² を求め、−∇F を法線とする。色は各ボールの密度を重みとして混合する。
参考:T. Nishita, E. Nakamae, "A Method for Displaying Metaballs by using Bezier Clipping," Computer Graphics Forum, Vol.13, No.3, 1994, pp.271-280.