3次元形状をモデリングす る - ocw.nagoya-u.jp · 3次元形状モデリング...
TRANSCRIPT
3次元形状モデリング
境界表現によるモデリングB-Reps (boundary representation)表現
基本立体の集合演算によるモデリングCSG (Constructive Solid Geometry)表現
空間分割によるモデリングボクセル(voxel)表現
オクトリー(octree)表現
その他メタボール(meta-ball)表現
CSRBF(compactly supported radial basis function)表現
B-Reps 表現
3次元形状を頂点,稜線(直線/曲線),面分(平面/曲面)の幾何情報とそれらの接続情報で表現する方式を B-Reps 表現と呼ぶ.
幾何情報頂点の座標値 (x,y,z)稜線を表す数式
面分を表す数式
接続情報(位相情報)稜線と頂点の接続情報
面分と稜線の接続情報 立体であることを保証するための条件などは位相幾何学によって論じられる.
B-Reps 表現(cont.)立体であることを保証するための必要十分条件を考えよう.
四面体(ポリゴン)について考える.
境界を求める演算子を ∂ とする.
立体 P について
立体であるための必要条件
A
B
C
D
立体 PP ABC CDA BDC BAD
ABC AB BC CA
AB A BA 0
∂ = Δ + Δ + Δ + Δ
∂Δ = + +
∂ = − +∂ =
uuur uuur uuur
uuur
P 0, ABC 0 , AB 0∂∂ = ∂∂Δ = ∂∂ =uuur
L L
B-Reps 表現(cont.)
四面体について考えよう.(cont.)境界の隣接行列と用いれば
0
1 2 3
1 1 1 1
1 0 0 11 0 1 0 0 1 1 0 1 0 1
1 1 0 0 1 0 1 1 0 0 1
0 1 1 1 0 0 0 1 1 0 10 0 0 1 1 1 0 0 1 1 1
0 1 0 1
I
I I I
= ⎢ ⎥⎣ ⎦−⎡ ⎤
⎢ ⎥− −⎡ ⎤ ⎧ ⎫⎢ ⎥⎢ ⎥ ⎪ ⎪⎢ ⎥− − − ⎪ ⎪⎢ ⎥= = = ⎨ ⎬⎢ ⎥⎢ ⎥− − ⎪ ⎪⎢ ⎥⎢ ⎥ ⎪ ⎪⎢ ⎥− − −⎣ ⎦ ⎩ ⎭⎢ ⎥−⎢ ⎥⎣ ⎦
ABC CDA BDC BADΔ Δ Δ ΔA B C D
ABCD
AB BC CA DC BD DAuuur uuur uuur uuur uuur uuur
ABCCDABDCBAD
ΔΔΔΔ
0 1 2 3
0 1 2
0 1
P 0 0ABC 0 0
AB 0 0
I I I II I I
I I
∂∂ = ⇔ =
∂∂Δ = ⇔ = ⎢ ⎥⎣ ⎦
∂∂ = ⇔ = ⎢ ⎥⎣ ⎦
Luuur
L
AB
BC
CA
DC
BD
DA
uuur
uuur
uuur
uuur
uuur
uuur
B-Reps 表現(cont.)
立体であるための十分条件
オイラー・ポアンカレの式球と位相同型な立体では,面の数 f, 稜線の数 e, 頂点の数 v のとき
拡張オイラー・ポアンカレの式切り離された立体の数 b, 貫通する穴の数 g,面上の穴(リング)の数 h のとき
2f e v− + =
2 2f e v h b g− + − = −
向き付け
B-Reps 表現(cont.)
オイラー変換拡張オイラー・ポアンカレの式を書き換える.
v, e, f, h, g, b は正の整数であるので,x は6次元空間の整数値からなる格子点となる.
この格子点から格子点への移動をオイラー変換と呼ぶ.
( ) 2 2 0
1 1 1 1 2 2T
T
z v e f h g b
v e f h g b
= − + − + − = ⋅ =
= − − −⎢ ⎥⎣ ⎦= ⎢ ⎥⎣ ⎦
x a
a
x
x 6次元超平面式
B-Reps 表現(cont.)
オイラー変換(cont.)拡張オイラー・ポアンカレの式は6次元超平面式であるので,独立なベクトルは5つである.それを di(i=1,2,…,5) とする.
拡張オイラー・ポアンカレの式を満たしながらの格子点の移動は dz(x)/dx=a から dx=di dt (i=1,2,…,5) とすれば,dz(x)= a⋅di dt =0 あるいは a⋅di=0 (i=1,2,…,5) を満たす.したがって,x は次式で与えられる.
1 1 2 2 3 3 4 4 5 5 6n n n n n n= + + + + +x d d d d d a
6次元超平面式の法線ベクトル a の方向への平行移動
B-Reps 表現(cont.)
オイラー変換(cont.)di (i=1,2,…,5) の各要素を 0,−1,1 の組み合わせから
選択すれば,例えば
1 2 3 4 5
1 0 1 0 01 1 0 1 10 1 1 0 0
, , , , 0 0 0 1 10 0 0 1 00 0 1 0 0
(mev) (mfe) (mbfv
⎧ ⎫ ⎧ ⎫ ⎧ ⎫ ⎧ ⎫ ⎧ ⎫⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪= = = = =⎨ ⎬ ⎨ ⎬ ⎨ ⎬ ⎨ ⎬ ⎨ ⎬−⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎩ ⎭ ⎩ ⎭ ⎩ ⎭ ⎩ ⎭ ⎩ ⎭
d d d d d
) (mehg) (me-kh)
オイラーオペレータ あるいは ニーモニック・コード(m=1, k=−1)
B-Reps 表現(cont.)
オイラー変換(cont.)オイラーオペレータによるオイラー変換
1 1 2 2 3 3 4 4 5 5 6
1
2
3
4
5
6
1
1 0 1 0 0 11 1 0 1 1 10 1 1 0 0 10 0 0 1 1 10 0 0 1 0 20 0 1 0 0 2
n n n n n nnvnenfnhngnb
−
= + + + + +
− ⎧ ⎫⎧ ⎫ ⎡ ⎤⎪ ⎪⎪ ⎪ ⎢ ⎥− ⎪ ⎪⎪ ⎪ ⎢ ⎥⎪ ⎪⎪ ⎪ ⎢ ⎥⎪ ⎪ ⎪ ⎪⇔ = ⇔ =⎨ ⎬ ⎨ ⎬⎢ ⎥− −⎪ ⎪ ⎪ ⎪⎢ ⎥
⎪ ⎪ ⎪ ⎪⎢ ⎥⎪ ⎪ ⎪ ⎪⎢ ⎥
−⎢ ⎥⎪ ⎪ ⎪ ⎪⎩ ⎭ ⎣ ⎦ ⎩ ⎭⇔ =
x d d d d d a
x An
n A xオイラーオペレータを使用した回数
B-Reps 表現(cont.)
オイラー変換(cont.)四面体の場合
1
2
3
4
5
6
4 mev 36 mfe 34 mbfv 10 mehg 00 mehg 01 0
nvnenfnhngnb
⎧ ⎫⎧ ⎫ ⎧ ⎫ ⎧ ⎫⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪= = ⇔ = =⎨ ⎬ ⎨ ⎬ ⎨ ⎬ ⎨ ⎬
⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪⎩ ⎭ ⎩ ⎭ ⎩ ⎭⎩ ⎭
x n
mbfv: 立体と面と頂点を作成mev: 稜線を追加()作成し,頂点を作成mef: 面と稜線を追加mehg: 辺を追加しリングと穴を一つずつ作成me-kh: 稜線を追加しリングを削除
B-Reps 表現(cont.)B-Reps 表現における集合計算
次の手順をオイラー変換と同時に行う.立体 A のすべての面と立体 Pi(i=1,2,…,m)のすべての面の交線を求める.
A, Pi のすべての稜線と求めた交線の交点を求め,新しい頂点と稜線と面の関係のデータを作成する.
集合演算に従い,不要となる頂点,稜線,面に消去のマークをつけ,頂点,稜線,面に追加のマークを付ける.
消去マークの頂点,稜線,面を削除する.
局所演算(cont.)面取り(chamfer, fillet)
chamfer: 頂点あるいは稜線を平面で置き換える.
fillet: 頂点あるいは稜線を球面あるいは円筒面で置き換える.
せん断(shear)曲げ(bend)角度付け(angle)
B-Reps 表現(cont.)
B-Reps 表現(cont.)
データベースの構築
幾何情報(幾何データベース)と接続情報(位相データベース)が必要である.
代表的な位相データベースリスト構造(list structure)
構造が単純,同じデータを何度も使うことが欠点
データ構造位相構造
B-Reps 表現(cont.)代表的な位相データベース(cont.)
リング構造(ring structure)立体はそれを構成する面を一つ指定する.指定された面はその立体に含まれる面を順に指定して,最後に最初の面に戻るリングを構成する.
面の下に,その面に含まれるリングを一つ指定する.そのリングはその面に含まれるホールリング(穴のリング)を順に指定して,最後に最初のリングに戻るリングを構成する.
リングの下に,稜線を指定する.その稜線はそのリングに含まれる稜線を順に指定して,最後に最初の稜線に戻るリングを構成する.
稜線の下に,稜線を形成する頂点を一つ指定する.その頂点はもう一つの頂点を指定して,最後に最初の頂点に戻るリングを構成する.
B-Reps 表現(cont.)代表的な位相データベース(cont.)
ウィングド・エッジ・データ構造リング構造の発展型:構造体(文字,数値,ポインタなどを同時に扱えるデータ型)の特徴を生かしたデータ構造各稜線からの,2つの頂点,2つの面,4つの稜線へのポインタを記述する.各頂点は稜線の一つに対してポインタを持っている.各面は稜線の一つへのポインタを持っている.この構造を用いると,時計回り,反時計回りすべてのループの稜線を追跡できるアルゴリズムが作成できる.両ループの追跡が完全に行われれば,B-Reps 表現の必要条件をチェックできる.
previous
next
CSG表現
立体形状をプリミティブ(primitive)と呼ばれる基本立体の集合演算により表現する方式をCSG表現と呼ぶ.
プリミティブの表現
円柱の場合
一般に,プリミティブ Pi (i=1,2,…, m)
( )2 2 2
3cyl
0,, , R
0, 0x y r
P x y zz h z
⎧ ⎫+ − ≤⎪ ⎪= ∈⎨ ⎬− ≤ − ≤⎪ ⎪⎩ ⎭ x
y
zr
h
( ){ }3, , R 0, 1, 2, ,i ij iP x y z f j n= ∈ ≤ = L
CSG表現(cont.)
正規化された集合演算(cont.)
i iA B∩ iA B− iB A− b iA B∩
b iB A∩
A B
bA B− bB A− b bsameA B∩ b bdiffA B∩
CSG表現(cont.)
正規化された集合演算(cont.)集合
1 1 01 0 11 0 00 1 00 1 11 0 11 0 01 1 00 0 1
i iA B∩
iA B−
iB A−
b iA B∩
b iB A∩
bA B−bB A−
b bsameA B∩
b bdiffA B∩
*A B∪ *A B∩ *A B−
CSG表現(cont.)
境界評価
指定した点が立体の内部にあるか外部にあるか判定し,さらに境界表面からどのくらい離れているかを評価するために境界評価関数(boundary evaluator)が用いられる.
プリミティブ
に対する境界評価関数
( ){ }3, , R 0, 1, 2, ,i ij iP x y z f j n= ∈ ≤ = L
( ) ( )1
, , max , ,in
i ijjB x y z f x y z
==
CSG表現(cont.)
境界評価(cont.)集合演算による境界評価関数の変換
( )( ) ( ){ } ( )( ) ( ){ } ( )( ) ( ){ } ( )
min , , , , ,
, , max , , , , ,
max , , , , ,
i j i j
i j i j
i j i j
B x y z B x y z P P
B x y z B x y z B x y z P P
B x y z B x y z P P
⎧ ∪⎪⎪= − −⎨⎪
∩⎪⎩
のとき
のとき
のとき
CSG表現(cont.)
境界評価(cont.)立体の表面,交線,交点は境界評価関数を用いて次のように示される.
表面
交線 交点
( )( )
, , 0
, , 0ij
B x y z
f x y z
=⎧⎪⎨
=⎪⎩
( )( )( )
, , 0
, , 0
, , 0ij
kl
B x y z
f x y z
f x y z
⎧ =⎪
=⎨⎪ =⎩
( )( )( )( )
, , 0
, , 0
, , 0
, , 0
ij
kl
mn
B x y z
f x y z
f x y z
f x y z
=⎧⎪
=⎪⎨
=⎪⎪ =⎩
オクトリー表現
ボクセル表現ではデータ量が大きくなってしまうことを克服するために考案された表現法である.
立方体を各辺2等分により8分割(オクトリー:8分木)
する.立体の内部にある(A)立体の外部になる(B)立体の内部と外部にまたがっている(C)
例:理化学研究所ボリュームCAD(V-CAD)http://www.vcad.jp/
メタボール表現
濃度分布により立体を表現する方式をメタボール表現と呼ぶ.
例:DigiMetahttp://www.forest.impress.co.jp/article/2000/05/10/digimeta.html