Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
コンピュータグラフィクス論
–モデリング (1) –
2017年4月13日
高山健志
パラメトリック曲線
• X座標とY座標がパラメタ t (≒時刻) によって決まるもの• 例:サイクロイド
𝑥 𝑡 = 𝑡 − sin 𝑡𝑦 𝑡 = 1 − cos 𝑡
•接線ベクトル: 𝑥′ 𝑡 , 𝑦′ 𝑡
•多項式曲線: 𝑥 𝑡 = 𝑖 𝑎𝑖𝑡𝑖
2
3次エルミート曲線
•両端での値と微分の制約を満たす(=エルミート補間) ような、多項式曲線
•制約が4つなので、4自由度が必要 4個の係数 3次多項式• 𝑥 𝑡 = 𝑎0 + 𝑎1𝑡 + 𝑎2𝑡
2 + 𝑎3𝑡3
• 𝑥′ 𝑡 = 𝑎1 + 2𝑎2𝑡 + 3𝑎3𝑡2
•制約値を代入すれば係数が求まる
3
𝑥 0 = 𝑥0𝑥 1 = 𝑥1𝑥′(0) = 𝑥0
′
𝑥′ 1 = 𝑥1′
𝑥 0 = 𝑎0 = 𝑥0𝑥 1 = 𝑎0 + 𝑎1 + 𝑎2 + 𝑎3 = 𝑥1𝑥′ 0 = 𝑎1 = 𝑥0
′
𝑥′ 1 = 𝑎1 + 2 𝑎2 + 3 𝑎3 = 𝑥1′
𝑎0 = 𝑥0𝑎1 = 𝑥0
′
𝑎2 = −3 𝑥0 + 3 𝑥1 − 2 𝑥0′ − 𝑥1
′
𝑎3 = 2 𝑥0 − 2 𝑥1 + 𝑥0′ + 𝑥1
′
t
x
0 1
ベジェ (Bezier[ベズィエ]) 曲線
•入力:3点𝑃0, 𝑃1, 𝑃2 (制御点)
• 任意空間 (2D, 3D) の座標
•求めたいもの:曲線𝑃 𝑡 で𝑃 0 = 𝑃0𝑃 1 = 𝑃2
を満たしつつ、𝑃1に “引っ張られる” もの
4
𝑃 𝑡 = 1 − 𝑡 𝑃0 + 𝑡 𝑃2
𝑃 𝑡 = ?
𝑃1
𝑃2
𝑃0
t=0
t=1
線分を表す式
ベジェ曲線を表す式
ベジェ曲線
• 𝑃01 𝑡 = 1 − 𝑡 𝑃0 + 𝑡 𝑃1
• 𝑃12 𝑡 = 1 − 𝑡 𝑃1 + 𝑡 𝑃2• 𝑃01 0 = 𝑃0• 𝑃12 1 = 𝑃2
• アイディア: ”補間を補間”𝑡 ∶ 0 → 1のとき 𝑃01 → 𝑃12 となるように線形補間
• 𝑃012 𝑡 = 1 − 𝑡 𝑃01 𝑡 + 𝑡 𝑃12 𝑡
= 1 − 𝑡 1 − 𝑡 𝑃0 + 𝑡 𝑃1 + 𝑡 1 − 𝑡 𝑃1 + 𝑡 𝑃2
= 1 − 𝑡 2𝑃0 + 2𝑡 1 − 𝑡 𝑃1 + 𝑡2𝑃2
5
𝑃1
𝑃2
𝑃0
𝑃12 𝑡
𝑡
𝑡
𝑡
1 − 𝑡
1 − 𝑡
𝑃01 𝑡𝑃012 𝑡
1 − 𝑡
2次ベジェ曲線
線分の式
線分の式
ベジェ曲線
• 𝑃01 𝑡 = 1 − 𝑡 𝑃0 + 𝑡 𝑃1
• 𝑃12 𝑡 = 1 − 𝑡 𝑃1 + 𝑡 𝑃2• 𝑃01 0 = 𝑃0• 𝑃12 1 = 𝑃2
• アイディア: ”補間を補間”𝑡 ∶ 0 → 1のとき 𝑃01 → 𝑃12 となるように線形補間
• 𝑃012 𝑡 = 1 − 𝑡 𝑃01 𝑡 + 𝑡 𝑃12 𝑡
= 1 − 𝑡 1 − 𝑡 𝑃0 + 𝑡 𝑃1 + 𝑡 1 − 𝑡 𝑃1 + 𝑡 𝑃2
= 1 − 𝑡 2𝑃0 + 2𝑡 1 − 𝑡 𝑃1 + 𝑡2𝑃2
6
𝑃1
𝑃2
𝑃0
2次ベジェ曲線
• 全く同じ考え方を4点𝑃0, 𝑃1, 𝑃2 𝑃3に適用:
𝑡 ∶ 0 → 1のとき 𝑃012 → 𝑃123
となるように線形補間
• 𝑃0123 𝑡 = 1 − 𝑡 𝑃012 𝑡 + 𝑡 𝑃123 𝑡
= 1 − 𝑡 1 − 𝑡 2𝑃0 + 2𝑡 1 − 𝑡 𝑃1 + 𝑡2𝑃2 + 𝑡 1 − 𝑡
2𝑃1 + 2𝑡 1 − 𝑡 𝑃2 + 𝑡2𝑃3
= 1 − 𝑡 3𝑃0 + 3𝑡 1 − 𝑡2𝑃1 + 3𝑡
2 1 − 𝑡 𝑃2 + 𝑡3𝑃3
3次ベジェ曲線
7
𝑃123 𝑡
𝑃012 𝑡𝑃0123 𝑡𝑡
1 − 𝑡
𝑃1
𝑃3
𝑃0
𝑃2
3次ベジェ曲線
2次ベジェ曲線
2次ベジェ曲線
• 全く同じ考え方を4点𝑃0, 𝑃1, 𝑃2 𝑃3に適用:
𝑡 ∶ 0 → 1のとき 𝑃012 → 𝑃123
となるように線形補間
• 𝑃0123 𝑡 = 1 − 𝑡 𝑃012 𝑡 + 𝑡 𝑃123 𝑡
= 1 − 𝑡 1 − 𝑡 2𝑃0 + 2𝑡 1 − 𝑡 𝑃1 + 𝑡2𝑃2 + 𝑡 1 − 𝑡
2𝑃1 + 2𝑡 1 − 𝑡 𝑃2 + 𝑡2𝑃3
= 1 − 𝑡 3𝑃0 + 3𝑡 1 − 𝑡2𝑃1 + 3𝑡
2 1 − 𝑡 𝑃2 + 𝑡3𝑃3
• 両端における接線の制御がしやすいCGで頻繁に使われる
3次ベジェ曲線
8
𝑃1
𝑃3
𝑃0
𝑃2
𝑃0123 𝑡
3次ベジェ曲線
n次ベジェ曲線
•入力:n+1個の制御点𝑃0, ⋯ , 𝑃𝑛
𝑃 𝑡 =
𝑖=0
𝑛
𝑛C𝑖 𝑡𝑖 1 − 𝑡 𝑛−𝑖 𝑃𝑖
9
𝑏𝑖𝑛(𝑡)
バーンスタイン基底関数
1 − 𝑡 4𝑃0 +
4𝑡 1 − 𝑡 3𝑃1 +
6𝑡2 1 − 𝑡 2𝑃2 +
4𝑡3 1 − 𝑡 𝑃3 +
𝑡4𝑃4
1 − 𝑡 5𝑃0 +
5𝑡 1 − 𝑡 4𝑃1 +
10𝑡2 1 − 𝑡 3𝑃2 +
10𝑡3 1 − 𝑡 2𝑃3 +
5𝑡4 1 − 𝑡 𝑃4 +
𝑡5𝑃5
4次ベジェ曲線 5次ベジェ曲線
3次ベジェ曲線と3次エルミート曲線の関係
• 3次ベジェ曲線とその微分:• 𝑃 𝑡 = 1 − 𝑡 3𝑃0 + 3𝑡 1 − 𝑡
2𝑃1 + 3𝑡2 1 − 𝑡 𝑃2 + 𝑡
3𝑃3• 𝑃′(𝑡) = −3 1 − 𝑡 2𝑃0 + 3 1 − 𝑡
2 − 2𝑡(1 − 𝑡) 𝑃1 + 3 2𝑡 1 − 𝑡 − 𝑡2 𝑃2 + 3𝑡
2𝑃3
•端点での微分値:
• 𝑃′ 0 = −3𝑃0 + 3𝑃1 𝑃1 = 𝑃0 +1
3𝑃′ 0
• 𝑃′ 1 = −3𝑃2 + 3𝑃3 𝑃2 = 𝑃3 −1
3𝑃′ 1
• 3次多項式曲線を定義する形式が違うだけで、本質的には同じもの
10
𝑃1𝑃3
𝑃0
𝑃2
𝑃′(0)
𝑃′(1)
ベジェ曲線の評価方法
•方法1:多項式をそのまま評価する• 単純で速いが、数値的に不安定になる場合も
•方法2:ド・カステリョ [de Casteljau ] のアルゴリズム• ベジェ曲線の再帰的な定義そのものに倣う
• 計算手順は増えるが、数値的に安定
• ベジェ曲線の分割にも使える
11
ベジェ曲線の描画方法
• 最終的には折れ線で近似的に描く
• パラメタtをどうサンプリングするかが問題
• 方法1:一定間隔でサンプリング
• 実装が簡単
• サンプル点の密度が必要十分でなくなる?
• 方法2:適応的なサンプリング
• 制御点列が直線状でなければde Casteljau
の方法で分割する
12
さらなる制御法:有理ベジェ曲線• ベジェ曲線は、制御点の “重み付き平均”
と見ることができる
• 𝑃012 𝑡 = 1 − 𝑡2𝑃0 + 2𝑡 1 − 𝑡 𝑃1 + 𝑡
2 𝑃2= 𝜆0 𝑡 𝑃0+ 𝜆1 𝑡 𝑃1+ 𝜆2 𝑡 𝑃2
• 重要な性質:partition of unity
𝜆0 𝑡 + 𝜆1 𝑡 + 𝜆2 𝑡 = 1 ∀𝑡
• 各制御点の重み𝜆𝑖 𝑡 に任意係数𝑤𝑖を掛ける:
𝜉𝑖 𝑡 = 𝑤𝑖 𝜆𝑖(𝑡)
• 正規化して新しい重みを得る:
𝜆𝑖′ 𝑡 =
𝜉𝑖 𝑡
𝑗 𝜉𝑗 𝑡
13
w0 = w2 = 1
多項式曲線ではない円弧なども表現可能
3次スプライン
•複数の3次曲線を滑らかに繋げたもの• 区分的多項式
• 区分の境目で値と微分値が共通 (C1連続)
•パラメタ範囲は [0, 1]とは限らない• ただし 𝑡𝑘 < 𝑡𝑘+1
•値のみを入力として、微分値を適切に自動推定したい
14
t
x
t0 t1 t2 t3 t4 t5
x0(t) x1(t) x2(t) x3(t) x4(t)
PowerPointの曲線ツール
3次Catmull-Romスプライン
•区間 𝑡𝑘 ≤ 𝑡 ≤ 𝑡𝑘+1における3次関数 𝑥𝑘(𝑡)を、前後の制約値 𝑥𝑘−1, 𝑥𝑘, 𝑥𝑘+1, 𝑥𝑘+2 から決定
15𝑡𝑘−1 𝑡𝑘 𝑡𝑘+1 𝑡𝑘+2 𝑡
𝑥
𝑥𝑘
𝑥𝑘−1𝑥𝑘+1
𝑥𝑘+2
𝑥𝑘(𝑡)
3次Catmull-Romスプライン:ステップ1
• 𝑡𝑘 → 𝑡𝑘+1 のとき 𝑥𝑘 → 𝑥𝑘+1 となるように補間直線
𝑙𝑘(𝑡) = 1 −𝑡 − 𝑡𝑘𝑡𝑘+1 − 𝑡𝑘
𝑥𝑘 +𝑡 − 𝑡𝑘𝑡𝑘+1 − 𝑡𝑘
𝑥𝑘+1
16𝑡𝑘−1 𝑡𝑘 𝑡𝑘+1 𝑡𝑘+2 𝑡
𝑥
𝑙𝑘−1(𝑡) 𝑙𝑘(𝑡) 𝑙𝑘+1(𝑡)
3次Catmull-Romスプライン:ステップ2
• 𝑡𝑘−1 → 𝑡𝑘+1 のとき 𝑙𝑘−1 → 𝑙𝑘 となるように補間 2次曲線
𝑞𝑘(𝑡) = 1 −𝑡 − 𝑡𝑘−1𝑡𝑘+1 − 𝑡𝑘−1
𝑙𝑘−1(𝑡) +𝑡 − 𝑡𝑘−1𝑡𝑘+1 − 𝑡𝑘−1
𝑙𝑘(𝑡)
• 3点 𝑡𝑘−1, 𝑥𝑘−1 , 𝑡𝑘 , 𝑥𝑘 , 𝑡𝑘+1, 𝑥𝑘+1 を通る
17𝑡𝑘−1 𝑡𝑘 𝑡𝑘+1 𝑡𝑘+2 𝑡
𝑥
𝑞𝑘(𝑡)
𝑞𝑘+1(𝑡)
3次Catmull-Romスプライン:ステップ3
• 𝑡𝑘 → 𝑡𝑘+1 のとき 𝑞𝑘 → 𝑞𝑘+1 となるように補間 3次曲線
𝑥𝑘 𝑡 = 1 −𝑡 − 𝑡𝑘𝑡𝑘+1 − 𝑡𝑘
𝑞𝑘 𝑡 +𝑡 − 𝑡𝑘𝑡𝑘+1 − 𝑡𝑘
𝑞𝑘+1(𝑡)
18𝑡𝑘−1 𝑡𝑘 𝑡𝑘+1 𝑡𝑘+2 𝑡
𝑥
𝑥𝑘(𝑡)
まとめ:• 各制御点における微分値が、それ自身とその前後の3つの制御点を通る2次曲線から定まる
• 各区間は端点の微分値を満たす3次曲線
3次Catmull-Romスプラインの計算方法
19A recursive evaluation algorithm for a class of Catmull-Rom splines [Barry,Colgman,SIGGRAPH88]
𝑃 𝑡0 = 𝑃0
𝑃 𝑡1 = 𝑃1
𝑃 𝑡2 = 𝑃2
𝑃 𝑡3 = 𝑃3
𝑃 𝑡𝑡1 ≤ 𝑡 ≤ 𝑡2
パラメタ区分 𝑡𝑘 (ノット列)の決め方
• 前提:𝑡0 = 0
• Uniform (一様)
𝑡𝑘 = 𝑡𝑘−1 + 1
• Chordal (弧長に基づく)
𝑡𝑘 = 𝑡𝑘−1 + 𝑃𝑘−1 − 𝑃𝑘
• Centripetal (求心性?)
𝑡𝑘 = 𝑡𝑘−1 + 𝑃𝑘−1 − 𝑃𝑘
20Parameterization of Catmull-Rom Curves [Yuksel,Schaefer,Keyser,CAD11]
3次Catmull-Romスプラインの応用
21Parameterization of Catmull-Rom Curves [Yuksel,Schaefer,Keyser,CAD11]
Bスプライン曲線•多項式スプラインを表すもう一つの方法
• 曲線を基底関数 (basis)の重ね合わせで表す• 3次の基底関数が実用上一般的
• サブディビジョンサーフェスと深い関係次回講義で説明
• Non-Uniform Rational B-Spline• Non-Uniform = ノット列 (𝑡𝑘)の間隔が一様でない• Rational = 制御点が重みを持つ (有理式曲線)
• (ややこしいので本講義では説明しない)
•秀逸なFlashデモ:http://geometrie.foretnik.net/files/NURBS-en.swf
22
パラメトリック曲面
•パラメタが1個曲線 𝑃(𝑡)
•パラメタが2個曲面 𝑃 𝑠, 𝑡
• 3次ベジェ曲面:• 入力:4×4=16個の制御点 𝑃𝑖𝑗
𝑃 𝑠, 𝑡 =
𝑖=0
3
𝑗=0
3
𝑏𝑖3 𝑠 𝑏𝑗
3 𝑡 𝑃𝑖𝑗
23
バーンスタイン基底関数
𝑏03 𝑡 = 1 − 𝑡 3
𝑏13 𝑡 = 3𝑡 1 − 𝑡 2
𝑏23 𝑡 = 3𝑡2(1 − 𝑡)
𝑏33 𝑡 = 𝑡3
パラメトリック曲面を用いた3Dモデリング
•長所• 滑らかな曲面をコンパクトに表現できる
• 球や円錐面などを正確に表現できる
•短所• 複数のパッチをうまく配置するのが難しい
• 複数のパッチ間の連続性を保つのが難しい
•シンプルなパーツの組み合わせで人工物をデザインするのによく使われる
24
参考
• http://en.wikipedia.org/wiki/Bezier_curve
• http://antigrain.com/research/adaptive_bezier/
• https://groups.google.com/forum/#!topic/comp.graphics.algorithms/2FypAv29dG4
• http://en.wikipedia.org/wiki/Cubic_Hermite_spline
• http://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline
25