パラメトリック曲線・曲面の理論

draft CG

線形補間とベジェ曲線 では、制御点をいくつか置き、その間を混ぜ合わせて曲線の形を決めました。混ぜ方の違いがベジェ曲線とBスプライン曲線を分けているだけで、パラメータの関数として点を求める組み立て自体は、どちらも変わりません。
ここでは、曲線の種類ごとの違いを外した後に残る、パラメトリック曲線・曲面の共通の作りを見ていきます。

多項式曲線と有理式曲線
CG

パラメトリック曲線は、各座標をパラメータの関数として表した曲線でした。関数に何を使うかは自由ですが、CGで扱う曲線は2種類にほぼ絞られます。

1つは、各座標をパラメータの多項式で表した多項式曲線です。パラメータを とすると、 座標は次のように書けます。

も同じ形で、係数だけが違います。計算に必要なのはかけ算と足し算だけで、次数を上げるほど複雑な形を表せます。

もう1つは、各座標を多項式の比で表した有理式曲線で、有理曲線とも呼ばれます。

と はどちらも多項式で、 も分母 を共有します。分母を持つ分計算は重くなるかわりに、多項式曲線では表せない形を正確に表せます。円や楕円がその代表で、多項式の次数をいくら上げても、円をぴったり表すことはできません。

分子と分母に分かれたこの形は、同次座標 で表した多項式曲線を、通常の座標へ戻したものとしても読めます。

複合曲線
CG

複雑な形を1本の式で表そうとすると、その分次数が上がります。次数の高い曲線は、係数を1つ変えただけで影響が端から端まで及ぶため、一部分だけを直したい場面では扱いにくくなります。

そこで、1本でまかなうのをやめ、次数を低く抑えた曲線をいくつも並べ、端どうしを繋いで長い形をつくります。繋ぐ1本ずつをセグメントといいます。

セグメントを繋いだ全体が複合曲線です。決まった式に縛られずに形を作れることから、自由曲線とも呼ばれます。セグメントが多項式曲線であれば区分多項式曲線、有理式曲線であれば区分有理式曲線となり、CGで自由な形として扱われる曲線は、ほとんどがこのどちらかにあたります。

各セグメントのパラメータは、0から1までの範囲で動かすのが一般的です。区間を揃えておけば、どのセグメントも同じ式の形のまま並べられます。

繋ぎ目の連続性

繋ぎ目の揃え方には段階があります。端の位置だけを一致させれば曲線は繋がりますが、繋ぎ目は折れ曲がって見えます。曲線の進む向きと速さを表す接ベクトルまで一致させると折れ目が消え、さらに2階微分まで一致させると、曲がり具合の変わり方まで繋がります。
パラメータについての微分が繋ぎ目で一致することをパラメトリック連続性といい、 階微分まで一致する状態を 連続と書きます。

もっとも、折れ目が出るかどうかを決めているのは接ベクトルの向きだけで、大きさまで一致している必要はありません。向きの一致だけで判断する連続性を幾何学的連続性といい、 連続と書きます。 連続であれば 連続でもありますが、逆は成り立つとは限りません。

繋ぎ目の連続性の図。2本のセグメントの繋ぎ目を3通り並べ、端の位置だけが一致した場合(折れ曲がる)、接ベクトルの向きまで一致した場合(折れ目が消える)、曲がり具合まで一致した場合を比べる。各繋ぎ目には接ベクトルを矢印で描き、向きと大きさの違いが読み取れるようにする。

光沢のある面では、 連続でも繋ぎ目が映り込みの筋として見えることがあり、曲がり具合まで揃えた 連続が求められます。

制御点
CG

セグメントの形は多項式の係数で決まりますが、係数と見た目の対応はつかみにくく、そのままでは形を作る手がかりになりません。

そこで、係数を直接いじるのをやめ、空間に置いた点で形を操ります。ここで置く点が制御点です。制御点を動かせば係数の方が決まり直すため、設計する人は点の配置だけを考えれば済みます。

制御点を から までの 個とすると、多項式曲線は次の形に書けます。

各制御点 にかかる重み を基底関数(ブレンディング関数)といいます。 を変えると、どの制御点を強く効かせるかが入れ替わり、得られる点の位置が移ります。有理式曲線では、これに制御点ごとの重みが加わり、全体を重みの総和で割った分数の形になります。

基底関数に何を選ぶかは1通りではありません。ベジェ曲線やBスプライン曲線といった曲線の違いは、この選び方の違いにあたります。

を等しい間隔で刻んでも、得られる点が曲線上に等間隔で並ぶとは限りません。パラメータは曲線上の位置を指し示す目盛りであって、長さを測る目盛りではないためです。

自由曲線に望まれる性質
CG

制御点を置くだけで形を作れるかどうかは、制御点の配置と曲線の形の間に、どれだけ見通しのよい関係があるかで決まります。自由曲線に望まれる性質として、次の6つが挙げられます。

  • 凸包性:曲線が、制御点を囲む最小の凸多角形(凸包)の内側に収まる
  • 変動減少性:曲線が、制御点を順に結んだ折れ線より波打たない
  • 局所性:1つの制御点を動かしたとき、形が変わるのは曲線の一部にとどまる
  • 直線再現性:制御点を一直線上に並べると、曲線も直線になる
  • アフィン不変性:制御点にアフィン変換 をかけてから曲線を作った結果が、曲線そのものを変換した結果と一致する
  • 2次曲線の再現性:円・楕円・放物線・双曲線を正確に表せる

はじめの3つは、曲線を計算しなくても制御点の配置から振る舞いを見積もるための性質です。残る3つは、変換や特定の形をどこまで正確に扱えるかを表しています。

6つをどこまで満たすかは曲線の種類によって違います。ベジェ曲線は局所性を持たず、制御点を1つ動かすと曲線の全体が形を変えます。2次曲線の再現性は多項式曲線では得られず、有理式曲線ではじめて満たされます。

凸包性・変動減少性・局所性を示す図。同じ6個ほどの制御点に対して、3枚を並べる。1枚目は制御点の凸包を薄く塗り、その内側を通る曲線を描く。2枚目は制御点を順に結んだ折れ線と、それより波打たない曲線を重ねる。3枚目は制御点を1つ動かした前後の曲線を重ね、形が変わる範囲が一部にとどまることを示す。

パラメトリック曲面
CG

曲線での分け方は、そのまま曲面にも当てはまります。パラメトリック曲面は、各座標を2つのパラメータ の関数として表した曲面でした。関数が多項式であれば多項式曲面、多項式の比であれば有理式曲面で、こちらも有理曲面と呼ばれます。球や円柱のような2次曲面を正確に表せるのは、曲線のときと同じく有理式のほうです。

曲面の作り方でもっとも広く使われるのは、曲線の仕組みを2方向へ広げたものです。制御点を1列ではなく格子状に並べ、 方向と 方向それぞれの基底関数をかけ合わせて重みにします。縦横に 個の制御点 を置くと、曲面上の点は次のように表されます。

2方向の基底関数の積を重みにするこの形の曲面をテンソル積曲面といいます。 を1つの値に固定すると だけが動く曲線が現れ、曲面は2方向の曲線が交差した網として捉えられます。曲線のために用意した基底関数をそのまま使い回せるため、曲線で成り立っていた性質の多くも曲面へ引き継がれます。

方向と 方向の次数が等しく 次であるとき、これを双n次曲面といいます。実際によく使われるのは、 と をともに3にとった双3次曲面です。

テンソル積の他に、先に引いた境界の4本の曲線から内側を埋める作り方もあり、クーンズ曲面がこれにあたります。

複合面
CG

曲線をセグメントに分けたのと同じように、曲面も1枚で全体を覆うことはしません。区切られた曲面の1枚をパッチといいます。

パッチを繋いだ全体が複合面で、曲線のときと同じく自由曲面とも呼ばれます。隣り合うパッチは境界の曲線を共有し、境界に沿って接平面まで揃えると、繋ぎ目が見えなくなります。

どの基底関数を選ぶかで、作れる形も、制御点を動かしたときの効き方も変わります。ベジェ曲線 は、その選び方のうちもっとも広く使われているものにあたります。