TOPIC9|Unityで活用する[2/2]|Unityで3D都市モデル内を自由に歩いてみる
Unityには3D空間をキーボード操作で移動できるテンプレートが用意されています。テンプレートを使ってPLATEAUの3D都市モデルの街並みを歩くプロジェクトを作ってみましょう。またUnityで3D都市モデルを扱いやすくするための軽量化のテクニックも紹介します。
【目次】
9.6 街を歩き回る
9.6.1 スターターアセット
9.6.2 Third Personテンプレートでプロジェクトを作る
9.6.3 PLATEAUの3D都市モデルを配置する
9.7 LOD2の建築物モデルの取り扱い
9.7.1 テクスチャを反映する
9.8 軽量化と応用
9.8.1 建築物に関する負荷の軽減
9.8.2 モデルの軽量化
9.8.3 アセットの活用
9.9 事例
9.10 参考情報
9.6 _ 街を歩き回る
PLATEAUを使って街を歩き回る例を示します。
9.6.1 _ スターターアセット
Unityでは、3Dをはじめて扱う人のためのサンプルとして、Unity Asset Storeにて「Starter Assets」を配布しており、一人称視点の「First Person Controller」三人称視点の「Third Person Controller」があります。
これらは、キーボードのカーソルキーの操作で自分のキャラクターを上下左右に動かすサンプルで、[Shift]キーを押しながら走ったり、[スペース]キーでジャンプしたりできます。
以下では、三人称視点の「Third Person Controller」を使って、PLATEAUの街の中を歩いてみましょう。
【メモ】
一人称視点とは「キャラクターの目が自分の目になる(自分が見えない)」、三人称視点とは「自分を俯瞰する別のカメラから見る」という視点です。
9.6.2 _ Third Personテンプレートでプロジェクトを作る
[Unity Hub]には、Third Person Controllerを使うプロジェクトテンプレートが「Third Person」として提供されています。このテンプレートを使って新規プロジェクトを作成します(図9-28)。
テンプレートには、階段や建物、そしてロボットのような「自分」が含まれています。このまま実行すれば、キーボード操作で動き回れます。階段を上ったり、[スペース]キーを押してジャンプしたりできます(図9-29)。
9.6.3 _ PLATEAUの3D都市モデルを配置する
このサンプルにPLATEAUの3D都市モデルを配置して、都市を自在に歩き回れるようにします。
[1]サンプルの建物を削除する
サンプルの建物を削除します。[Hierarchy]パネルを確認すると、[Environment]ツリーの配下に階段や建物が格納されています。これを右クリックして表示されたメニューから[Delete]をクリックして削除します(図9-30)。削除すると、図9-31のように階段や建物が消え、自身の「PlayerArmature」や、それを第三者視点で追う「PlayerFollowCamera」などが残ります。
[2]PLATEAUの3D都市モデルを配置する
「9.2.2 FBXファイルをUnityに配置する」の手順で、FBX形式ファイルをAssetsに配置してシーン上にドラッグ&ドロップします。3D都市モデルを配置したら、[Inspector]パネルで[Transform]の[Position]の値を(0, 0, 0)に変更します(図9-32)。
[3]自分の初期位置を変更する
自分の初期位置を東京都庁の近くに設定します。
まずは地図上で、設定したい場所の緯度・経度・標高を調べます。いくつかの方法がありますが、ここでは地理院地図で確認します(図9-33)。
緯度・経度・標高を確認して、「緯度35.689823、経度139.693689」、「標高40.8m」に設定することにします。
まずは、緯度・経度を平面直角座標のX・Yの値に変換します。国土地理院の「測量計算サイト」には、「平面直角座標への換算」というページがあります。このページに先ほど調べた緯度・経度を入力して、平面直角座標に変換すると、X座標やY座標がわかります(図9-34)。ここでは(-34403.6123 m, -12638.7080 m)と出力されました。
自分自身である「PlayerArmature」を、この位置に設定します。
平面直角座標系は、「3.5.3 平面直角座標系」で説明したように、X軸が南北(真北が正)、Y軸が東西(真東が正)です。図9-21も、この座標系での結果です。
しかし頒布されているFBX形式ファイルでは、扱いやすいようにX軸が東西、Y軸が南北に設定されています。そのため、この「(-34403.6123 m, -12638.7080 m)」は、Unity上の3Dのシーンでは、X、Y、Zのそれぞれの座標の値として、「(12638.71, 40.8, 34403.61)」と設定します。
具体的には、[Hierarchy]パネルで[PlayerArmature]をクリックして選択し、[Inspector]パネルの[Position]の値を「(12638.71, 40.8, 34403.61)」に設定します(図9-35)。
[Hierarchy]パネルの[PlayerArmature]を選択し、[F]キーを押してこのオブジェクトの周辺を拡大すると、都庁の建物の周辺に自分が居るのがわかります(図9-36)。さらに目視で確認しながら、建物と重ならない位置に、Positionを適宜、動かしてください。
[4]地面を付ける
このままだと床がないので、実行すると重力に従って沈んでしまいます。そこで地面を作ります。
ここでは「dem」フォルダに格納されている地形モデルを使います。「9.3.2 異なる種類のデータを重ねる」で説明したように、次のように操作します(図9-37)。
【メモ】
ここではPLATEAUの活用例を示すため、PLATEAUの地形モデルを地面として利用しています。より軽量に動かしたいのなら、Unityの組み込みのオブジェクトを使う方法もあります。例えばPlaneオブジェクトで平面を表現したり、またTerrainオブジェクトでは凹凸を設定できる平面を表現したりできます。
(1)dem/533945_dem_6677.fbxをプロジェクトに追加
(2)ドラッグ&ドロップしてシーンに追加
(3)[Position]を(0, 0, 0)に設定
[5]地面にコライダーを設定する
手順[4]で作成した地面には、まだ当たり判定の設定をしていないので、地面に接してもそのまま下に落ちてしまいます。そこで地面に対して、「コライダー(Collider)」を設定します。
コライダーは、Unityにおいて衝突領域を定義するオブジェクトです。いくつかの種類がありますが、ここではメッシュに従って衝突領域を定義する「Mesh Collider」を使います。
[Hierarchy]パネルで配置した533945_dem_6677を選択し、[Inspector]パネルの[Add Component]をクリックして、検索ボックスに「collider」と入力して[Mesh Collider]を追加します(図9-38、図9-39)。
【メモ】
Mesh Colliderは、モデルの形状に合わせて衝突判定を行うため、比較的処理の負荷がかかるコライダーです。
もしMesh Colliderを使って処理が重くなってしまう場合は、例えば地面などの判定のためにBox Colliderを使うと処理負荷を下げられます。ただしこの場合、地面の起伏が考慮されなくなってしまうため、場所によっては地面から浮いてしまったり、地面に若干埋まってしまったりする場所ができてしまうため、注意が必要です。
Asset Storeで公開されているSAColliderBuilderなどを用いて、複数のColliderを組合せたComposite Colliderを作ることで、形状に合わせたより軽量なコライダーを生成する方法もあります。
[6]実行して確認する
以上で完成です。再生ボタン([▶])をクリックして実行してください。図9-40のように都庁の周囲を歩けます。カーソルキーで前後移動、[Shift]キーを押しながらカーソルキーを押すと走り、[スペース]キーでジャンプします。また、マウス操作で視点の移動ができます。Mesh Colliderを使っているため、坂があれば、その坂を上るなど、起伏も表現されています。
コラム:建物と衝突判定するには
建物にはメッシュデータがあっても、コライダーが含まれていないので衝突判定がなく、建物を通り抜けてしまいます。これを防ぐために、建物にも衝突判定のためのコライダーを追加します。ただし、建物のすべてにMesh Colliderをつけると負荷が高くなります。そのような場合は、より軽量なBoxコライダーを追加するとよいでしょう。
モデルデータの中のすべての建物を選択した状態で、Box Colliderを追加します(図9-41)。
Box Colliderは個々の建物のサイズに合わせた長方形のコライダーとなるので、個々のサイズ調整をしなくても、適したサイズのコライダーとなります(図9-42)。
ただし、特殊な形状をしている場合はコライダーが大きくなってしまうので、この場合はMesh Colliderに変更すると、より正確な衝突判定ができます(図9-43)。
9.7 _ LOD2の建築物モデルの取り扱い
LOD2の建築物モデルも、同様にして配置できます。
[Project]ウィンドウにFBX形式ファイルをドラッグ&ドロップしたときに、Unityのオブジェクトへの変換が行われるため、この処理にはしばらく時間がかかります。変換後、[Project]パネルに登録した3D都市モデルをシーンに配置するのには、さほど時間がかかりません。
9.7.1 _ テクスチャを反映する
LOD2の建築物モデルを配置した直後は、テクスチャが反映されていません。反映するには、[Project]パネルから取り込んだモデルを選択し、[Inspector]パネルの[Materials]タブを開き、[Location]で、[Use External Materials(Legacy)]を選択して[Apply]をクリックします(図9-44、図9-45)。適用には、しばらく時間がかかります。
その他の取り扱いは、LOD1の場合と同じです。「9.6.3 PLATEAUの3D都市モデルを配置する」で設置したLOD1の建築物モデルを削除し、LOD2の建築物モデルを改めて追加して、LOD1と同様に設定した場合の実行例を図9-46に示します。
9.8 _ 軽量化と応用
UnityでPLATEAUの3D都市モデルを取り扱うときの、軽量化や応用のトピックをまとめます。
9.8.1 _ 建築物に関する負荷の軽減
建築物は動かないので、[Static]を有効にしておくと、静的バッチ処理でまとめて描画されるため、処理速度が向上します(図9-47)。
またStatic設定をしたならば、ライトをベイクするのも負荷の軽減に寄与します。これは、テクスチャに対して事前に光の当たり方を計算しておくものです。Staticに設定したオブジェクトに対してだけ機能します。
ライトをベイクするには、ライトオブジェクト(このスターターアセットの場合は[Lighting]配下の[Directional Light])を選択し、[Inspector]パネルから、[Light]コンポーネントの[General]のModeを[Baked]に変更します(図9-48)。
建築物の裏側を見せる必要がないなら、見える範囲だけを描画する「オクルージョンカリング」を有効にするのも、負荷の軽減に貢献します。
9.8.2 _ モデルの軽量化
LOD2の建築物モデルなど、複雑なモデルを扱うときは、モデルを軽量化すると負荷が軽減します。軽量化は、「ポリゴン数を削減する」「テクスチャを統合する」「テクスチャの解像度を下げる」などが有用です。
こうした軽量化は、あらかじめBlenderなどのソフトウェアでFBX形式ファイルを読み込み、加工しておくのも有用ですが、Unity上で処理することもできます。ポリゴン数の削減やテクスチャの統合には、Unityのさまざまなアセットがあるので、それらも活用できます。
【メモ】
有償のアセットになりますが、Mesh bakerを使うと、モデルとマテリアルを統合できるため、負荷を軽減できます。
コラム:Pixyz製品の利用
Pixyzは、複雑な3Dモデルを最適化して、リアルタイムアプリケーションに対応したアセットを製作できる製品です。PLATEAUで広い領域を一度に扱うとデータが大きく処理速度が低下しがちですが、Pixyzを使うとこうした問題を解決できます。
例えば建物ごとに分割されていたモデルデータをまとめたり、テクスチャデータの最適化をPixyzで実施したりすることで、fbxモデルデータを軽量化できます(図9-49)。
とくにPixyzは、点群データやCADデータもまとめて取り扱えるため、そうしたデータとPLATEAUを組み合わせるときに有用です(図9-50)。
9.8.3 _ アセットの活用
ビルの消去や破壊は、アセットを使うと簡単に実現できます。
[ビルを魔法で消す]
https://assetstore.unity.com/packages/vfx/shaders/urp-dissolve-191256
[破壊する]
https://assetstore.unity.com/packages/3d/props/fragmented-objects-25699
https://assetstore.unity.com/packages/tools/particles-effects/mesh-explosion-5471
https://assetstore.unity.com/packages/tools/game-toolkits/rayfire-for-unity-148690
9.9 _ 事例
「Unity」を使った例としては、以下のようなものがあります。
■ 景観まちづくりDX
【企業名】 | 株式会社シナスタジア |
【分野】 | 都市計画・まちづくり |
【対象地域】 | 愛媛県松山市 |
【PLATEAU利用データ】 | 建築物(LOD1、LOD2) |
【他のデータとの掛け合わせ】 | 松山市の景観計画データ |
【利用ソフトウェア】 | Unity |
【活用概要】 | 3D都市モデルを活用し、景観計画や開発計画をVR空間で容易に再現可能なツール開発。 景観計画策定の支援や景観協議の円滑化を目指す |
【URL】 | https://www.mlit.go.jp/plateau/use-case/uc22-045/ |
■ 歩行者移動・回遊行動シミュレーション
【企業名】 | 株式会社構造計画研究所 / 大成建設株式会社 |
【分野】 | 都市計画・まちづくり |
【対象地域】 | 東京都新宿区 西新宿地区 |
【PLATEAU利用データ】 | 建築物(LOD1, LOD2)、道路(LOD1) |
【他のデータとの掛け合わせ】 | 地下ネットワークデータ、調査等の集計表、時間帯別交通量、 社会実験時の人流データ、歩行者の行動シミュレーション作成にあたるパラメータ |
【利用ソフトウェア】 | Unity、artisoc Cloud |
【活用概要】 | 東京都西新宿エリアを対象として3D都市モデルを活用した歩行者行動シミュレーションを実施し、そのシミュレーション結果の分析と可視化によって、平常時・イベント実施時等におけるまちの賑わい創出のための施策の検討や検証を支援するツールを開発。 |
【URL】 | https://www.mlit.go.jp/plateau/use-case/uc22-023/ |
■ 屋内外をシームレスにつなぐ避難訓練シミュレーション
【企業名】 | 森ビル株式会社 |
【分野】 | 防災・防犯 |
【対象地域】 | 東京都港区 虎ノ門ヒルズ周辺 |
【PLATEAU利用データ】 | LOD拡張(BIMベースのLOD4相当の建物モデル) |
【他のデータとの掛け合わせ】 | シミュレーションデータ(群衆シミュレーションによる⼈流データ) |
【利用ソフトウェア】 | Unity |
【活用概要】 | BIMデータを元とする虎ノ門ヒルズビジネスタワーの細密な屋内モデルを制作し、3D都市モデルに統合。屋内と屋外をシームレスにつないだバーチャル空間を構築。 これを用いて、オフィスや商業施設を擁する複合施設における複数の避難計画でシミュレーションし、人の滞留状況を可視化することで、適切な避難方法を学習。 |
【URL】 | https://www.mlit.go.jp/plateau/use-case/uc20-014/ |
■ ウォーカブルな拠点整備を目指した都市開発に伴う 歩行者量変化の可視化
【企業名】 | パナソニック株式会社 |
【分野】 | 都市計画・まちづくり |
【対象地域】 | 大阪府大阪市 新大阪駅周辺 |
【PLATEAU利用データ】 | 建築物(LOD2) |
【他のデータとの掛け合わせ】 | シミュレーションデータ (VR連携:新⼤阪駅周辺地区・⼗三駅周辺地区・淡路駅周辺地区) |
【利用ソフトウェア】 | Unity |
【活用概要】 | 現在の新大阪駅を3D都市モデルによって再現し、ここに歩行者の移動データを重ね合わせることで、現状の空間設計の課題を洗い出す。 これにより得られた知見を活用し、新大阪駅やその周辺を含むエリア一体をウォーカブルな拠点として整備していくための基礎資料やエリアマネジメント活動等の検討材料とすることを目指す。 |
【URL】 | https://www.mlit.go.jp/plateau/use-case/uc20-015/ |
9.10 _ 参考情報
「Unity」でPLATEAUを扱う際に参考になる情報を紹介します。
■ 本チュートリアルをやってみた動画(Unity社作成)
本チュートリアルを実際にやってみた動画を Unity社が作成していますので、参考にしてください。
■ 今さら聞けない PLATEAU を楽しむための Unity のいろは ~ Unity and Pixyz Studio ~(Unity社作成)
UnityやPixyz Studio を活用して高精細モデルのデータを軽量化する方法を紹介します。
■ ハンズオン動画
Unityを活用したハンズオンのアーカイブ動画を紹介します。
【文】
大澤文孝
【監修】
ユニティ・テクノロジーズ・ジャパン株式会社