コンピュータグラフィクス論
– モデリング (3) –
2015年4月30日 高山 健志
陰関数表現による形状モデリング
• 3D空間上のスカラー場 𝐹 𝑥, 𝑦, 𝑧 に対し、 𝐹 𝑥, 𝑦, 𝑧 = 0 で定義されるサーフェス • 別名:ゼロ等値面、陰関数 (ボリューム) 表現 • サーフェス表現 • 𝐹 𝒑 が正 (負) のとき、𝒑 は物体の外部 (内部) • 勾配 𝛻𝐹 は法線方向に一致 • 𝛻𝐹(𝒑) = 1 ∀𝒑 のとき、F は物体表面からの距離 2 半径 2 の球 𝐹 𝑥, 𝑦, 𝑧 = 𝑥2 + 𝑦2 + 𝑧2 − 4 = 0陰関数の例
3
陰関数の例:等電位面
(Metaball)
4 𝐹 𝒑 = 𝐹1 𝒑 − 𝐹2(𝒑) 𝐹 𝒑 = 𝐹1 𝒑 + 𝐹2(𝒑) 𝐹𝑖 𝒑 = 𝑞𝑖 𝒑 − 𝒑𝑖 𝐹 𝒑 = 𝐹1 𝒑 + 𝐹2 𝒑 + 𝐹3 𝒑 + 𝐹4 𝒑陰関数の線形補間によるモーフィング
5 𝐹 𝒑 = 𝐹1(𝒑) 𝐹 𝒑 = 2 3𝐹1 𝒑 + 1 3𝐹2 𝒑 𝐹 𝒑 = 1 3𝐹1 𝒑 + 2 3𝐹2 𝒑 𝐹 𝒑 = 𝐹2(𝒑)複数の陰関数を組み合わせたモデリング
Constructive Solid Geometry (Boolean演算)
7
積:𝐹𝐴∩𝐵 𝒑 = min 𝐹𝐴 𝒑 , 𝐹𝐵 𝒑 和:𝐹𝐴∪𝐵 𝒑 = max 𝐹𝐴 𝒑 , 𝐹𝐵 𝒑
陰関数の表示方法:
Marching Cubes
• 等値面を三角形メッシュとして抽出 • 立方体格子の各セルに対し、 (1) 立方体の 8 頂点で関数値を計算 (2) その正負のパターンから、 生成する面のタイプを決定 • 対称性から 15 通りに分類 (3) 関数値の線形補間から 面の位置を決定 • 最も有名 (特許問題でも ) 8Marching Cubes の曖昧性
9
The asymptotic decider: resolving the ambiguity in marching cubes [Nielson VIS91]
Marching Tetrahedra
• 立方体の代わりに四面体を使う • パターンが少なく、曖昧性が無い 実装が簡単 • 各立方体セルを、6 個の四面体に分割 • (隣接セル間で分割の向きを合わせることに注意) • きれいな三角形メッシュを取り出す工夫 10 http://paulbourke.net/geometry/polygonise/シャープなエッジを保持した等値面抽出
11
Feature Sensitive Surface Extraction from Volume Data [Kobbelt SIGGRAPH01]
http://www.graphics.rwth-aachen.de/IsoEx/
格子サイズ:65×65×65
Marching Cubes 改善版 Marching Cubes (値のみ考慮)
陰関数の表示方法:レイトレーシング
12
Modelling with implicit surfaces that interpolate [Turk TOG02]
応用例:スケッチベース
3D モデリング
13
A sketching interface for modeling the internal structures of 3d shapes [Owada SmartGraphics03] ShapeShop: Sketch-Based Solid Modeling with BlobTrees [Schmidt SBIM05]
応用例:メッシュの穴埋め
14
点群からのサーフェス再構成
3D 形状の計測
• 得られるデータ:点群 • 3D座標 • 法線 (面の向き) • 得られない場合もある • ノイズが多すぎる場合もある 16 Range Scanner (LIDAR) Structured Light Multi-View Stereo Depth Camera点群からのサーフェス形状再構成
• 入力:N 個の点群データ • 座標 𝐱𝑖 = 𝑥𝑖, 𝑦𝑖, 𝑧𝑖 と法線 𝐧𝑖 = 𝑛𝑖x, 𝑛𝑖y, 𝑛𝑖z , 𝑖 ∈ 1, … , 𝑁 • 出力:関数 𝑓(𝐱) で、値と勾配の制約を満たすもの • 𝑓 𝐱𝑖 = 0 • 𝛁𝑓 𝐱𝑖 = 𝐧𝑖 • 等値面 𝑓 𝐱 = 0 が出力サーフェス形状• “Scattered Data Interpolation” と呼ばれる問題
• Moving Least Squares • Radial Basis Function
CG以外の分野 (e.g. 機械学習) でも重要
17
勾配を制約する二通りの方法
• 法線方向にオフセットした位置に値の制約を追加 • 簡単 • 数学表現そのものに勾配制約を取り入れる (エルミート補間) • 高品質 18Modelling with implicit surfaces that interpolate [Turk TOG02] Hermite Radial Basis Functions Implicits [Macedo CGF10]
Moving Least Squares による補間
(移動最小二乗)
出発点:
Least SQuares (最小二乗)
• 求めたい関数が線形だと仮定する:𝑓 𝐱 = 𝑎𝑥 + 𝑏𝑦 + 𝑐𝑧 + 𝑑 • 𝑎, 𝑏, 𝑐, 𝑑 が未知係数 • データ点における値の制約 • (勾配制約は今は考えない) 20 𝐱 ≔ (𝑥, 𝑦, 𝑧) 𝑥1 𝑦1 𝑧1 1 𝑥2 𝑦2 𝑧2 1 𝑥𝑁 𝑦𝑁 𝑧𝑁 1 𝑎 𝑏 𝑐 𝑑 𝑓1 𝑓2 𝑓𝑁 ・・・ ・・・ = 𝐴 𝐜 𝐟 𝑓 𝐱1 = 𝑎𝑥1 + 𝑏𝑦1 + 𝑐𝑧1 + 𝑑 = 𝑓1 𝑓 𝐱2 = 𝑎𝑥2 + 𝑏𝑦2 + 𝑐𝑧2 + 𝑑 = 𝑓2 𝑓 𝐱𝑁 = 𝑎𝑥𝑁 + 𝑏𝑦𝑁 + 𝑐𝑧𝑁 + 𝑑 = 𝑓𝑁 ・・・Overconstrained System
• #未知数 < #制約 (i.e. 縦長の行列) 全ての制約を同時に満たせない • fitting の誤差を最小化: 21 𝐴 𝐜 𝐟 𝐴 𝐜 𝐟 𝐜 𝐴⊺𝐴 −1 𝐟 𝐴⊺ 𝐴⊺ 𝐴⊺ = = = 𝑨 𝐜 − 𝐟 2 = 𝑖=1 𝑁 𝑓 𝐱𝑖 − 𝑓𝑖 2LSQ の幾何的な解釈
• 𝐩 と 𝐪 が張る空間中で 𝐫 に最も近い点を求める (投影する) ことに相当 • fitting 誤差は投影距離に相当: 𝑑2 = 𝛼𝐩 + 𝛽𝐪 − 𝐫 2 22 𝑝x 𝑝y 𝑝z = 𝛼 𝛽 𝑞x 𝑞y 𝑞z 𝑟x 𝑟y 𝑟z 𝐪 𝐩 𝐫 𝛼 𝛽 𝑑Weighted Least Squares (重み付き最小二乗)
• 各データ点ごとの誤差に、重み 𝑤𝑖 をつける • 重要度、確信度 • 以下の誤差を最小化: 𝑖=1 𝑁 𝑤𝑖 𝑓 𝐱𝑖 − 𝑓𝑖 2 23 𝑥1 𝑦1 𝑧1 1 𝑥2 𝑦2 𝑧2 1 𝑥𝑁 𝑦𝑁 𝑧𝑁 1 𝑎 𝑏 𝑐 𝑑 𝑓1 𝑓2 𝑓𝑁 ・・・ ・・・ = 𝑤1 𝑤2 𝑤𝑁 𝑤1 𝑤2 𝑤𝑁 𝐴 𝐜 𝐟 𝑊 𝑊Weighted Least Squares (重み付き最小二乗)
24 𝐴 𝐜 𝐟 𝐜 𝐴⊺𝑊2𝐴 −1 𝐴⊺𝑊2 𝐟 = = 𝑊 𝑊Moving Least Squares (移動最小二乗)
• 重み 𝑤𝑖 が、評価位置 𝐱 に依存: 𝑤𝑖 𝐱 = 𝑤( 𝐱 − 𝐱𝑖 ) • よく使われる関数 (Kernel): • 𝑤 𝑟 = 𝑒−𝑟2/𝜎2 • 𝑤 𝑟 = 𝑟2+𝜖1 2 • 重み行列 𝑊 が 𝐱 に依存 係数 𝑎, 𝑏, 𝑐, 𝑑 が 𝐱 に依存 25 𝑓 𝐱 = 𝑥 𝑦 𝑧 1 𝑎(𝐱) 𝑏(𝐱) 𝑐(𝐱) 𝑑(𝐱) 𝐴⊺𝑊 𝐱 2𝐴 −1 𝐴⊺𝑊 𝐱 2 𝐟 評価位置に近いほど 大きな重み法線制約の導入
• 各データ点が表す 1 次式を考える: 𝑔𝑖 𝐱 = 𝑓𝑖 + 𝐱 − 𝐱𝑖 ⊺𝐧𝑖 • 各 𝑔𝑖 を現在位置で評価したときの誤差を最小化: 𝑖=1 𝑁 𝑤𝑖 𝐱 𝑓 𝐱 − 𝑔𝑖 𝐱 2 26 𝑥 𝑦 𝑧 1 𝑥 𝑦 𝑧 1 𝑥 𝑦 𝑧 1 𝑎 𝑏 𝑐 𝑑 𝑔1 𝐱 𝑔2 𝐱 𝑔𝑁 𝐱 ・・・ ・・・ = 𝑤1(𝐱) 𝑤2(𝐱) 𝑤𝑁(𝐱) 𝑤1(𝐱) 𝑤2(𝐱) 𝑤𝑁(𝐱)法線制約の導入
27
法線制約を利用 法線方向にオフセットして値を制約
Interpolating and Approximating Implicit Surfaces from Polygon Soup [Shen SIGGRAPH04]
Radial Basis Function による補間
(放射基底関数)
基本的な考え方
• 関数 𝑓(𝐱) を、基底関数 𝜙(𝐱) の重み付き和として定義: 𝑓 𝐱 = 𝑖=1 𝑁 𝑤𝑖𝜙(𝐱 − 𝐱𝑖) • 放射基底関数 𝜙(𝐱):𝐱 の長さのみに依存 • 𝜙 𝐱 = 𝑒− 𝐱 2/𝜎2 (Gaussian) • 𝜙 𝐱 = 1 𝐱 2+𝑐2 (Inverse Multiquadric) • 各データ点における制約 𝑓 𝐱𝑖 = 𝑓𝑖 から、重み係数 𝑤𝑖 を求める 29 基底関数をデータ位置 𝐱𝑖 に平行移動基本的な考え方
30 𝑓 𝐱1 = 𝑤1𝜙1,1 + 𝑤2𝜙1,2 + ⋯ + 𝑤𝑁𝜙1,𝑁 = 𝑓1 𝑓 𝐱2 = 𝑤1𝜙2,1 + 𝑤2𝜙2,2 + ⋯ + 𝑤𝑁𝜙2,𝑁 = 𝑓2 𝑓 𝐱𝑁 = 𝑤1𝜙𝑁,1 + 𝑤2𝜙𝑁,2 + ⋯ + 𝑤𝑁𝜙𝑁,𝑁 = 𝑓𝑁 𝜙𝑖,𝑗 = 𝜙 𝐱𝑖 − 𝐱𝑗 と表記する ・・・ これを解けば良い 𝜙1,1 𝜙1,2 𝜙1,𝑁 𝜙2,1 𝜙2,2 𝜙2,𝑁 𝜙𝑁,1 𝜙𝑁,2 𝜙𝑁,𝑁 𝑤1 𝑤2 𝑤𝑁 𝑓1 𝑓2 𝑓𝑁 ・・・ = ・・・ Φ 𝐰 𝐟Gaussian 基底関数を使う場合
• パラメタ 𝜎 の選び方によって、結果が大きく変わる!
• なるべく滑らかな結果を得るには?
31
𝜙 𝐱 = 𝑒− 𝐱 2/𝜎2
Scattered Data Interpolation for Computer Graphics [Anjyo SIGGRAPH14 Course]
𝜎
関数の
“曲がり具合” の尺度 (Thin-Plate Energy)
• 2 階微分 (=曲率) の大きさを空間全体で積分したもの: 𝐸2 𝑓 = 𝐱∈ℝ𝑑 Δ𝑓(𝐱) 2𝑑𝐱 • 1 次元空間の場合: 𝐸2 𝑓 = 𝑥∈ℝ 𝑓′′ 𝑥 2𝑑𝑥 • 2 次元空間の場合: 𝐸2 𝑓 = 𝐱∈ℝ2 𝑓xx 𝐱 2 + 2𝑓xy 𝐱 2 + 𝑓yy 𝐱 2 𝑑𝐱 • 3 次元空間の場合: 𝐸2 𝑓 = 𝐱∈ℝ3 𝑓xx 𝐱 2 + 𝑓yy 𝐱 2 + 𝑓zz 𝐱 2 + 2𝑓xy 𝐱 2 + 2𝑓yz 𝐱 2 + 2𝑓zx 𝐱 2 𝑑𝐱 32数学分野の知見
• 制約 𝑓 𝐱𝑖 = 𝑓𝑖 を満たす関数全体のうち、𝐸2 を最小化する関数は 以下の基底を使った RBF として表せる: • 1 次元空間の場合:𝜙 𝑥 = 𝑥 3 • 2 次元空間の場合:𝜙 𝐱 = 𝐱 2 log 𝐱 • 3 次元空間の場合:𝜙 𝐱 = 𝐱 • 参考 • 有限要素法の場合:離散化した領域上で 𝐸2 を最小化する 𝑓 を近似的に求める • RBF の場合:グリーン関数を使って 𝐸2 を最小化する 𝑓 を解析的に求める 33線形項の追加
• 𝐸2[𝑓] は 2 階微分を使って定義される 任意の線形項 𝑝 𝐱 = 𝑎𝑥 + 𝑏𝑦 + 𝑐𝑧 + 𝑑 を加えても不変: 𝐸2 𝑓 + 𝑝 = 𝐸2[𝑓] • 線形項を未知数に含めることで、関数を一意に定める: 𝑓 𝐱 = 𝑖=1 𝑁 𝑤𝑖 𝜙 𝐱 − 𝐱𝑖 + 𝑎𝑥 + 𝑏𝑦 + 𝑐𝑧 + 𝑑 34線形項の追加
35 𝑓 𝐱1 = 𝑤1𝜙1,1 + 𝑤2𝜙1,2 + ⋯ + 𝑤𝑁𝜙1,𝑁 + 𝑎𝑥1 + 𝑏𝑦1 + 𝑐𝑧1 + 𝑑 = 𝑓1 𝑓 𝐱2 = 𝑤1𝜙2,1 + 𝑤2𝜙2,2 + ⋯ + 𝑤𝑁𝜙2,𝑁 + 𝑎𝑥2 + 𝑏𝑦2 + 𝑐𝑧2 + 𝑑 = 𝑓2 𝑓 𝐱𝑁 = 𝑤1𝜙𝑁,1 + 𝑤2𝜙𝑁,2 + ⋯ + 𝑤𝑁𝜙𝑁,𝑁 + 𝑎𝑥𝑁 + 𝑏𝑦𝑁 + 𝑐𝑧𝑁 + 𝑑 = 𝑓𝑁 ・・・ 𝜙1,1 𝜙1,2 𝜙1,𝑁 𝑥1 𝑦1 𝑧1 1 𝜙2,1 𝜙2,2 𝜙2,𝑁 𝑥2 𝑦2 𝑧2 1 𝜙𝑁,1 𝜙𝑁,2 𝜙𝑁,𝑁 𝑥𝑁 𝑦𝑁 𝑧𝑁 1 𝑤1 𝑤2 𝑤𝑁 𝑎 𝑏 𝑐 𝑑 𝑓1 𝑓2 𝑓𝑁 ・・・ ・・・ = ・・・ Φ 𝐰 𝐟 P 𝐜 4 個の未知数 𝑎, 𝑏, 𝑐, 𝑑 が追加されたので、 4 個の制約を追加する 必要がある追加の制約条件:線形関数の再現性
• 「全てのデータ点の制約 𝐱𝑖, 𝑓𝑖 がある線形関数からのサンプリング であるとき、RBF による補間結果はその線形関数と一致する」 • これを満たすための条件: • 𝑖=1𝑁 𝑤𝑖 = 0 • 𝑖=1𝑁 𝑥𝑖𝑤𝑖 = 0 • 𝑖=1𝑁 𝑦𝑖𝑤𝑖 = 0 • 𝑖=1𝑁 𝑧𝑖𝑤𝑖 = 0 36 𝜙1,1 𝜙1,2 𝜙1,𝑁 𝑥1 𝑦1 𝑧1 1 𝜙2,1 𝜙2,2 𝜙2,𝑁 𝑥2 𝑦2 𝑧2 1 𝜙𝑁,1 𝜙𝑁,2 𝜙𝑁,𝑁 𝑥𝑁 𝑦𝑁 𝑧𝑁 1 𝑥1 𝑥2 𝑥𝑁 0 0 0 0 𝑦1 𝑦2 𝑦𝑁 0 0 0 0 𝑧1 𝑧2 𝑦𝑁 0 0 0 0 1 1 1 0 0 0 0 𝑤1 𝑤2 𝑤𝑁 𝑎 𝑏 𝑐 𝑑 𝑓1 𝑓2 𝑓𝑁 0 0 0 0 ・・・ ・・・ = ・・・ ・・・ Φ P 𝐰 𝐟 𝐜 P⊺勾配制約の導入
• 基底関数の勾配 𝛁𝜙 の重み付き和を導入: 𝑓 𝐱 = 𝑖=1 𝑁 𝑤𝑖𝜙 𝐱 − 𝐱𝑖 + 𝐯𝑖⊺𝛁𝜙 𝐱 − 𝐱𝑖 + 𝑎𝑥 + 𝑏𝑦 + 𝑐𝑧 + 𝑑 • 𝑓 の勾配: 𝛁𝑓 𝐱 = 𝑖=1 𝑁 𝑤𝑖𝛁𝜙 𝐱 − 𝐱𝑖 + H𝜙 𝐱 − 𝐱𝑖 𝐯𝑖 + 𝑎 𝑏 𝑐 • 勾配の制約 𝛁𝑓 𝐱𝑖 = 𝐧𝑖 を追加 37 H𝜙 = 𝜙xx 𝜙xy 𝜙xz 𝜙yx 𝜙yy 𝜙yz 𝜙zx 𝜙zy 𝜙zz勾配の制約: 𝛁𝑓 𝐱1 = 𝑤1𝛁𝜙1,1 + H𝜙1,1𝐯1 + 𝑤2𝛁𝜙1,2 + H𝜙1,2𝐯2 + ⋯ + 𝑤𝑁𝛁𝜙1,𝑁 + H𝜙1,𝑁𝐯𝑁 + 𝑎 𝑏 𝑐 = 𝐧1 値の制約: 𝑓 𝐱1 = 𝑤1𝜙1,1 + 𝐯1⊺𝛁𝜙1,1 + 𝑤2𝜙1,2 + 𝐯2⊺𝛁𝜙1,2 + ⋯ + 𝑤𝑁𝜙1,𝑁 + 𝐯𝑁⊺ 𝛁𝜙1,𝑁 + 𝑎𝑥1 + 𝑏𝑦1 + 𝑐𝑧1 + 𝑑 = 𝑓1
勾配制約の導入
• 1 番目のデータ点について: 38Hermite Radial Basis Functions Implicits [Macedo CGF10]
𝐧1 𝑓1 𝜙1,1 𝛁𝜙1,1 ⊺ H𝜙1,1 𝛁 𝜙 1,1 𝜙1,2 𝛁𝜙1,2 ⊺ H𝜙1,2 𝛁 𝜙 1,2 𝜙1,𝑁 𝛁𝜙1,𝑁 ⊺ H𝜙1,𝑁 𝛁 𝜙 1,𝑁 𝑥1 𝑦1 𝑧1 1 1 0 0 0 0 1 0 0 0 0 1 0 ・・・ P1 = 𝑤1 𝐯1 𝐯2 𝑤2 ・・・ 𝐯𝑁 𝑤𝑁 𝑎 𝑏 𝑐 𝑑 Φ1,1 Φ1,2 Φ1,𝑁
39 𝐧1 𝑓1 = 𝑤1 𝐯1 𝐯2 𝑤2 ・・・ 𝐯𝑁 𝑤𝑁 𝑎 𝑏 𝑐 𝑑 P1 Φ1,1 Φ1,2 Φ1,𝑁 ・・・ ・・・ P2 Φ2,1 Φ2,2 Φ2,𝑁 P𝑁 Φ𝑁,1 Φ𝑁,2 Φ𝑁,𝑁 ・・・ 𝑃1⊺ 𝑃2⊺ 𝑃𝑁⊺ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 𝐧2 𝑓2 𝐧𝑁 𝑓𝑁 ・・・ ・・・
比較
40
参考サーベイ等
• State of the Art in Surface Reconstruction from Point Clouds [Berger EG14 STAR]
• A survey of methods for moving least squares surfaces [Cheng PBG08]
• Scattered Data Interpolation for Computer Graphics [Anjyo SIGGRAPH14 Course]
• An as-short-as-possible introduction to the least squares, weighted least squares and moving least squares for scattered data
approximation and interpolation [Nealen TechRep04]