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

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

第4回 BREP(ビーレップ)境界表現|ライノセラスでソリッドモデルをつくるということは!

シャボン玉とパッチワーク

今回のキーワードは「シャボン玉」と「パッチワーク(継ぎ接ぎ細工)」です。

シャボン玉の科学というのがありまして、どうして空間に水の玉ができるのか説明しております。
ただの水なら、まず泡(シャボン玉)を作ることができません。
石けんや洗剤といった界面活性剤が混ざると途端に水は薄い膜となって空間に広がることができます。

界面活性剤は、水と仲良しになる手と油と仲良しになる手をもつ分子でありますが、こいつが膜の表面にきれいに並んでいるそうです。


きれいに並ぶとなぜ膜を維持できるのかは、物理や化学の専門家に尋ねていただくとして、ここでは形状処理の話。
シャボン玉では、空間に広がった薄い膜が、たいてい閉じて丸くなっています。(だから玉というのですが)ということは、世界を膜の内側と外側に分けることができるわけですね。(ここが大切)

そしてもう一つのキーワードは、パッチワーク。端切れをいっぱい縫いあわせて大きな布にするやつです。

CAD・CAMでは、「世界を内と外に分ける膜」をパッチワークで作って3次元ソリッドモデルにします。ソリッドモデルを作っていく操作には、「張りぼて」手法と「彫刻」手法があります。
(セミナー予告編を参照)どちらの手法もコンピュータ内部では、「パッチワークの風船」になります。

境界表現(Boundary Representation)

普通は、英語の頭文字をとってBREP(ビーレップ)と呼びます。難しそうな専門用語のふりをしていますが、「パッチワークの風船」と(ほぼ)同意義です。

ここで、「境界」について少し考えてみましょう。まずは、1次元の世界から。
あなたは1本の糸の上でしか動けません。あなたの縄張りは、点の向こうとこっちという風に、糸(線)の上に点を1個おけば区分することができます。
次に2次元の世界。あなたは、面の上でしか動くことができません。


あなたの縄張りは、面上に閉じた線(ループ)を置けば主張することができます。面上のどこに立っても、線の内側か外側かという区別ができます。
では3次元の世界ではどうでしょう?あなたの縄張りは、空間上に閉じた面(風船)を置けば主張できますね。

この縄張りを主張するために置いた、線に対する(線上の)点、面に対する(面上の)閉じた線、3次元空間に対する閉じた面(風船)が、縄張りの「境界」です。
境界の内側に物質が詰まっており、外側に空気がある(物質がない)と決めてしまえば、風船がソリッド(中身が詰まった)モデルを表現することができます。
気泡の入った物体を表すには、物体の表面を表す風船の中に気泡を表す風船を入れてやるだけです。 この辺りの考え方は、トリム曲面のアウターループとインナーループ(セミナー第3回トリム曲面を参照)とよく似ております。

パッチワークの風船の作り方

材料は端切れ、道具は縫いあわすための針と糸が必要です。ここでは、簡単に風船と呼んでおりますが、実際のモデリングではこれが、金型や機械部品、CGのキャラクターであるわけです。
端切れは、「トリム曲面」を用います。4辺形のパラメトリック曲面を適当な輪郭線で切り取ったものです。 曲面全体を用いる場合は、曲面最外周に輪郭線があるものとみなします。
隣り合わせになるトリム曲面の端(一般に「エッジ」と呼びます)どうしを縫いあわせます。
縫いあわせるエッジどうしは、ぴったりとあっているはずです。(実際には、1000分の数mm程度で隙間があったりオーバーラップしています。)
サッカーボールの皮のようにすべての端切れが縫い合わされるとソリッドモデルの完成です。

サーフェスモデラーでは、トリム曲面の作成や縫いあわせを直接操作することができます。モデラーによってこの縫い合わせ操作を様々に呼んでいます。
ステッチ(stitch)、ソー(sew)、ニット(knit)、ジョイン(join)、マージ(merge)などがあります。
糸目の粗さを表しているようですね。

位相要素と幾何要素

CAD・CAMでは、モデルをあるデータ構造で表します。BREPもそのデータ構造の1つであり、システム毎にいろいろ工夫された持ち方をしています。 10年ほど前は、持ち方そのものがノウハウだ!特許だ!とかいっていたのですが、BREPという考え方は、これから紹介する形に落ち着いてきたようです。 データ構造は、適当な「要素単位」の集合と考えてください。

ここでは、分かりやすいので「幾何要素」と「位相要素」を分けて説明します。 xyzの世界で端切れの形を表すのが「幾何要素」です。どの端切れとどの端切れが縫い合わされているのかという情報が「位相要素」です。

位相要素と幾何要素の一覧

筆者流に整理した要素を示します。BREPを表すデータ構造はいろいろ提案されています。システムや参考書によって全く別の要素分類(&親子関係)になっていることもあります。
用語についても統一されたものはありません。例えば、EDGEという表現が後述の説明の内容でなく「UV曲線」を表しているシステムもあります。
ここに挙げた用語が、身近なシステムではどういう表現になっているか翻訳が必要!ということを忘れないでください。

幾何要素
ずばり、「点」「線」「面」のことです。これがなければ、xyz空間に関する形が決まりません。「線」「面」に関しては、「パラメトリック曲線」P(t)、「パラメトリック曲面」P(u,v)を用います。直線、円弧、平面、円筒面など「解析曲線」、「解析曲面」も用いられます。

位相要素
パッチワークの風船を構成する要素です。要素の親子関係、親戚関係の単位となります。

・VOLUME(ボリューム)
閉じたパッチワーク、つまり継ぎ接ぎの風船で囲まれた部分のことです。
ボリュームという表現は体積という意味を持ちます。風船の皮膜(境界)によって3次元空間のある部分を切り出した固まりですね。
固まりは無垢(中身が詰まっている)ということでSOLID(ソリッド)と呼ぶこともあります。BODY(ボディ)と呼ぶものもあります。
内包する気泡を表すには、風船の中に泡を表す風船を定義します。子供として(複数の)SHELLを持ちます。

・SHELL(シェル)
継ぎ接ぎの風船そのものです。シェルとは、貝殻とか薄い皮膜のことです。
VOLUMEとはSHELLで囲まれた領域になります。ソリッドモデルでは、外側のSHELLが必ず1個あります。
数学的には、内側の空間(気泡)を表すために内側のSHELLを定義することもできますが、ソリッドモデルが工業製品を表す限り意味はないです。
SHELLは表と裏が区別できます。子供として(複数の)FACEを持ちます。

・FACE(フェース)
継ぎ接ぎのための端切れ(小さな布)です。端切れのxyz形状を表す幾何要素が「トリム曲面」になります。
FACEとトリム曲面が1対1に対応するので、システムによっては表現が区別されません。トリム曲面とみなせば、輪郭線を表すのにLOOP(ループ)とEDGE(エッジ)という要素があることを容易に類推できます。
このEDGEは隣のFACEの輪郭線でもあるわけで、この「共有」という概念がSHELLの中のFACEには含まれます。
子供として、(複数の)LOOPを持ちます。対応する幾何要素は「(ベース)曲面」です。

・LOOP(ループ)
FACEの輪郭をあらわす要素です。
COEDGE(コエッジ)という要素を一筆書きに連結したものです。
子供として(複数の)COEDGEを持ちます。

・COEDGE(コエッジ)
LOOPを構成する個々の要素です。
参考書によってはEdgeUsed(エッジユースト)とかFin(フィン)と呼ばれることもあります。
普通の数学的な説明では、LOOPは直接EDGE群を指します。ただ、EDGEが隣接するFACE間で「共有される」状態を表現するには、COEDGEという仮想EDGEを用いてワンクッション置くと都合がよいのです。
子供として1つのEDGEを持ちます。対応する幾何要素は「UV曲線」です。

・EDGE(エッジ)
端切れの端で、縫い合わされる部分になります。縫い目が幾何要素として、「曲線」になります。
既に触れたように、このEDGEは、隣接するFACE間で(LOOP-COEDGEを介して)共有されます。
EDGEは普通2つのFACEに共有されます。
子供として2つのVERTEXを持ちます。
対応する幾何要素は「曲線」です。

・VERTEX(バーテックス)
端切れを縫いあわせる時に、縫い目が集中する位置です。
対応する幾何要素は「点」になります。BREPとしては、なくてはならない要素ですが、システムのデータ構造中に直接記述したものがない場合もあります。

ライノセラスのBREP

ライノセラスは、「サーフェス」「トリムサーフェス」「ポリサーフェス」「ソリッド」という要素を持っています。ユーザから見えるところでは「位相要素」と「幾何要素」が区分された表現になっていませんが、次のように解釈することができます。

トリム曲面から、輪郭を表すループ情報を捨て去ることを「トリム解除(アントリム)」と呼びます。こうなると普通の(4辺形の)曲面になります。

「サーフェス」は、「トリムサーフェス」の特別な場合で、輪郭線が完全に曲面の外周と一致するものとみなせます。
輪郭線(LOOP)はEDGEを一筆がきになるように連結したものです。このエッジを介して隣接する2つの「トリムサーフェス」を結合(JOIN)すると「ポリサーフェス」になります。
トリムサーフェスは「FACE」で、ポリサーフェスは「SHELL」に相当します。
「サーフェス」または「ポリサーフェス」が、ある体積を包含すると、つまり風船になると「ソリッド」になります。
ライノセラスでは、結合されていない部分を積極的に見つけて綻びを繕うことができます。
(以下ライノ資料より抜粋)

マニホールドとノンマニホールド

BREPの3大要素は、FACEとEDGEとVERTEXで、それぞれ面、線、点に対応します。
これらを適当に配置すると、風船以外の形状も定義することができます。例えば、2本の鉛筆がその先でくっついているような形状や、2つのナイフが刃先でくっついているような形状を作ることができます。
布から紐が出ているような形状も作ることができます。
鉛筆やナイフの接触位置や紐のように厚さがゼロになる状態を「ノンマニホールド(非多様体)」といいます。
ノンマニホールドでない状態を「マニホールド(多様体)」と呼びます。厚さゼロでつながっている部分というのは、実際に作ることができませんので工業製品モデルとしては意味がありません。 数学的な説明としては不十分なのですが、ノンマニホールドとは「BREPモデルで厚さがゼロになってしまう部分」と覚えておけば、実用的に全く問題ありません。

ちょっとだけBOOLEAN(ブーリアン)操作

ライノセラスを始め、多くのモデラーでは、2つのソリッド(VOLUME)間で、「和」「差」「積」を求めることができます。この演算を「ブール演算」とか「ブーリアン操作」と称します。ライノセラスでは、表と裏がはっきりしていて、十分な広がりがあればSHELLは閉じていなくても(つまりVOLUMEでなくても)演算できます。

BREPモデルでブール演算を行うしくみを見てみましょう。2つのVOLUMEを重ねるとSHELL上に交線が求められます。この交線でSHELL(FACE群)を分割します。分割されたSHELL(FACE群)を適当に組み合わせて縫いあわせると演算結果(和、差、積)を表す新しいSHELLができます。

こんなBREPモデルは作っちゃだめ

ノンマニホールドモデルがだめという話をしました。ノンマニホールドモデルを作ってしまうケースを紹介します。(真ん中の例がノンマニホールドです)ほら、結構ありそうでしょ!

困ったBREPモデルの話は、次回のテーマであります。

「位相」と「幾何」の調和が問題になります。曖昧さとの戦いでもあり、モデラーやデータ変換プログラムの開発者を悩ませます。ライノセラスでデザインしたモデルがそのままでは下流のCAD(キャド:設計)、CAM(キャム:工作機械制御)、CAE(シーエーイー:解析)システムに受け入れてもらえないことがあります。次回は、その理由について解説していきます。

例によって感想質問の連絡先

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

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

【参考文献】
・Rhinoceros バージョン1.0 ユーザーガイド  16章 19章
3次元CADの基礎と応用
 千代倉、鳥谷、共立出版、ISBN4-320-02539-3
ソリッドモデリング CAD/CAMのための基礎技術
 穂坂 衛、東京電気大学出版局、ISBN4-501-52250-X
・JAMA/JAPIA PDQガイドブック(基礎編)
 日本自動車工業界、電子情報委員会、CAD部会

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