三角関数とブーリアン

最終更新:2020/04/22

さて、三角関数とブーリアンの話をしましょう。特にこの二者に直接の関係はないんですが、正確なモデリングをしようとすると、結構避けて通れないものなんです。

今回は完成したものを先に出しましょう。目標はこれです。これを見ただけでどうモデリングすればいいかひらめく人はこの記事を読む必要はないです。私の使っている方法が絶対正しいなんてことはないですから。

bool000

まず最初に例によって「ディスク」ツールで六角形の板を切り出してやります。厚さは50ミリメートルにしてあります。半径はこの後のモデリングに影響するので、簡単のために1メートルにしてあります。

bool001

六角形の板をコピー(Ctrl+C)でして別のレイヤーに移動して貼り付け(Ctrl+V)ます。Windowsユーザーにはおなじみの「コピー・アンド・ペースト」ですね。別レイヤーに移した六角形の板を正三角形に加工しなおします。方法はなんでもいいですんですが、多少面倒でも精度の良い方法を選択します。

bool002

六角形の右下にある頂点をふたつとも選択して、モデラーウィンドウの下にある「情報」ボタンを押すか、キーボードの「I」を押します。上に示したような新しいダイアログが出てきたら、「全編集」ボタンを押します。X軸とZ軸の値を0に変更してダイアログを閉じます。

すると、次の画像のような形に変形するはずです。

bool003

次の画像で黄色い色で選択されている3つのポリゴンは必要ないので「Delete」キーを押して消してください。

bool004

同様に、不要な頂点を消します。

bool005

次に、三角形の板に形成するために頂点の統合を行います。「詳細」タブ、「ポイント」グループの「統合」ツール(Ctrl+W)を使用します。よく使う機能なので、この際ショートカットを覚えてしまいましょう。図ではスペースの都合で上からの絵しか示していませんが、板状なので上面と底面のふたつずつ頂点があることに気をつけてください。

bool006

無事に加工が終わると、次の画像のような形になっているはずです。ここで重要なのは、正三角形の頂点のひとつが原点に位置しているということです。原点を頂点に持っているということは、先に作成した正六角形の中心を得たのと同じということです。

bool007

六角形の板を作ったレイヤーのボタンを「Shift」キーを押しながら選択すると、同時表示されて次のような感じで表示されます。三角形の板の上面と底面を「移動」ツールで500ミリメートルずつ上下に移動させてあります。ついでにわかりやすくするために赤く色をつけておきました。

bool008

さて、準備はここまでで、ここからが本番です。要するに、赤い三角柱で六角形の板に穴をあけたいわけですが、今のままでブーリアンをやっても、穴ではなく、三角の切り欠きのあるいびつな七角形の板ができるだけです。

そこで、穴になるべく用意した赤い三角柱を縮小します。縮小の中心位置をマウスで指定してもいいんですが、正確な位置に穴をあけることは困難でしょう。アクションの中心に「選択範囲」モードを指定しても単純に最大幅の半分になるだけで、正三角形のそれぞれの頂点からの距離が等しい中心点を得ることはできません。

ここで登場するのが皆さんの嫌いな三角関数です。中心位置を次の図のように求めます。

六角形の半径を最初に1メートルに指定しましたから、中心位置のX成分は500ミリメートルで自明です。

正三角形の頂点から底辺に向かって垂線を引いた場合、\angle Aは、正三角形の頂点の角度をちょうど二等分するので、30度です。\angle xyは90度なので、\angle Bは60度です。



X成分が自明なので、Y成分は次の式で求めます。

     \begin{align*} y=500\times\tan 30^{\circ}=288.67513459481288225457439025098\dots\textrm{ [mm]} \end{align*}

これを「拡大縮小」ツールの「中心」に入力します。

倍率はお好みで。とりあえず85%にしてあります。上の図ではついうっかり「y」にしてしまいましたが、入力先は「中心Z」ですのでお間違いのないよう。

bool009

こんな感じに縮小されたらバッチリです。

bool010

そうしたら、今度は「複製」ツールを使って、穴になる三角柱を一度に作成します。「複製数」を5に設定して、ヘディング「H」を60度に設定します。あとは変更しなくていいです。

bool011

「OK」ボタンを押して複製した結果が次の画像のようになっていれば成功です。

bool012

なんでわざわざ面倒くさい計算をしてまで中心位置を小数点以下数桁にわたって求めたか。ひとえにこの「原点を中心に回転させながら複製する」をやりたかったからなのです。一見面倒そうでも、このほうが結果的にミスが少なく、戻り作業が発生しにくく、正確かつ楽なのです。

6つある赤い三角柱のうち、左の4つを選択して、さらに「複製」します。今度は「複製数」を2にして、「オフセット X」を-1メートルに設定します。ヘディング「H」は0度に戻しておいてください。

最初の正六角形の半径を入力するだけで穴が正確に複製されていくなんて、なんて素晴らしいんでしょう!

bool013

次に、六角形の板のほうの左方3つの頂点を上面、底面ともに選択して、-2メートル「移動」させます。

bool014

次の画像のようになっていれば完璧です。

bool015

そして、いよいよブーリアンです。六角形の板のあるレイヤーをアクティブにして、赤い三角柱群のあるレイヤーの下半分をクリックします。イメージがわかない人は次の画像の右上を見てください。こんな感じです。

bool016

「構造」タブの「複合」グループにある「ブーリアン」を選択します。
「減算」ボタンをクリックして「OK」を押します。すると…

bool017

このようになります。成功です。OpenGLの表示崩れも起きていないようですね。もし、表示崩れが起きていたら「三角分割」を試してみましょう。

お気づきかと思いますが、穴を開けられた場所の面は、赤い三角柱の色になっています。これをうまく利用すれば、細かいポリゴン選択をせずとも複合的な配色が可能になります。

bool018

以上です。細かいことを言うとまだありますけど、とにかく実用上はこれで十分なはずです。
ブーリアンの真骨頂の一部と三角関数の重要さを垣間見てもらえたのなら幸いです。

bool019

六角柱の面取り

最終更新:2020/04/22

「そもそも〝面取り〟って何?」という人のために一応書いておくと、金属加工や木工などで装飾や安全性の確保のために角を削ることを言います。機械製図をやったことがある人や機械工学を勉強したことがある人なら一回ならずとも聞いたことがあるはずの言葉です。

架空のメカをデザインするにあたって面取りをする理由は、

面取りした角の部分が絶妙に反射してかっちょいいからです。

それ以上の理由はありません。面取りの厚さも結構適当です。

で、直方体や立方体の面取りが一番簡単なんですが、「べべル」ツール一発で終わりなので面白くないです。ここは、マウスでやるのはちょっと大変そうな六角柱の面取りに挑戦してみましょう。
なんで六角形なのかと言うと、

最近のメカの流行りだからです(ドヤ顔)。

面取りをすると、面の数が普通は倍になります。なので、「ディスク」ツールで次のように正12角柱を作ります。

hexprism000

細かい値はとにかく簡単なほうがいいです。深く悩む必要もまったくないです。大きさなんてあとでなんとでもなります。Y軸方向に作りましたけど、別にX軸でもZ軸でもいいです。

hexprism001

こんな形の正12角柱ができます。

ところで、正12角形の一辺あたりの中心角って何度でしょう?

     \begin{align*} 360 \div 12 = 30 \ \textrm{[deg]} \end{align*}

ですね。自動生成されたままだと頂点が軸方向に生成されてしまって加工しにくいので、「回転」ツールで30度の半分の15度回します。なんで15度かというと、 面取りしたい面を作業者から見て水平にしたいためなんですね。なんでも水平・垂直にしてしまったほうが作業が楽なのは言うまでもないですね。

hexprism002

次に、水平になってくれちゃった面を選択して「ストレッチ」を適用します。水平になっている面というのはひとつとは限りません。六角柱の場合はふたつありますので、一緒に選択してやります。同じ作業をわざわざ6回繰り返すなんて馬鹿馬鹿しいので、3回で済ませる方法を考えましょう。
面取りをする幅にもよりけりなんですが、ここでは15%にしてみました。今回の作例ではY軸方向で垂直倍率を50%以下くらいにしてやると綺麗に面取りできます。「せっかく面を水平にしたのになんで垂直ストレッチするの?」とは聞かないでください。そういうもんだと思ってください。私もいまひとつ理解できてません。

hexprism003

現状、こんな感じになってます。わかりやすいように加工した面を選択状態にしてありますが、これを解除して、再び15度ずつ回します。「適用」ボタンをクリックして何度か回し続けていると、再び水平になってくれる面が現れてくれます。そこで水平になってくれている面(この場合はふたつ)を選択して、再び同じ設定で「ストレッチ」です。

hexprism004

これをあともう一回繰り返すとあら不思議。大まかには六角柱風なのに、綺麗に面取りされててちょっとメカっぽくなってるんじゃなぁ~い?
次の画像は一連の作業が終わった面取り済み六角柱。ただの六角柱よりは「メカっぽく」見えると思うんだけど、どうでしょ?

hexprism005

で、最期にオマケに「ベベル」を2回かまして、フタらしきものをつけてみました。ミサイルのランチャー風な何かに使えそうなイメージで。

hexprism006

一見簡単そうに見える作業も、直方体や立方体でもない限り、マウスだけで目分量でモデリングするのはちょっと難しいかも、というのが少しでも伝わったのなら幸いです。
この方法は何角形の多角形柱にも応用できるのが最大の利点です(回転させる都合上360度の約数にあたる多角形がいいかも)。「立方体なんてつまんない」と最初は飛ばしてしまいましたが、立方体もこの方法を使ったほうが綺麗に面取りできることもあります。
この方法で造った多角形柱の各頂点の座標は当然のように浮動小数点数のやたらに細かい数になっています。あとで加工するにしても、マウスで浮動小数点数を扱いきるのはなかなか大変ですよ。

もちろん、「そんな単純な形のモデルなんか、大雑把でいいんだよ」という主張は否定しません。メカをどんな風に造るのかは個人の自由です。多少歪んでたってレンダリングした結果を見た大半の人は気付きません。架空のメカならなおさらです。誰もそれを「正しい/間違ってる」なんて言えませんから。それで誰もが認める「かっこいいメカ」を造れる自信があるというのなら誰にも止められはしないので。

関連記事

ロートドームを造る

最終更新:2020/04/22

アクセス解析を見ていると、Googleなんかで結構「LightWave」で検索して飛んでくる人が結構いるみたい。たぶん、ShadeやメタセコイアやMayaなんかと比較して、どの3DCGツールが一番自分に適しているかを模索している人がいるみたい。

なので、実験的にLightWaveでのモデリングの実例を示してみようと思います。操作性の参考になれば幸いですが、基本的に『架空のメカ限定』なので、3DCGツールで実在の戦闘機や戦車を精密にモデリングしたい人、マンガ風リアル風問わず美少女をモデリングしたい人はアテにしないでください。

まず、おおまかに完成形をイメージします。人によってはデザイン・ラフを二次元の紙などに描いてから作業にかかる人もいますが、失敗が少ない代わりに時間がかかるのが欠点です。

イメージだけでモデリングを始めるのは時間が短くて済むのが長所ですが、思ったとおりにならない、つまり失敗する可能性も上がります。ですが、基本的にデザインとモデリングを同じ人がやるのであれば、

三次元のデザイン能力が二次元のデザイン能力を超えることはまずない。

ということです。

なので、ラフは描きません。経験則ですが、三次元デザイン能力が二次元デザイン能力を上回るのは、すでにプロの手によって精密なデザイン画を起こされているものを三次元化した場合に限られます。つまり、「二次創作」でしか成り立ちませんよ、ということです。

今回はドラグーンの早期警戒機装備に使うロートドームをモデリングします。E-3やE-767に装備されている実在のロートドームも直径9メートル、高さ1.8メートルくらいあるので、ひとまずそのくらいにします。

最初に「ディスク」ツールを使います。

サイドのデフォルトは24ですが、装備で一番目立つ部分なので見るからに「カクカク」なのは避けたいのと、後々のモデリングのことを考えて倍の「48」くらいにしておきます。多すぎるとモデリングが少々面倒になりますが、「ループ選択」ツールなどを使えば大した問題にはなりません。ポイントを一個ずつ選択してたらダメですよ。三次元では手を抜いても品質に影響のないところをいかに省力化するかが結構重大です。

後で円盤状にするので、分割数を「10」にしておきます。上下対称にするので偶数が好ましいでしょう。

中心点の位置は別にどこでもいいのですが、後のモデリングの際に誤って中心座標を書きつぶしてしまった場合のことも考えてXYZの3軸とも0に設定しておくのが無難です。LightWaveは座標がメートル単位で浮動小数点数なので、3軸分はちょっと覚えてられません。

「ストレッチ」や「拡大縮小」や「回転」の際にもいちいち中心座標を指定しなくてよくなるのである程度形が出来上がるまでは原点でモデリングするのをオススメします。

dome000

こんな形の円柱ができます。

dome001

この円柱に「ベベル」や「ストレッチ」ツールを使っておおまかに形を作っていきます。細かい数値は示しません。この辺は純粋に個人の好みの問題です。

このとき、ポイント選択モードで水平に連なっているポイントを上下対称に選択して上下同時に加工していくと楽ですし、綺麗な上下対称のロードドームが作れます。

dome002

こんな形になりました。中央付近の灰色の部分が「ベベル」ツールを3回適用して作った窪みです。二次装甲の下にある一次装甲を表現するために作りました。

もっと外縁に寄っているつもりだったのですが、かなり中央寄りにできてしまったので、再度「ベベル」を繰り返して一次装甲が露出している部分を外側に繰り出します。

「ラフを描いてればこんなことにならなかったのでは?」と聞こえてきそうですが、「ベベル」機能は複数のポリゴンに適応するとポリゴン同士の境界(エッジ)にも厚さがゼロの背中合わせのポリゴンを生成してしまうので、後で消すのが面倒です。細かい部分だと無駄に神経すり減らす羽目になります。「ベベル」を使うなら、細分割されていない平らなポリゴン、この場合は最初のディスクの上底面を選ぶべきです。

dome003

「ベベル」を二回ほど繰り返して全体の形を整えました。灰色の部分を外側に繰り出すために青色の部分を圧縮してしまったのでメッシュがかなり密になってしまいました。ディスクの分割数はもっと少なくても良かったかも。当初の予定より分厚い円盤状になってしまいましたが、まだ手直しがきくレベルですので気にしません。なんと、この状態で960ポリゴンもあります。まぁ、最近のPCは性能がいいので気にしない気にしない。可能なら「バンドグル」で統合してポリゴンを減らしてしまえばいいことです。

全体のバランスを見るためにとりあえず着色してあります。

なんとなく形はできたので、今度はSFっぽい装飾を追加していきます。

dome004

別のレイヤーに新しく正12角形のディスクを作り、それを「ストレッチ」ツールや「回転」ツールなどを使って加工したものを一旦別のレイヤーに移します。デザインがハマらなかった時のバックアップです。レドームの位置と比較しながら位置を調整した後、「複製」ツールで120度ごとに回転させて3箇所に配置しました。

内側に押し込まれているような部分はポイント選択で該当箇所を選んで「移動」ツールで強引に内側に押し込みました。すると、ポリゴンの形に無理が出てくるので、「三角分割」で適度にポリゴンを分割して三次元的な無理を解消してあります。「三角分割」は、モデルが完成するまではOpenGLの表示がおかしくなった時だけにするなど、ほどほどにしておいたほうがいいです。

とりあえず、大雑把には完成です。せっかく広い面があるので後でテクスチャも貼ることにしましょう。
これをドラグーンに乗っけてみたらどう見えるかを見ながら調整していきます。

大体、いつもこんな感じの流れです。

dome005

というわけで、ロートドーム完成。ポリゴンがどうなってるのか見えるようにワイヤーフレームを表示してみました。

え? 3分間クッキングじゃあるまいし、一瞬で出来たかのように完成品を取り出して「『出来上がったのがコレです』と言われても、その間の工程を知りたいんだけど…」って?

ごもっともなんですが、実在のメカを作ってるわけではないので「理想像/お手本」がなく、モデリングの手順も私個人の好みの問題が大半で、一手順ごとに細かく説明してられないんですよねぇ。ご勘弁を。

Inkscape(インクスケープ)」というフリーライセンスのベクター画像編集ツールを使って次のようなテクスチャを作成して貼り付けてみました(Inkscapeは、ベクター画像をSVG形式で管理します。SVGはXML形式で、要するにテキストなのでファイルはかなり小さい)。Inkscapeのインターフェースはちょっとクセがありますが、Adobe Illustratorを使ったことがある人ならすぐ慣れると思います。特にテキスト・ツールは秀逸です。古いバージョンのPhotoshopやIllustratorに引けを取りません。

機能に多少の不満はあっても、なんと言っても最大の利点はタダだということです。最近、整列ツールが大幅に改善されて俄然作画がしやすくなりました。

テクスチャ・マップの画像形式はInkscapeのビットマップ・エキスポート機能を使ってPNG(Portable Network Graphics)形式で吐き出します。PNGの利点はフルカラー(24ビット)に対応していることと、アルファ・チャンネルが8ビットあるので、透過GIFと同じように透過設定ができることです。なので、地のサーフェースカラーに影響を受けないで済むのです。

LightWaveはテクスチャ・マップとして透過PNGを受け付けてくれます。レイアウトやモデラーのプレビューで使われているOpenGLも多少処理は落ちますが、表示オプションで「GLSLShaders」を選択しておけば、透過マッピングに対応できます。

JPEGでもいいんですけど、サーフェースカラーを変えたくなった時にいちいちテクスチャ画像もいじらないといけないので面倒くさいんです。とりあえず透過PNGにしておけば、レンダリングしてしまえば透過色は消えてなくなってしまいますので作業効率にはまったく影響を与えません。

PNGは不可逆圧縮のJPEGとは対照的に可逆圧縮なので画質がまったく劣化しないという特徴があります。その代わりにファイル・サイズが大きくなるという欠点がありますが、細い線や小さい点描などのテクスチャの場合はJPEGだと圧縮の際に消えたりボケてしまったりすることがあり、目的に適わないことがあります。

また、HDDの容量をキロバイト単位で節約しなくちゃいけないほどHDDに困っている人は今はほとんどいないと思います。特に三次元にせよ、二次元にせよ、PCで絵を描こうと考えてる人でHDD容量が不便な人はまずいないと思いますし。

もちろん、アルファ・チャンネルを別に用意するという手もありますけど、技術的にはかえって高度ですし、透過PNGを使う単純さには敵わないと思われます。

dome006

テクスチャの貼り方にこれが正しいという方法はありませんが、本作例の場合はY軸方向に「平面状」で貼り付けて「自動サイズ合わせ」でおおまかに位置を合わせてから画像の縦横比に合わせてX軸とZ軸を調整します。本作例では繰り返し表示する必要はないので、タイル(Tile)の指定はWidth・Heightともに「Reset」に設定しておきます。

この時に電卓(Windows標準の関数電卓でOK)を使ってテクスチャ画像1ピクセルに対してテクスチャを貼る面の単位長さを求めて縦横の長さを算出しなければならないので、初心者にとってテクスチャ・マッピングを使うことの敷居が高いと思われている原因のひとつになってます。

OpenGLでプレビュー表示を見ながら直感的に設定できるようになったので、これでも想像と数値と計算の世界で貼り付けてレンダリング一発勝負だった昔よりは遙かに簡単になったんです。

余計なお節介かもしれませんが、数学が嫌いな人に3DCGは向いてないです。特に三角関数。いや、ほんとです。紙に多角形描いてみて角度や半径からXY成分の距離を求めたりとか高校の数学Ⅰの試験問題みたいなことを普通にやらないと正確にモデリングできないんです。場合によってはかなり中途半端な角度の正弦・余弦・正接を求めないといけないこともあるし、LightWaveの座標系は浮動小数点数で、「\sqrt{3}」とかでは誤魔化せないので、電卓がないとまず計算できないんです。マウス(タブレット)だけでできると思ってる人はちょっと甘いかもしれません。

前回の記事でつけた六角形の装飾にクレーター状の穴があいてます。

別レイヤーに保存しておいた六角形装飾のモデルの大きさに合わせて「囲い面」で穴の内周を作成して別レイヤーに置いておきます。穴の断面のさらに半分にカットしたような形にしておくのがミソです。次に「回転体」ツールを使って穴の内面を作成します。

その後、六角形装飾をアクティブレイヤーに指定して、穴の内面を作成しておいたレイヤーをバックグラウンド・レイヤーに指定して「ブーリアン」ツールの「減算」モードを選択します。これで穴が作れます。

今回はたまたま何事もなかったのですが、ブーリアンをやると穴を穿った面のポリゴン構造がややこしいことになってしまいます。今回の場合、六角形装飾の表面は12角形で、穴のサイドは24なので、切れ込みが入ったみたいな、超変形36角形ということになっています。

たまに内部の数値上は穴そのものはちゃんと開いていても、OpenGLやLightWaveのレンダーが処理しきれなくて穴が綺麗に表示されないことがあります。

そういう場合は慌てず騒がず「三角分割」を試してみます。自動的に綺麗に修正してくれるはずです。よっぽど複雑な場合でない限りこれで対処できます。(12角形に24面の穴を61個開けた時も大丈夫でした。演算時間長くてフリーズしたのかと思いましたけど)

「三角分割」をした後はポリゴンの選択や編集が面倒になるので、完成間近になってこれ以上編集しないという局面になってから穴を穿ったほうがいいかもしれません。