ビギナーのための曲面モデリングセミナー(第1回)

ビギナーのための曲面モデリングセミナーTop | 予告編 | 第1回 | 第2回 | 第3回 | 第4回 | 第5回 ]

第1回 パラメトリック曲線・曲面|線を引く、面を張るってどういうこと?

3次元空間に広がる曲線・曲面
スケッチといえば紙の上に線を引いて、紙の上に色鉛筆で適当な色を乗せることですね。
ここでは、紙の上ではなくて、3次元の空間にスケッチすることを考えます。

3次元空間にスケッチするには、特別な紙と鉛筆が必要です。この紙と鉛筆がライノセラスです。
といってもライノセラスは、コンピュータの上で走るプログラムです。3次元空間に描く「曲線」は、コンピュータのメモリの中で「数値」と「数式」のかたまりになっています。このかたまりは「曲面」も表すことができます。
「数値と数式のかたまり」が、3次元空間に浮かぶ曲線や「ふわっ」と拡がる曲面を表す仕組みについて直感的なイメージで説明します。

コンピュータに線を描く
3次元空間に巨大なパラボラアンテナを描いてみることにします。

一番簡単な線(「曲線」)の作成方法は、何点か順序付けされた点を指定しておいてそこを通過するように曲線を定義します。人間の感覚とは良くできたもので、1列に並んだ点群(「点列」)を見て、そこに「線」を感じます。残念ながら、コンピュータにこのような感覚はないので、点と点の間を「線」で結びます。点と点の間、何もないところに線を作るということで、このような操作を「補間(interpolate)」と呼ぶこともあります。

また「曲線」とは無限に小さな間隔でたくさんの「点」を打ったものともみなせます。

ついでに他の曲線作成方法も紹介します。ライノセラスのようなモデラーは、人間の感覚として線を感じるところに、曲線を作成する機能を備えています。

1. 補間曲線: 順序付けされた点を通過するような曲線
2. フィット曲線: 順序付けされた点の近傍を通る曲線
3 .曲面間の交差: 2つの曲面が交差すると、交差位置に曲線が得られます
4. シルエット: ある方向から見て曲面の一番外側に見える稜線を曲線にしたもの
5. 特殊な関数式: ユーザが固有の式を与えて定義される曲線

曲線はグラフ
棒グラフや円グラフ、折線グラフが身近です。これらは「統計」として利用されるグラフです。

算数レベルから数学レベルになると「関数」のグラフというのがありました。正比例や反比例のグラフは「直線」や「2つの曲線」になります。多項式関数では、xとyをプロットするとぐにゃぐにゃしたグラフになります。2次関数ならU字型(これは放物線)、3次関数ならN字型になります。実は、コンピュータの中で曲線を描くということは、この関数のグラフを作っているだけなのです。(ただし3次元空間にですが)

関数グラフがパラボラアンテナになるしくみ
関数のグラフがパラボラアンテナになるしくみを説明します。関数のグラフを描くときに、横軸にx、縦軸にyをとりました。これを変更!関数のグラフを3枚作ります。1つ目は、横軸にt、縦軸にxをとります。同様に、2つ目は横軸にt、縦軸にyをとります。3つ目は横軸にt、縦軸にzをとります。横軸がみんなtというところに注目してください。グラフが3枚ということで、あるtが決まるとそれぞれ、別々にx,y,zの値が決まります。同じtから求められた1組のx,y,zは、3次元の座標とみなせば、そのまま空間にプロットする(点を打つ)ことができます。つまり (t) -> 点(x,y,z)

tを限りなく小さな間隔でたくさんとって、その都度3枚の関数グラフから得られる(x,y,z)をプロットすると・・・・・3次元空間に浮かぶ曲線ができます。

tを「パラメータ」と呼びます。3枚の関数グラフを利用してtに対応する(x,y,z)を求めることを「写像」とか「マッピング」と呼びます。パラメータtを、ある範囲(例えば0から100)に限定し、その範囲で無限に細かく(x,y,z)をプロットしていくと曲線になります。このようにtから(x,y,z)を対応づけて得られる曲線を「パラメトリック曲線」と呼びます。

tからx,y,zを求めるために利用した関数グラフが曲線の種類を決めます。

「Bezier曲線」や「Bスプライン曲線」「NURBS曲線」は、パラメトリック曲線です。Bezier曲線は「Bernstein(バーンシュタイン)基底関数」という関数グラフを利用します。Bスプライン曲線は「Bスプライン基底関数」という関数グラフを利用します。(正確には、これら基底関数と制御点の積が関数グラフになります。詳しくは次回セミナーにて)

パラメトリック曲線でドライブ
東京から大阪まで一気にドライブすることとしませう。東名、名神を乗り継ぐことにします。

高速道路をパラメトリック曲線に見立てると、この時間の経過をパラメータとみなすことができます。8時に東京、12時に浜松、13時に名古屋、17時に京都といった具合です。時刻t(時)に、通過しているところ(例えば静岡)が曲線上の「位置」となります。時間の経過とともに対応する「位置」はどんどん東京から大阪に近づいていきます。

「パラメトリック曲線」は、(東京から大阪へという)「進行方向(向き)」を持ちます。

ドライブしていますから、車はあるスピードで走っています。

メーターに時速100Kmと出ていれば、(実際に1時間走り続けるわけではないけど)とりあえずこの勢いで走りつづければ1時間後に100Km移動しているはず!ということですね。スピードは刻一刻と変化します。ある瞬間は時速80kmで走っているし、ある瞬間は追い越し車線で時速120Km出しているかもしれません。さらに車は、瞬間瞬間である方角に走っています。東京から大阪といっても常に真西を向いていることはなく、道なりに、西向きに走っているときもあれば、南向きに走っているときもあります。

「パラメトリック曲線」は、「高速道路」とそこを走る「車」と考えます。曲線の形は高速道路のルートになります。パラメータとして時間を用いると、ある時刻tにおける車の通過地点が「曲線上の位置(点)」となります。その時の、車の向いている方角とスピードメーターの値が「曲線上の速度ベクトル(接線ベクトル)」となります。ここの例では、高速道路という既に形あるものを先に挙げましたが、本当は車の通過した軌跡を「曲線の形」とみなす方が自然です。

こんなパラメトリック曲線は作っちゃだめ!
デザインシステムやCADで曲線を作成していくと、大変困った高速道路になっていることがあります。ユーザは、できるだけ(というより絶対に)そんな道路を作らない様にしなければなりません。なぜかというと、こんな高速道路だと事故るから!事故は、後工程で曲線や曲面を用いた計算を行う時に発生します。 (どんな場合に困った道路を作ってしまうのかは、後日のセミナーにて)

1. 突然折れ曲がる高速道路
だんだん曲がり始めて、次第に曲がり加減が厳しくなり、まただんだん直線に戻るような道なら安全に高速で走り抜けることができます。(これを「曲率連続」といいます)90度直角ターンなどあってはいけません。

2. 途中で車が止まる高速道路
パラメトリック高速道路では、渋滞はありません。車のスピードは刻一刻と変化してかまいませんが、決して止まってしまう瞬間(速度ベクトルがゼロ)があってはなりません。パラメトリック曲線で速度ベクトルがゼロになる位置を「特異点」といいます。高速道路は本線上で止まったら罰金ですよね。事故を誘発する大変危険な場所になります。

3. 車が逆走する高速道路
途中のパーキングエリアで忘れ物をしたからといって、本線を逆走して取りにいってはいけません。パラメトリック曲線では、忘れ物をとりに逆走してから、また何食わぬ顔して本線を流す輩がときどき現れます。

曲面は布
パラメトリック曲線の作り方がわかりました。次はコンピュータ上に曲面としてヨットのセール(帆)を作ってみましょう。たくさんの縦糸と横糸を交互に織り成せば布になります。コンピュータ上に曲面を定義するしくみは、これと同じです。

(順序付けされた)点を無数に並べると曲線(糸)になります。

同様に曲線(糸)を無数に並べると曲面(布)になります。

まずは、縦糸をたくさん準備して横に並べてみましょう。ここでいう糸はパラメトリック曲線ですので、あるtを指定すれば対応する位置(点)が求まります。すべての縦糸に同じtを指定してみます。すると糸が並んだ方向に点が並びます。この並んだ点を今度は横糸とみなします。横糸もパラメトリック曲線であるなら、横糸用のある値tを指定すれば1つの位置(点)が求まります。

パラメータ変数を区別するためtを置き換えます。縦糸用のパラメータをuとします。横糸用のパラメータをvとします。縦糸の長さ分(つまり端から端まで)パラメータuは変化します。同様に横糸の長さ分パラメータvは変化します。

整理してみましょう。すべての縦糸上にパラメータuの位置(点)を求めます。点が並んでできた横糸のパラメータvの位置(点)を求めます。

どうですか?uとvの組み合わせを1つ与えると点(x,y,z)が1つ決まりますね。

(u,v)->点(x,y,z)

uとvを(独立して)範囲内で目いっぱい変化させて、その都度得られた点を集めると四辺形の面(つまり「曲面」)になります。

パラメトリック曲面
このように(u,v)から点(x,y,z)が対応づけされて得られる曲面を「パラメトリック曲面」と呼びます。曲面上の位置(点)はすべて(u,v)で指定することができます。地球表面上の位置を「緯度」と「経度」で表しますから、この考え方は既に使われていましたね。

以後、慣例に従ってイラストでは横方向をu、縦方向をvとします。

先の例では、縦糸を横に無数に並べたことにしました。横糸を縦に無数に並べたことにしてもかまいません。パラメトリック曲面であるBezier曲面やBスプライン曲面、NURBS曲面、いずれも、曲面上の点(x,y,z)を求めるのに、縦糸から求めても、横糸から求めても同じになるようにできています。

パラメトリック曲面は、縦糸と横糸を織り成すようなものですので、表現できる形状は基本的にハンカチを広げたような四辺形になります。サッカーボールの皮のような5角形、6角形の形状は表すことができません。このような要求に対しては、曲面(布)を切り取るために輪郭線を与えます。
(輪郭線で切り取られた曲面を「トリム曲面」と呼びます。説明は後日のセミナーにて)

三角ビキニの三角は、四辺形の1辺をつぶす(これを「縮退」と呼びます)ことで実現可能なのですが、できれば実際の縫製と同様に、布から三角に切り出す方が無難です。

布の裏表
あるパラメータ(u,v)を指定します。該当する位置にある縦糸と横糸を指定していると考えても構いません。縦糸も横糸も「パラメトリック曲線」として扱うことができます。そうすると交差部で、縦糸を走る車の方角と横糸を走る車の方角が得られます。右手の親指と人差し指と中指を互いに直角になるように立ててください。(フレミングの右手の法則ってやつです)

横糸を走る車の向きを親指、縦糸を走る車の向きを人差し指で表します。親指と人差し指は直角にならないかもしれませんが、中指は親指と人差し指両方に直角にします。

この時中指の指す方向を曲面の「表」とするのが慣例です。

こんなパラメトリック曲面は作っちゃだめ!
uまたはvを指定すると1本の縦糸か横糸を求めることができます。この糸のことを「アイソパラメトリック曲線」と呼びます。

■パラメトリック曲線だから
アイソパラメトリック曲線も、もちろんパラメトリック曲線の仲間ですので「折れない」「止まらない」「逆走しない」ことが求められます。
曲面では、無数の縦糸と横糸があるので、さらに別の性質が求められます。

1. 縦糸どうし、横糸どうしでは交わらないこと
縦糸どうしで交わっていると、どこかの横糸は「逆走」してしまいます。とても危険

2. 縦糸と横糸が平行にならないこと
縦糸と横糸が平行な部分があると、そこでは曲面の表がわからなくなります。見た目は大したことではなさそうですが、曲線や曲面のいろいろな計算をする時に事故を誘発してしまいます。

先の右手を思い出してください。中指の方向が一意に決まりませんね。

最後に形状処理事故を誘発し易いパラメトリック曲面を挙げます。「糸目」に注目してください。
3DモデラーやCADによっては、確実に事故発生となるものもあります。
パラメトリック曲面は、なるべく糸目の揃った四辺形がよいのです。

最後に感想質問の連絡先
このセミナーのページで掲載した概念、文章、挿し絵など一切の責任は、筆者にあります。
質問、意見は筆者まで。決してアプリクラフト社へはねじ込まないでください。

株式会社エムシースクウェアド 代表 大野敏則
TEL:053-450-7266 FAX:053-450-7288
info@mc-squared.co.jp

【参考文献】
CAD/CG技術者のためのNURBS早わかり
三浦、中嶋、大野著、工業調査会、ISBN4-7693-5082-1
(1冊売れると私に印税XX円がはいります...)
CAD/CAMにおける曲線曲面モデリング
穂坂 衛、東京電気大学出版局、ISBN4-501-52250-X
コンピュータディスプレイによる形状処理工学 Ⅰ
山口富士夫、日刊工業新聞社、ISBN4-526-01434-6