Beziex自由曲面バーチャル研究室
(C)1999-2012 EISHIN All Rights Reserved.

Beziex Ts (Home)
 & ダウンロード


Beziex LG (Home)
 & ダウンロード




マニュアル目次

1章 前知識
2章 新ベジェ境界曲面
3章 プログラムについて
4章 サンプル・アプリケーション
5章 自由曲面関数ライブラリ
6章 bxCore.h
7章 bxDB.h
8章 bxProc.h
9章 数値関数
10章 サンプル・ベースファイル



Copyright 1999-2011 EISHIN

1章 前知識

1. ベジェ曲線

1-1. コンピュータ上の曲線

コンピュータのディスプレイに表示される線には直線と曲線がある。このうち直線については説明するまでもないであろう。
対して、コンピュータ上の曲線には
1)  フリーハンド曲線
2)  数式による曲線
の2種類がある。1)はペイントソフトの鉛筆ツールなどで描画した場合であり、慣れないと不自然な曲線となることが多い。また1)は2)に変換しない限り、(曲線を)拡大縮小すると鑑賞に耐えられなくなる場合も出てくる(Adobe Illustratorなどは、この変換機能を持っている)。
2)は一般的に複数のパラメータを用い、それを数式に当てはめることによって導かれる曲線を描画するものである。しかし通常、ユーザーが描画ソフト上で数式を直接目にすることはない。数式は、ソフトのプログラム内に隠されているからである。
このあと曲線についてもう少し説明するが、以後、曲線といえば2)を示すこととする。


1-2. 曲線の種類

この曲線を表す数式には数多くの種類がある。そして数式内で用いられるパラメータを決定する場合を考える時、その方法として次の3通りがある。
a1)  そのパラメータは、常にユーザーが決定する。
a2)  そのパラメータは、プログラム内で類推されて決定される。または常に固定値である。
a3)  そのパラメータは、デフォルトとしてa2となっているが、ユーザーが再設定することもできる。
そして、それぞれのソフトによって、
A1)  すべてのパラメータがa1である。
A2)  一部のパラメータがa1、他のパラメータがa2またはa3である。
と分かれている。
またユーザーが決定可能なパラメータには、
b1)  視覚的でないパラメータ(数値入力やスライダなどで入力)
b2)  視覚的なパラメータ(曲線上または曲線近傍において、特殊な点を移動させることがパラメータ変更になる)
の2通りがある。これもソフトによって、
B1)  すべてのパラメータがb1
B2)  すべてのパラメータがb2
B3)  一部のパラメータがb1、他のパラメータはb2
のいづれかになる。しかしB1はあまりにも使いづらいので、除外してかまわないだろう。
そしてb2には、次のようなものがある。
c1)  頂点(ここでは曲線の端を示す)
c2)  制御点(ここでは曲線の近傍にあり、その位置によって曲線形状を決定する点を示す)
c3)  ハンドル(厳密にはc2の一種)
これもまたソフトによって、
C1)  すべてがc1(頂点)
C2)  すべてがc2(制御点)
C3)  c1〜c3の混在型
に分かれる。
今ここで、一般的なソフトの曲線描画法についてA1〜2、B2〜3、C1〜3を用い検証してみよう。
入門用ソフトによく見られるのはB2でC1の曲線である(表面上はA1であるが、a2が含まれている可能性有り)。この曲線は一見簡単であるが、思ったように形状を決定するのは困難である。
次に最近(曲面として)流行しているNURBS曲面の基本であるNURBS曲線について述べてみる(NURBS曲線は2次元ソフトではあまり見かけないが)。この曲線はA2で、B3、C2の構造を持つものがほとんどである。この曲線でb1に該当するパラメータはウエイトなどと呼ばれているもので、a3またはa2となっている。このNURBS曲線はc2(制御点)のみで設定するソフトが多いので、頂点を直接移動できるものに比べ、曲線形状を把握しにくいのが欠点である(好みにもよるが)。
そしてA1でB2の特徴を持ち、C3(頂点とハンドル)を用いるのがベジェ曲線である。このベジェ曲線については次項で述べることにする。
このA1〜2、B2〜3、C1〜3といった種別は曲線だけでなく、後述する曲面にも当てはまる。そしてこれが3次元モデリングソフトの使い勝手に強く影響してくるのである。


1-3. ベジェ曲線の特徴

前項にも述べた通り、ベジェ曲線は(曲線の両端である)2個の頂点と、そこから伸びる2本のハンドルによって曲線を定義する(ものが多い)。このベジェ曲線はAdobe IllustratorやMacromedia FreeHandの核となる部分であり、2次元ソフトの主流曲線であると言っても過言ではない。
ベジェ曲線が主流と成り得た最大の理由は、
自由度の高い曲線の中で、最も視覚的で、しかも操作パラメータの数が少ない
からであろうと、当研究室では考えている。そして、これが使い勝手の良さにつながっているのである。特に曲面の端(頂点)をユーザーが直接操作できるというのは、大きな利点である。


1-4. ベジェ曲線の連結

図形(の輪郭)を描画する場合、一本のベジェ曲線だけで表現できる場合はほとんどない。通常、複数のベジェ曲線を連結させて表すことになるが、この時、隣り合うベジェ曲線が滑らかに繋がっている必要がある場合が多いであろう。これを満たすためには、
隣り合うハンドルが一直線
となっていなければならない。


2. 自由曲面

2-1. コンピュータ上の曲面

コンピュータのディスプレイに表示される面にはポリゴンと曲面がある。このうちポリゴンは一般に表面が平面のものを差す。
コンピュータ上で曲面を表すには、
a1)  曲面上を通る複数の曲線で代用する(ワイヤーフレーム)
a2)  陰影を付けて表現する(シェーディング)
のいづれかで行うことが多い。しかしどちらもフリーハンドで描画するのは困難である。よって一般的に曲面とは
数式による曲面
を示すことになる。ただし球面なども「数式による曲面」として表すことができるので、ここでは自由な形状が表現可能な数式に限定し、これを自由曲面と呼ぶ。そして以後、曲面といえば自由曲面を差すものとする。


2-2. 曲面の種類

曲面の中で代表的なものには、次の2つがあげられる。
a1)  NURBS曲面
a2)  ベジェ曲面
このうちNURBS曲面は、「1-2.曲線の種類」で述べた通りのパラメータ構造となっている。すなわち次のようになる。
b1)  制御点
視覚的で、常にユーザーが決定する。
b2)  ウエイト
デフォルト値を持っている。ユーザーは再設定できるが、視覚的ではない(再設定できないソフトも有り)。
このため、使い勝手に多少難があるが、自由度は極めて高い。
次にベジェ曲面についてであるが、曲線の延長でいけば、これが主流になってもおかしくないはずである。しかし現実にはNURBS曲面が全盛となっている。これはベジェ曲面には、
c1)  ベジェ曲線の利点
c2)  NURBS曲面の使い勝手の難
を考慮に入れても、それを上回るような欠点が存在するからである。これについては次々項で述べることにする。ただしここではNURBS曲面では球面を正確に表現できるが、ベジェ曲面ではできない、といったような点には触れない。これは、ベジェ曲面を拡張(専門的には有理化という)すれば可能となるからである。


2-3. ベジェ曲面の構造

ほとんどのベジェ曲面を扱うソフトは、4本の境界曲線をベジェ曲線で表現する、といった形態を取っている。なおこの境界曲線とはポリゴンでいうところの辺に相当する。この形態とは、すなわち4個の頂点と8本のハンドルだけでベジェ曲面を表しているということである。
ここで述べるベジェ曲面は、厳密には「3次テンソル積ベジェ曲面」と呼ばれるものである。実はこの曲面、4頂点と8ハンドルの他に曲面内部に4個の制御点を持っている。そしてこの4制御点のせいで、ベジェ曲面がNURBS曲面より劣るものになってしまったのである。
いま隣接する曲面どうしの境目にある境界曲線を共有曲線と呼び、共有曲面上のハンドルを共有ハンドルという。そしてこの共有曲線の両端を共有頂点ということにする。すなわち2枚の曲面のみが存在し、それが隣接している場合は、1本の共有曲線と2個の共有頂点が存在する。言い換えると1個の共有頂点から1本の共有曲面(と2本の非共有曲面)が伸びている、ということになる。またこの時、1個の共有頂点から3本のハンドル(1共有ハンドル+2非共有ハンドル)が伸びているのが分かる。
それに対し、傘のような曲面の場合、傘の骨が共有曲線、芯を共有頂点と考えることができる。この時は、1個の共有頂点から複数本の共有曲線が伸びていることになるだろう。そして1個の共有頂点から複数本の(共有)ハンドルが伸びていると考えることもできる。
ここで2枚の(隣接)曲面のみが存在する場合について、もう少し詳しく述べることにする。すなわち3本のハンドルが伸びているわけであるが、すべてのハンドルが同一平面上にある場合、この平面を
頂点平面
という。また2本の非共有ハンドルは
a1)  一直線上にある
a2)  一直線上にない
の2通りの場合が考えられる。a1のような場合、その2ハンドルをまとめて
直線化ハンドル対
と呼ぶことにする。またa2を「非直線化ハンドル対」ということもある(残りの共有ハンドルは「対」ではない)。
3曲面以上の場合も、上記の2曲面のような簡略化が可能で、同様に「頂点平面」、「直線化ハンドル対」について考えることができる。ただし
共有頂点が「直線化ハンドル対」状態
と明記する場合、共有頂点の回りの曲面は必ず2〜4枚であるものとする。


2-4. ベジェ曲面の欠点

いま隣接する曲面どうしを滑らかにつなげたまま、自由に曲面を変形させる場合を考える。そしてまず最初に前項で述べた4制御点を、ユーザーが設定するものとしよう。この場合、ユーザーは自由に曲面変形できるが、曲面どうしの滑らかさは確実に損なわれる。人間技では、この両立はほとんど不可能なのである。ベジェ曲線の場合、ハンドルを一直線にすれば滑らかさが保たれる。しかしベジェ曲面の場合、直感的な理解を超えた条件を満たさなければ、滑らかさは損なわれるのである。
そこで多くのベジェ曲面系ソフトは、4制御点の位置をある簡単な法則で決定している(その法則は専門用語で、「ツイストをゼロにする」という)。つまりユーザーに4制御点を操作させないようにしているのである。そのため多くのベジェ曲面系ソフトが、4頂点と8ハンドルだけで操作しているように見える。
ツイスト・ゼロのベジェ曲面は、共有頂点が「直線化ハンドル対」状態となってさえいれば、常に曲面どうしを滑らかに接続することが可能である。逆にいえば、「非直線化ハンドル対」が存在したり、共有頂点の回りの曲面が5枚以上の場合は、滑らかでないことがある、ということである。「直線化ハンドル対」状態であることを常に強いられることは、自由度を減少させ、形状作成に大きな制限を与えることになる。
また曲面内部の膨らみ具合は、4制御点で制御している。つまり自動的に4制御点を決定しているということは、膨らみ具合を制御できないということを意味する。よって、
a1)  ユーザーが膨らみ具合を操作できない
a2)  不自然な膨らみ具合になっても、修正できない
ことになる。
例えば、立方体(サイコロ)を膨らませて(近似)球を作成する場合を考えてみよう。すなわち6枚の曲面を滑らかに繋ぐわけである。これをベジェ曲面で行おうとすると、
b1)  共有頂点が「直線化ハンドル対」状態でない
b2)  膨らみ具合を制御できない
ことから、とても球とはいえないものが出来上がるであろう。それに対しNURBS曲面では、問題なく作成できるのである。
結論として、このような理由からベジェ曲面は主流になれなかったのだろう、と推察できる。


2-5. ベジェ境界曲面

このように(3次テンソル積)ベジェ曲面の使い勝手が悪いのは、ベジェ曲線の利点以上の欠点を持っているからである。しかしベジェを利用した曲面が、3次テンソル積ベジェ曲面以外にも存在するとしたらどうであろうか。もしかすると、その曲面はベジェ曲線の利点のみを受け継いでいるかも知れないのである。
さて前々項で、ベジェ曲面の4本の境界曲線はベジェ曲線であると書いた。ここで、このように境界曲線がベジェ曲線であるような曲面を総称して、
ベジェ境界曲面
と呼ぶことにする(専門的には、3次ベジェ曲線を境界に持つ3次ベジェ境界曲面を差す)。例えば、(株)リコー製ソリッドモデラーDESIGNBASEに使われているグレゴリー曲面は、「ベジェ境界曲面」の一種であると考えることができる。
このベジェ境界曲面の自由度をあげるためには、前項で述べた通り、
a1)  共有頂点が「直線化ハンドル対」状態でなくても、隣接曲面との滑らかさを保つ
a2)  曲面内部の膨らみ具合をユーザーが制御でき、操作後も隣接曲面との滑らかさを保つ
を満たしていなければならない。ただしa1は、共有頂点から伸びるすべてのハンドルが「頂点平面」上にあることが前提である。
またa2を満たすということは、この曲面の内部に複数の制御点を持たなければいけないことを意味する。この制御点は(ベジェ曲面のように)4個と決まっているわけではなく、例えばグレゴリー曲面では8個ある。この8個の制御点は、4本の境界曲線に附随する形で2個づつ存在している。言い換えると、各制御点はある1境界曲線にのみ影響を及ぼすことになる(境界非共有制御点)。
実は、制御点が「境界非共有制御点」である場合、隣接曲面との滑らかさを保つのが容易になる(専門的には、両立性補正が可能になる、という)。例えば2境界曲線に影響を及ぼす制御点の場合を考えると、一方の境界曲線を共有曲線とする隣接曲面と滑らかに繋がるように制御点を動かすと、他方の隣接曲面とは折れ曲がって繋がり、逆を行っても同様になる、といったことが起こりうるからである。
さらにこの制御点は当然ユーザーが操作することになるので、視覚的であることが望ましいであろう。
というわけで、当研究室ではa2を満たす制御点は
b1)  境界非共有制御点である
b2)  視覚的である
であることが必要だと考えた。そしてa1〜2、b1〜2を満たすベジェ境界曲面式を見つけることができれば、使い勝手が良くなると思うのである。また現在のコンピュータは演算速度が速いので、この条件を満たすために多少計算量が増えても大丈夫であろう(専門用語でいうと、4次式以上になったり有理式であったりしてもかまわないだろうということ。ただし境界曲線は3次ベジェ曲線と同形状)。
こうしてBeziexLabは、理想の「ベジェ境界曲面」を考案すべく開設されたのである。


2-6. n角ベジェ境界曲面

前項までは4本の境界曲線からなる曲面についてのみ考えていた。今ここで、これを4角ベジェ境界曲線と呼ぶことにする。
しかしながら現実には、4角曲面だけですべての形状を表すことはできない。例えば、地球儀の隣り合う緯線と経線に囲まれる部分を1個の曲面とすると、北極、南極の部分では3角曲面になることが分かるだろう。
そこでn本のベジェ曲線(n≧)の境界から成る曲面が表現できれば、より使い勝手が良くなる。特に3角ベジェ境界曲面は必須である。
専門的な話となるが、このn角曲面を表現する方法として、n個の4角曲面を(プログラム内部で)滑らかに隣接させ、それを1個の曲面として見せ掛けるというやり方がある。この方法は、(n個の4角曲面の)接続アルゴリズムが良くないと、結果として不自然な曲面になる危険性を持っている。
そこで当研究室では、なるべく上記の方法は取らず、あくまでも1個の曲面によって表現することにした。そして3角ベジェ境界曲線については、これが可能であることが分かった。5角以上は今後の課題となっている。


2-7. 3角ベジェ境界曲面

一般的にベジェ曲面やNURBS曲面で3角曲面を表現したい場合、どうしているのであろうか。実は、1本の境界曲線の長さをゼロにして疑似的に3角曲面に見せ掛けているものが多い(専門用語で縮退と呼ぶ)。
ここで、長さがゼロの境界曲線上にある頂点を縮退頂点ということにしよう。この縮退という現象は、それ自体悪いことではない。しかし通常、縮退頂点と非縮退頂点は性質(例えば頂点附近の自由度)が異なってしまうことが多く、使い勝手に問題が出てくる。
このことから、3角ベジェ境界曲面は
3頂点の性質が同じ
であることが望ましいといえる。




(C)1999-2012 EISHIN All Rights Reserved.