建築でコンピュータ、する?
2024年10月 8日(火) 15:43 JST
GDL講習会や日々の研究成果を発表するGDL発表会(通称GDL運動会)が今年も行われました。年々、発表作品の質が上がっているのは喜ばしいことです。GDL作品では、それぞれ複雑な形状をモデリングしていますが、全て数値モデリングを行っています。
では、作品を紹介していこうと思います。(続きは全文表示をクリック)
まず、GDLでモデリングした作品を紹介します。講習会を受講した学生の作品です。
ペンデンティブドームのモデルです。ペンデンティブドームはビザンチン建築で良くみらるアーチ形式です。ソリッド演算(三次元モデル間の減算、加算、交差など)をうまく利用してドームをモデリングしています。
貝殻(巻貝)のモデルです。公園に時々こんな形の滑り台がありますよね。等角螺旋という螺旋曲線をもとにモデルを作成しています。螺旋そのものは比較的簡単に書くことができますが、貝殻のように面をはるのに苦労したようです。基本となる螺旋に対して円状にそれぞれずらした螺旋を定義し、面をはることでモデルを作成しています。
メンガーのスポンジのモデルです。メンガーのスポンジはフラクタル図形の一種で、再帰数が増えると表面積が無限大に近づき、体積は0に向かっていきます。実はGDLでは再帰のアルゴリズムを記述するのは難しいのですがメンガーのスポンジはちょっと工夫することでモデリングできます。
左側はスイレン(waterlilly)のモデルです。花びらはベジェ曲線からなる自由曲面を利用してモデリングしています。ベジェ曲線からなる自由局面は自分で作成したものをGDLファイルとして保存し、マクロとして呼び出しています。このモデルで地味に難しいのは雌しべ、雄しべや茎の部分です。それぞれの芯が通る線を記述するのは簡単なのですが、これに厚み(太さ)を持たせ、太さのある曲線を表現するのにはかなり複雑な処理が必要です。スイレンのモデルでは太さが細く、芯線もほぼ直線なので分かりにくいですが、右図の角のモデルを見るとモデリングが困難であることが分かると思います。ここでは、講習会で学んだ傾く円柱を改良してつくった傾くコーンを使ってモデリングしています。
自転車のモデルです。三台の自転車が並んでいますが、同じGDLファイルのパラメータ(フレームのサイズ、カラーなど)を替えることでバリエーションを表現しています。フロントフォークや、フレームなどは、太さのある曲線としてモデリングしています。一つ上のスイレン、角のモデルでは、傾くコーンを利用して、座標変換(ADD、ROT)の前後の頂点をつないで(るように見せて)いますが、このモデルでは座標変換そのものを独自のコードで行うことですべて頂点をグローバル座標でも管理しています。こうすることで座標変換を跨いだ頂点をつないで面を生成しています。
三角形と五角形からなる多面体のモデルです。極のない球体(に近いもの)をモデリングするのは結構難しいのですが、うまくモデリングできています。このモデルでは、切断面が正多角形になるように輪切りを行い、正多角形の外接円と輪切り高さの関係をつかうことでモデリングを行っています。黒と白の配色がサッカーボールのようです。
こちらはC60、フラーレンのモデルです。五角形と六角形の面から構成される多面体です。このモデルでは五角形(または六角形)を記述したあとに、その回転角を計算してそれぞれの位置に配置することでモデルを記述しています。五角形、六角形を構成する辺と中心をつないで三角形にしています。
GDLでなくC/C++、NCルータを用いた模型作成などの作品を紹介します。
複合現実感技術では、画像内のタグ、マーカーを検出してタグとカメラの相対的な位置関係を得て、画像の中に三次元モデルを違和感なく合成します。複合現実感のライブラリはC/C++で書かれているので、ArchiCADのアドオンとして実装してみました。アドオンを起動し、タグの写る写真を読み込ませると、その画像を解析しタグを原点として視点位置にArchiCADの視点(カメラ)を自動生成します。ArchiCADの三次元画面の床平面(タグ平面)やカメラのパースが画像撮影時のものに一致するので、左図のように複合現実中でモデルを動かす、変更するなどの操作が可能です。また、当然CADのレンダリング機能も利用できるので、右図のようなCGを得ることもできます。
アルゴリズムで生成した町並みです。名づけてアルゴリズミックシティです。このモデルではfDLAアルゴリズム(参考)を利用してC/C++プログラムで建物位置を決定後、GDLコードとして書き出すことで、建物を配置しています。アルゴリズムそのものは一見、建物の配置や町並みなどには程遠いように思えますが、こうして建物を置いてみると「それっぽい」風景になります。建物の高さもアルゴリズムで決めています。高さによって適切に階数を積み上げるのはGDL上で行っています。左は明け方のイメージ、右は深夜のイメージでレンダリングしてみました。
Rattlebackという不思議なおもちゃをGDLでモデリングし、NCルーターで切削したものです。Rattlebackの底面は微妙にねじれたカーブになっています。このカーブの働きで、一定方向での回転はしますが、逆方向に回そうとすると回転が反転してしまいます。左図がNCルータ-の設定画面です。図中の青いラインにそってエンドミル(加工用の刃物)が動きます。右図が切削したRattlebackです。時計回りに回そうとすると確かに途中で反時計回りに反転してしまいます。不思議です。
参考:
最後に先生によるおまけです。以前、立体版ペントミノを作成しました(参考)が、誰も解けずに変なオブジェと化しているのを見かねた先生が、C/C++で解を求めるプログラムを作成してくれました。実際に解の通りに並べてみたのが上図です。縦横に複雑に組みあうみたいなので、手作業ではなかなか解に到達できそうにありませんね。
以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。