スイープ表現

draft CG

CSG表現 では、プリミティブをどう組み合わせたかという手順が、そのまま立体を表すデータになっていました。形をつくる手順を残す表現は他にもあり、断面を動かした軌跡として立体を表すのがスイープ表現です。

断面の軌跡
CG

スイープ表現で立体を決めるのは、動かす図形と、その動かし方の2つです。

動かす図形を断面といい、断面が動いていく経路を軌道といいます。断面が軌道に沿って動き、通過した範囲、つまり断面の軌跡が、できあがる立体にあたります。

そのため、スイープ表現がデータとして持つのは、断面の形と軌道だけです。立体の表面がどんな面で囲まれているかは、この2つから導かれる結果であって、データそのものには含まれていません。

同じ断面からでも、軌道の取り方によって別の立体ができます。代表的なのは、断面を直線に沿って動かす平行移動スイープと、軸のまわりに回す回転移動スイープの2つです。

軌道は直線や円に限りません。自由な曲線に沿って断面を動かしたり、動かしながら断面の大きさや向きを変えたりするスイープもあります。

平行移動スイープ
CG

平行移動スイープは、断面を直線に沿って平行移動させるスイープです。

断面は形も向きも変えないまま動いていくため、軌跡は断面がそのまま伸びた柱状の立体になります。円を動かせば円柱、多角形を動かせば角柱です。断面に穴があいていれば、その穴も同じだけ伸びて、内側の空いた管になります。

軌道の向きは、断面に垂直でなくてもかまいません。斜めに動かせば、同じ断面のまま傾いた柱になります。

アルミサッシの枠やパイプ、レールのように、同じ断面がまっすぐ続く部材は、断面の形と動かす距離だけで言い表せます。断面を描き直さなくても、距離を書き換えるだけで長さの違う立体になります。

多角形の断面を直線の軌道に沿って動かし、通過した範囲が柱状の立体になる様子を見せる図
断面・軌道・軌跡にラベルを付ける
動かす距離をスライダーで変えられるようにし、軌道を斜めに傾けられるようにもする

回転移動スイープ
CG

軌道が直線ではなく、1本の軸のまわりを回る円になるのが回転移動スイープです。

断面を軸のまわりに360度回すと、軌跡は軸を中心とする回転体になります。コップや皿、ボトルのように、ろくろや旋盤で削り出したような形が、断面1枚から得られます。

中身が詰まるか空洞ができるかは、断面と軸の位置関係で決まります。断面が軸に接していれば詰まった立体になり、軸から離れていれば、軸を囲む空洞ができます。円を軸から離して回せば、ドーナツ形の立体です。

軸のまわりを一周させず、途中で止めることもできます。長方形の断面を180度だけ回せば、円柱を半分に切った形になります。

同じ立体を表す断面と軌道の組は、1通りに決まりません。円柱は、円の断面を平行移動させても、長方形の断面を軸のまわりに360度回しても得られます。

断面を軸のまわりに回転させ、通過した範囲が回転体になる様子を見せる図
回転させる角度と、軸から断面までの距離をスライダーで変えられるようにする(離すとドーナツ形になることを見せる)

分割点による面の生成
CG

断面と軌道が決まれば立体の形は定まりますが、その立体はまだ面をデータとして持っていません。画面への描画のように面を単位として進む処理へ渡すには、軌跡を面の集まりに直す必要があります。

そこで、断面の輪郭と軌道を、それぞれ有限個の点で区切ります。この点を分割点といいます。円のような曲線を含む輪郭も、分割点を結んだ折れ線として扱えるようになります。

軌道の分割点ごとに、その位置の断面を並べます。隣り合う2枚の断面で、対応する分割点どうしを結ぶと、4つの点で囲まれた面が輪のように並びます。この輪を軌道の分割数だけ重ねたものが立体の側面で、両端は断面がそのまま面になります。

分割点を増やせば、面の集まりは元の軌跡に近づきます。その分だけ面の数も増えるため、どこまで細かく分けるかは、形の忠実さとデータ量との釣り合いで決まります。

円の断面を分割点で近似し、軌道に沿って並べた断面どうしを面で繋いでいく様子を見せる図
断面の分割数と軌道の分割数をそれぞれスライダーで変えられるようにし、粗く分けると多面体に見えることを確認できるようにする

こうしてできあがるのは、頂点・稜線・面の繋がりとして立体を表したデータです。この繋がりを崩さないように頂点・稜線・面を足し引きする操作がオイラー操作 で、スイープによる形状の生成も、その組み合わせとして行われます。

面の繋がりで立体を表す方法そのものは、境界表現 で学びましょう。