こんにちは!
今日はRhinoceros で設計した建築モデル「ハッタリ未来都市」をUnityに取り込んで、その中を歩き回って体験したいと思います。
ゲームエンジンで建築物を見ることができると新たなビジュアライゼーションの可能性が広がりますね。
BIM importerのようなソフトもありますが、今回は価格0を目指し、手作業でパース・ウォークスルーを作りたいと思います。
誰でも最初から作るのが可能になるように、Unityの新しいプロジェクトで、まっさらな状態から始めたいと思います。
開発中の学生さんや、その他建築関係の方々のために、なるべく的を絞って分かり易く情報を整理したつもりです!
目次一覧は下記です。
目次
Rhinoの建築モデルをFBX形式で書き出す
Rhinocerosで作成した建築モデルの書き出し
まずはライノからの書き出し方法のご紹介です。
ライノでなくても、他のソフトを利用しても多分方法は一緒です。
まずは下のライノのモデルをFBX形式で書きだします。
セーブするときに拡張子をFBXにするだけです。
設定が出てくると思うのですが、全部デフォルトのままで書き出してみています。
ハッタリ未来都市は変な世界観ですよね。
私はこの業界では変わり者なので、機能的ではない、何だかグネグネした空間や形が好きなのです。
建築FBXファイルのUnityへの取り込み
セーブができたら、FBXファイルをUnityに取り込みます。
PCでの手順は下記のようになります。
まずunityで新しいプロジェクトを作成します。
Unityは2Dではなく、3Dのプロジェクトを作成しましょう。
プロジェクトができると下記のようになります。
まっさらなUnityプロジェクトの、プロジェクトウィンドウのAssetsフォルダに、先ほど書き出したファイルをドラッグ&ドロップします。
そして、ゲームシーンにさらにドラッグ&ドロップすると街が出てきます。
もしかしたら回転して出てくるかもしれないのでその場合、X Y Z のどの方向かに回転させて正しい表示状態にします。
回転方向によって90、または、270度とタイプして入れます。
あれ、おかしいですね、半分ぐらいのアメーバ状の物体が消えてしまっています。
ライノ側で確認してみると、ポリサーフェスで作成されていることが分かります。念のためにメッシュに変えて、再度トライします。
しかし、取り込んでみると、なぜか半分消えてしまいます。
Rhino建築モデルでは意識しないメッシュの裏表がUnityでは重要
状況を整理するために、取り込んだ物体を観察してみました。
よく見ると、ある一定の方向から見ると見えるのですが、違う方向から見ると消えてしまったりしますね。
これはよく考えると、メッシュに裏表があるようです。
メッシュというものはUnity内では、パフォーマンスの観点から必要のある場合を除いて裏面を書かない仕様になっているそうです。
Unityに詳しい方から教えてもらいました。
そこで、Rhinoceros に一度戻って、extrude surfaceを使ってすべての面を押し出して3次元の箱のようにしてみました。
すると、きちんと表面が、Unityに取り込めているのが確認できます。
何だか重いマテリアルの色ですね、これは調整してあげましょう。
建築マテリアルの変更とAssetのインポート
Unity建築マテリアルの作成と反映
まず、プロジェクトウィンドウを右クリックし、Create>Materialでマテリアルを作成します。
右側にインスペクターウィンドウが下記のように出てきます。
このMetalicというのが反射で、Smoothnessが艶と理解しています。
左側のヒエラルキービューでfuture city import用とある、プレファブ(一塊のデータ)をクリックすると、ライノのレイヤーが引き継がれているのが分かります。
下記のようにレイヤー別にオブジェクトが全部整理されています。その中のオブジェクトだけを、シフトキーを押しながら複数選択します。
上手く複数選択できると、オブジェクトがオレンジ色で表示されます。
その時に右側のインスペクターウィンドウにマテリアルが表示されていると思います。
その下のスペースに先ほど作成した白いマテリアルをドラッグ&ドロップします。
これですべてのバルコニーに同時にマテリアルを適用することができました。
ここでバルコニーにはOpaqueのマテリアルを、ガラスにはTransparentのマテリアルを付けてみたいとおもいます。
先ほど作成した白いマテリアルはOpaque(不透明)なものですので前者は終わったところです。
もう一つマテリアルを作成してTransparent(透明)に変えてみましょう。
インスペクタービューのRendering ModeをOpaqueからTransparentに変えることができます。
そして、MetalicとSmoothnessの値を上のように調整します。
これで、窓ガラスとバルコニーのマテリアルが反映されました。
Unity Assetのダウンロードとインポート
これから、この街の中を動き回りたいので、いくつか必要なアセット(部品)をインポート(取り込み)しておきます。
Asset Storeタブを開き、検索バーにStandard とタイプします。
するとStandard Assetというアセットが表示されます。
まず、動き回るキャラクター作成のために、このStandard Assets をインポートします。
これによってキャラクターを動かして、町の中を歩き回れるようにするFirst Person Controller.cs(そういう名前のC#スクリプト)が使えるようになります。
それから今日は使わないのですが、Photon Unity Networking もインポートしておいても良いでしょう。
Photonについては別記事をご参照ください。
キャラクターの作成とFirst Person Controller のアタッチ設定
カプセルキャラクターの作成とC#スクリプトのアタッチ
まずは、キャラクターのデザインをします。
面倒なので、カプセル一個にします。
ヒエラルキービューで右クリックしプルダウンメニューから3d Object>Capsuleを選択し、カプセルを作ります。
Unityのカメラをキャラクターにセットする
続いてカプセルにカメラを付けてあげます。
先ほどと同様にヒエラルキービューを右クリックしプルダウンメニューからCameraを選択します。
できたカメラをカプセルにドラッグ&ドロップし、カプセルの子オブジェクトにします。
下記のように一段落ちしていれば、子オブジェクトになっていることが分かります。
次はこのカプセルにC#スクリプトを付けてあげます。
C#スクリプトによってキャラクターを動かす
プロジェクトウィンドウより、Standard Asset>Charactors>FirstPersonCaractor>Script>FirstPersonController.csを選択します。
そのC#スクリプトを、カプセルを選択した状態のインスペクターウィンドウへドラッグ&ドロップして、アタッチします。
この時、あらかじめカプセルを選択したら、インスペクターウィンドウをロックしておきましょう。
右上の小さな鍵のマークを押すとインスペクターウィンドウをカプセルにロックした状態にできます。
もう一度押すとロック解除もできます。
これだけではまだ動きません。スクリプトをアタッチしただけじゃダメで、設定を全部入れる必要があります。
初期設定ではFirst Person ControllerのWalkSpeed等が全部値が0になっていますね。
これをすべて、何らかの値を入れてあげて、下記のようにして下さい。
それから上のように音源を入れてあげる必要があります。
音源の必要なファイルはStandard Asset>Charactors>FirstPersonCaractor>Audioに入っています。
First Person ControllerのFootstep Soundsの配列にはFootstep01~04をドラッグ&ドロップで入れ、JumpとLandにも対応するJumptとLandというAudioSourceを入れてあげます。
入れないでプレイすると、エラーログがいっぱい出てくるので、やっておいた方がベターです。
Rigidbody と Capsule Colliderのアタッチ
それから、カプセルにはrigidbodyという物理法則に従うコンポーネントと、 capsule colliderという衝突を判定するコンポーネントをくっつけて重力や衝突がきちんとされるようにします。
コンポーネントとはインスペクターウィンドウでくっつける部品のようなものです。
やり方としては、右側のインスペクターウィンドウを一番下までスクロールすると下記のようにAdd Componentというボタンが出てきます。
それを押して、Rigidbodyとタイプします。そして、Rigidbodyを選びます。
(ここでRigidbody2Dを選ばないようにしてください。これは2次元用です)
同様のやり方で、今度はCapsuleとタイプし、Capsule Colliderをアタッチします。
すると下記のような表示になります。
これで、カプセルの側の設定は終わりました。
都市側のrigidbodyとmesh collider設定
次に、都市側にカプセルと衝突が起きるような設定にしてあげます。
そうしないとカプセルが床にめり込んで奈落の底に落ちていきます。
床には、Rigidbodyとbox colliderをそれぞれアタッチしてあげます。
アメーバ状のオブジェクトにはRigidbodyとMesh colliderをそれぞれアタッチしてあげます。
付け方は前章で説明したように、カプセルと同様にAdd Componentから行います。
Mesh colliderはデフォルトだと衝突が発生しないので、Convexにチェックを入れます。
床や建物は動いてほしくないので、Constraints のFreezePositionとFreezeRotationにはチェックを入れてあげて下さい。
下のようになっていればOKです。
以上で設定は終わりです。
Unity パース・ウォークスルーの再生方法
プレイボタンでプログラムを走らせてみると、十字キーで、ちゃんとアメーバ状の物体の上を歩けるようになりました。
プレイボタンとはゲームシーンの上のバーにある再生ボタンのようなマークのボタンです。
スペースキーはジャンプです。マウスで、周りを見回せます。
色々な建物の存在が確認できますね。
もうちょっとましなモデルを提供できたらよかったのですが。
他に機会があればもう少しまじめに形を作る作業を行い、きちんとライノを使うようにしようと思います。
まとめ
建築をUnityの中に入れて歩き回ることはかなり簡単にできるということが検証できました。
意外と簡単な設定でモデルの取り込みができますね。
ARやMixed Realityみたいな機能・ツールが今後可能になると、いろいろと物理的に不可能なことが可能になり、楽しそうな気がします。
色々と建設現場で使われているというような話は聞いているのですが、今後の課題にしたいとおもいます。
現実とリアルの境目がどんどんと近未来のシステムによって近づいてきていますね。
この時代の流れを鑑みるに、この分野でのビジネスなど、本当に可能性は無限大ですね。
是非イベント等があれば参加していきたいと思います。
次回はリアルタイムで複数の人が同じ空間で体験ができるようにしてみたいと思います。
同じモデルにも飽きてきたので、今後は、違う形の家等の作品も作りたいなと思います。
Unityのゲームエンジン自体が初めての方向けには、下記の記事も併せてどうぞ!
それから、この辺の記事も先に読んでいただけると、この先が想像しやすくなるかもしれません。
ライティング関係は、下の2記事をご参照下さい。
それから、以前一度動き回ることにトライしているのでその記事も一応貼っておきます。
もしよかったら、動画もあるので見ていってくださいね。
それでは、また!