LightWave で都市を作る

LightWave でビル群や都市を楽にモデリングしたいので、自動生成プラグインを中心とした、さまざまな方法をまとめた。

CityGen

「CityGen」という LightWave のビル群生成フリープラグインがある。かなり以前からあるものらしいが、LightWave で使える都市(っぽいもの)生成プラグインはおそらくこれだけ。前景レイヤーにテンプレートとなるポリゴンや曲線を作成すると、そこから建物を背景レイヤーに生成してくれる。ただし、道路などビル以外の生成には未対応。

早速導入してみる。CityGen は「Eki's ModPak」というプラグインパックのひとつなので、パックをすべて入れるなら、まずは「Download」ページの「ModPak installer」というリンクからダウンロード。そして LightWave の Modeler で[ユーティリティ]タブ>[LScript]>[LScript/RT]から、ダウンロードした「ModPak_V1_install.lsc」を実行してファイルを展開する。

その上で、同じく「Download」ページの「Here's an updated version of CityGen」とあるリンクから CityGen の修正版をダウンロードし、先ほどプラグインが展開されたフォルダ内の「Citygen.lsc」を上書きする。あとはいつものプラグイン追加と一緒。追加してもメニューに表示されない場合は、[メニュー編集]でプラグイン名を検索して、出てきたプラグイン名を配置したい位置へドラッグで挿入する。

さて、[LScript/RT]から「ModPak_V1_install.lsc」を読み込むとインストールパネルが出た。「インストール前に設定ファイルをバックアップしておけ」という注意書きが。自分の使用バージョンは LightWave 2015 なのだが、とりあえず一番新しいと思われる「LightWave 7.5c」を選んで[OK]。

画面下部に「The Modpak preset lscripts were extracted in LScripts/Utility/Eki/Mod/Presets directory.」と出たので、無事ファイルが展開されたのかと安心する。

……だがしかし、なぜかその展開されたはずのファイルが見当たらない。「NewTek」フォルダ内を検索しても出てこない。

ふと思いついて、英語版設定にして同じマシンに入れてある LightWave v11.6 でやってみたところ、「.../NewTek/LightWave_11.6.1/bin/Lscripts/Utility/Eki/Mod/Presets/Lscripts/Utility/Eki」にファイルが展開されているのを確認。「bin」フォルダ直下に「Lscripts」フォルダが生成され、その中にさらにいくつもフォルダが作られて展開されていた。ということは、英語版に切り替えておかないとファイルが展開されないのかもしれない。ただし、v2015 を英語版にして試してはおらず、推測にすぎないので注意。

※インストール後に表示言語を切り替える方法は、Windows 版だとスタートメニューから LightWave フォルダを開き、「設定の初期化」を選択し、「設定の初期化」パネルで日本語または英語のいずれかを選択、[OK]ボタンを押して LightWave を再起動する。ただしこれは表示言語だけでなく、他の設定も初期化されるので注意。

とりあえずファイルは入手できたので、フォルダ内の「Citygen.lsc」を修正版で上書きし、v2015 のプラグインフォルダへ移して読み込んでみる。なお、CityGen だけ使いたければこんな手間をかけなくとも、修正版プラグインファイルを単体で入れればよい

CityGen の起動時にパスワード入力を求められるが、「Download」ページにある通り「8larcuslah8」を入力すればよい。

使用例

おそらく一番簡単に都市っぽいものを作る手順。まず500m*500mの正方形で平面を作成。

[マルチ加工]タブ>[細分化]>[細分化]で、分割方法に[ファセット]を選択して実行するのを何度も繰り返す。正方形が細かく分割されていくが、だいたい一辺15mくらいになったところでやめた。

ビルとして生成したい箇所のポリゴンを選択。最初に全選択してから、道路部分をなぞって選択解除し、そこからさらに調整すると手早くそれらしい街並みになる……かもしれない。

そして[Citygen]を使用。選択したポリゴンから次々とビルが生成されてゆく。

1分ほどでビル群がすべて生成完了。この例では道幅が太い……細分化した際にもう少し細かく割った方が良かった気がする……。

ちなみに各ビルの壁・窓・屋根の各パーツごとにサーフェイスが設定されるが、テクスチャは存在しない。

これを保存して CLIP STUDIO PAINT へ持ち込み、そのまま[LT変換]して線画にしたものがこちら。微調整は必要だが、イラストや漫画の遠景であれば使えるだろう。

以上、多少もたつきつつ30分ほどの工程だった。一番のネックは、最初に平面ポリゴンを分割して街の見取図を作らねばならない点だろう。ここは実際の地図をベースにすればもっとそれらしくできるが、そのぶん時間がかかる。

簡単な方法としては、オブジェクトを砕いてパーツ分割する「粉砕(フラクチャ)」ツールが使える(v11以降)。作りたい街の広さの平面に少し厚みをつけてボックスを作り(全体が閉じた形状が必要なので)、できれば細分化後に[マルチ加工(Multiply)]タブ>[粉砕(Destroy)]>[粉砕(Fracture)]で、[アルゴリズム]を[ボロノイ(Voronoi)]にして適切なパラメータで実行すれば、いわゆるボロノイ図で分割されるので、これをいじって街並みの配置へ応用すればよい。ボロノイ以外のアルゴリズムも使えるかもしれない。

また、こちらの紹介動画も参照。

使い方

前景レイヤーに「配置見取図(フロアプラン)」となるポリゴンを作成し、そこから建物を生成するのが基本的なやり方。他に、[曲線]ツールで作成したスプラインをベースにしてもよいし、あるいは大きなメッシュ面があれば、そこから適当なポリゴンを選択して実行することも可能。さらには、前景レイヤーを空にしたままで実行すると、ランダムな都市ブロックを生成してくれる。この場合は単なるフラットなポリゴンの集まりにしかならない。

スクリプトを実行すると、前景レイヤーにあるものに応じて要求が表示されることがある。また、繋がったポリゴンは足されて1つの大きなポリゴンとして処理され、曲線はポリゴンに変換される。生成ポリゴンにはサーフェイス名が自動付与される。利用可能なポリゴン面がなくなると終了する。注意点として、配置見取図を作るときは必ず現実のスケールに合わせること。

操作パネル項目

以下に、処理の流れや操作パネルの各項目について、配布サイトの解説などからまとめたものを記した。

  • Reset settings (設定リセット)
    • 色々といじっていて都市があまりにも変になってしまったら、ここをチェックするとリセットされる。
[Options]タブ
  • Buildings surface base name (サーフェイスの基礎名)
    • 建物の生成中にさまざまな新規サーフェイスを作るが、ここの文字列がそのサーフェイス名のベースとなる。例えば初期設定の「Building」を使用すると、「Building_0001_Roof_Edge」や「Building_0003_Window_Frames」のようなサーフェイス名が付く。
  • Numbered surfaces (番号付きサーフェイス)
    • [All (per building)]は各建物に番号付きサーフェイスを付与する。例えば、3つ目に生成されたビルの窓枠サーフェイス名なら「Building_0003_Window_Frames」などとなる。[Random]でも番号付きサーフェイスを付与するが、こちらは同じ「Building_0003_Window_Frames」というサーフェイス名が、建物の作成順序に関係なく、どこかの建物へランダムに適用される。[Off]ではサーフェイスに番号を割り当てない。
  • Random name limit (ランダム名称の制限)
    • モデル内に何百もの別々のサーフェイスができるのを避けるため、この設定で番号付きサーフェイスの量を制限できる。これを例えば3に設定すると、3つの異なる屋根や窓といったモデルのサーフェイスができる。この設定は[Numbered surfaces]がランダムになっている場合のみ機能する。
  • Per poly window names (窓のサーフェイス名付与)
    • 有効にすると、各窓のポリゴンに、異なった番号がランダムに割り振られたサーフェイスを付与する。夜間のシーンで窓の一部を点灯させたいときなどに使える。しかし欠点として、サーフェイス名を割り当てると非常に時間がかかるため、この設定を使用する際は注意。
  • Optimize original geometry (元ジオメトリの最適化)
    • 基となる見取図ポリゴンのポイントは窓の生成にも利用されるが、あまり高密度すぎると、醜いだけでなく不必要に過剰なディテールの窓ができてしまう。この機能ではそれを回避するため、基となるポリゴン上の点を結合して最適化する。いくつかの選択肢があるが、普通は[Both]に設定すればよい。もし配置見取図を置かずにこの項目を使うなら、その他の設定にしてみるのもよい。
  • Optimize amount (% of floor height) (最適化の量)
    • 最適化されたメッシュがどうなるか、大まかに決定するために使用される。実際には、X軸とZ軸における細部の最小許容サイズを制御する。
  • Optimize final geometry (最終ジオメトリの最適化)
    • この項目が有効だと、都市が構築された際に簡単なポイントを結合するなどの最適化がおこなわれる。
  • Force positive Y axis (Y軸へ揃える)
    • 建物が常にY軸方向へ伸びるようになる。無効の場合、建物は元の「配置見取図」ポリゴンの法線方向に伸びる。
[Floors]タブ
  • Floors Min / Max (階数の最小/最大)
    • 生成された建物は、この2つの値の間でランダムに階数が決まる。すべての建物をきっちり5階建てにしたいなら、両方に5を設定すればよい。
  • Floor height (階高)
    • 建物の階の高さ設定。[+/-]に入れる値によって建物間でランダムな差をつけられる。なお、1つの建物内ではどの階も同じ高さになる。
  • Ground floor (1階)
    • 建物に簡単な1階を作成する。
  • Alternate floor (代替フロア設定)
    • 普通の階には窓が付くだけだが、この設定で、すべての建物の2階を、窓なしか、または単純なバルコニー付きにできる。ランダム設定可能。
[Roof]タブ
  • Roof edge (屋根の縁)
    • 屋根の縁を作成する。[Random]で建物間に変化をつけられる。
  • Roof bevel (屋根のベベル)
    • ベベルされた屋根を作成する。LightWave の Modeler におけるベベル機能と同じ課題があり、例えば凹面形状におけるベベル操作では斜めになる可能性がある。実行後に奇妙な屋根ができた場合は、たいてい屋根のベベルが原因。
  • Roof nurnies (屋根の設置物)
    • 屋根の上にランダムにアンテナや換気シャフト等を生成する。これらの配置は、ルーフポリゴンのバウンディングボックスで制御されているので、建物が奇妙な形だと、物の一部が空中に置かれてしまうことがある。「Nurnie limit」で各屋根における設置物の最大数を設定する。
[Windows]タブ
  • Windows (窓)
    • 建物間の窓をランダム化するときや、または強制的にすべての建物に窓をつけたいときに使用する。
  • Window size (% of floor height) (窓サイズ〔階高の百分率〕)
    • 建物がどれだけ窓で覆われているかの割合を制御する。超高層ビルなら高い値、古い工場なら低い値に設定するなど。[+/-]に入れる値によって建物間でランダムな差をつけられる。
  • Inset (& of window size) (窓のインセット〔窓サイズの百分率〕)
    • 窓が壁にインセットする深さを制御する。このベベル操作は、基本的な窓になる1から、内側にエッジのある立体フレーム窓となる5まで変えられる。近代的な建物の場合は0という設定でもいけることがある。[+/-]に入れる値によって建物間でランダムな差をつけられる。
  • Window frames (窓枠)
    • 大体は[3D]にして設定すれば立体的で綺麗な窓枠になる。しかし都市規模の窓を計算するときは、ポリゴン数を抑えるため、時々この設定を抑える必要がある。
  • Frame tickness (% of window size) (窓枠の厚み〔窓サイズの百分率〕)
    • 窓枠の厚み設定。[+/-]に入れる値によって建物間でランダムな差をつけられる。
  • Window frame cross (窓枠に横桁)
    • 窓に横桁をつける場合に使用。

使えそうなプラグイン

ちなみにブロックをポリゴン上に多数生成してくれるプラグインは、他にも「Greeble & Nurnies」や「LWGreeble」というものがある。本来は『スター・ウォーズ』の宇宙船機体表面のような、突起が多数ある表面形状(この突起を「greeble」とか「nurnie」と呼ぶらしい)を簡単に作るプラグインだが、ビル群生成プラグインとしても使えるかもしれない。

  • LWGreeble - BETA v.1
    • 拡張子「.ls」で保存。ただしこのページによると、Macで使う場合は些細なバグがあるので1文字修正する必要があるらしいが、どこを直せばよかったのかは書き込みした方が覚えていないらしく不明だとか。LScript に詳しい方からの情報求む。

また、こういうプラグインもある(40ドル)。

OctaneRender」というGPUレンダラーにLightWave用のプラグインがあるらしく、以下ではそれに加え、さらに「IFW2」というノードプラグインセットも使って描画している(LW2015)。

その他の方法:Modeler

プラグインではなく、ゼロからモデリングする方法。

ベベルで簡単なビル群を作る

底面となる複数ポリゴンを選択したらベベルツールを使い、数値入力パネル(ショートカット【n】)でシフトの「+ / -」欄に任意の値を入れると、その値の範囲内でランダムに押し出すことができる。これで高さの違う簡素なビル群が簡単に作れる。


立方体から簡単なビル群を作る


Photoshop の地図画像を読み込んで立体化


都市モデリング
実在の地形を生成

こちらのシェアウェアを使えば、国土地理院発行の数値地図からLWOファイルを出力できるらしい。

こちらは Modeler に DEM (数値標高モデル) のデータを入力できるプラグイン。国土地理院の数値地図およびアメリカ地質調査所 (USGS) のフリー数値地図『GTOPO30』に対応。シェアウェア。

以下は Sketchup を介して Google Earth の地形データを LightWave へ持ち込む手順。やや古いので現在でも可能かは不明。

その他の方法:Layout

インスタンス機能を使ったレンダリング

v11以降で、すでにビルのオブジェクトがあり、かつ LightWave でレンダリングするのであれば、プラグインを使う方法とは別にインスタンス機能を使う方法もある。この機能を使えばオブジェクトを特定のサーフェイス上に複製表示できるので、元となるビルが数種類あれば、そこから簡単に大量のビル群をレンダリングできる。以下のような例がある。

設定で複製する数を変えたり、複製時に回転させて向きを変えたりもできる。また、区画ごとに違う設定にしたければ、あらかじめサーフェイスを区画別で分けておけばよい。

インスタンス機能の詳しい使い方は、マニュアルや以下を参考。

パラメトリックシェイプ

LightWave2018 からは Layout の新機能「パラメトリックシェイプ (Parametric Shape)」というやつを使う方法もあるらしい。ノードで色々といじる模様。


アニメーション

以下ではビルが上に伸びてパーツが合わさり構築されていくアニメーションを、プラグイン「DP Kit」の「Part Move」ノードを利用して作成している。