tpc13-3

TOPIC 13|VRワールドをつくるためのプラットフォームでの利用 [3/3] |各VRプラットフォームでのワールドの作成

作成した3D都市モデルをVRプラットフォームに配置してワールドを作ります。ここでは代表的なVRプラットフォームであるcluster、VRChat、Mozilla Hubsへの配置と公開方法を説明します。またVRアプリを自作する際のポイントも紹介します。

Share

【目次】

13.2  clusterで使う

 13.2.1  セットアップ

 13.2.2  3D都市モデルの配置

 13.2.3  必須コンポーネントの配置

 13.2.4  ワールドの公開

13.3  VRChatで使う

 13.3.1  セットアップ

 13.3.2  3D都市モデルの配置

 13.3.3  必須コンポーネントの配置

 13.3.4  ワールドの公開

13.4  Hubsで使う

 13.4.1  Hubsの注意点

 13.4.2  UniGLTF(UniVRM)でglb形式に変換する

 13.4.3  SpokeでHubsのVRワールドを作る

13.5  自分でVRアプリを作る

 13.5.1  パフォーマンス

 13.5.2  VR体験の調整

13.6  事例

13.7  参考動画

13.2 _ clusterで使う

それでは、それぞれのVRワールドに変換していきます。まずは、clusterでの扱いから説明します。

13.2.1 _ セットアップ

clusterのVRワールドの作り方は、公式ドキュメントに記載されています。

Creator Kitのセットアップのとおりに、Unityで「3D」のテンプレートを使ってプロジェクトを新規作成し、Creator Kitをインストールします。

【メモ】

ドキュメントに記載のとおり、Creator Kitは、特定のバージョンのUnityエディタを対象としているので注意してください。

13.2.2 _ 3D都市モデルの配置

Creator Kitの準備ができたら、「13.1 VR用のデータを作る 」で作成した3D都市モデルをシーンに設置します。

13.2.3 _ 必須コンポーネントの配置

ワールドに必須のコンポーネントのドキュメントにあるように、「Spawn Point」と「Despawn Height」の2つのコンポーネントを配置します。

【メモ】

clusterのサンプルには、車やドローンなどもあります。本チュートリアルでは触れませんが、こうした乗り物をワールドに配置するのもよいでしょう。

SpawnPoint

ワールドに入った際とリスポーンした際の位置を決めるコンポーネントです。ワールドには、Spawn Typeが「Entrance」のSpawn Pointが1つ以上必要です。Spawn Pointのスクリプトを、空のGameObjectにアタッチして作ります。ここでは、ビルのうえにSpawn Pointを設置しました(図13-45)。

図13-45 Spawn Pointを設置する

Despawn Height

プレイヤーやアイテムをリスポーンする高さを決めるコンポーネントです。ワールドに対して、1つ配置しておかなければなりません。Spawn Pointと同様に、Despawn Heightのスクリプトを、空のGameObjectにアタッチして作ります。地形モデルよりも下に配置しておきます。

図13-46 地形モデルより下にDespawn Heightを設置する

13.2.4 _ ワールドの公開

ワールドを作成したら、clusterにログインし、ワールドをアップロードして公開します。下記のドキュメントを参照してください。

ワールドのアップロード】

https://docs.cluster.mu/creatorkit/world/upload-world/

【ワールドの公開】

https://docs.cluster.mu/creatorkit/world/publish-world/

13.3 _ VRChatで使う

VRChatでも、clusterと同様に、UnityにSDKをインストールしてVRワールドを作ります。

13.3.1 _ セットアップ

VRChat SDKのVRワールドの作り方は、公式ドキュメントに記載されています。

VRワールドの作成には、「VRChat SDK」が必要です。あらかじめダウンロードして、展開しておいてください。なお、2023年から「VRChat Creator Companion」を最初にインストールする手順に変わっています。公式ドキュメントなどを確認してください。

Unityで「3D」のテンプレートを使ってプロジェクトを新規作成し、ダウンロードしたSDKのunitypackageをインポートします。このときVRChatSDKのメニューが表示されたら、VRChat SDKにログインしてください。

【メモ】

ドキュメントに記載のとおり、VRChat SDKは、特定のバージョンのUnityエディタを対象としているので注意してください。

13.3.2 _ 3D都市モデルの配置

準備ができたら、「13.1 VR用のデータを作る 」で作成した3D都市モデルをシーンに設置します。

13.3.3 _ 必須コンポーネントの配置

VRChatのVRワールドの作り方は、「Creating Your First World」というドキュメントにまとめられているので、これを参考に進めます。(アップデートによって手順が変わることもあるため、公式ドキュメントを参照してください)

(1)VRCWorld Prefabを配置
(2)SpawnPointを設定する。これはVRCWorldのVRC_SceneDescriptorのSpawnsリストに、GameObjectを登録することで有効になる
(3)Refenence CameraやRespawn Height -Yなどを必要に応じて設定
(4)VRChatコントロールパネルから、LayerとCollision Layer Matrixを設定

13.3.4 _ ワールドの公開

VRChatSDKメニューから、[Builder]タブの[Build & Test]をクリックすると、ローカル環境でのテストができます。VRChatの実行ファイルの場所を指定しないと動作しない場合があるので、[Settings]タブで確認してください。

 なお、実際にワールドをVRChatにアップロードして、他のユーザーと楽しむためには、ユーザーのTrust Rankが一定以上でなければなりません。このあたりの事情については、「Why can't upload content yet?」のドキュメントを参照してください。

図13-47 VRChatでVR Worldを作成した例

注意点

ワールドの最大サイズは、100MBです。超えていると、警告メッセージが表示(もしくは音声で案内)されます。そのような場合は、テクスチャサイズを調整するなどして、100MBの範囲に収めてください。

図13-48 100MBを超えるとビルドできない。これはテクスチャサイズを8192でビルドしたもの。例えばテクスチャサイズを4096ぐらいに設定すると100MB以下に抑えられる

13.4 _ Hubsで使う

Hubsはブラウザで動くVRシステムです。glb形式(バイナリのglTF形式)などをそのまま読み込めるため、これまで説明してきたようなUnity上での前処理をしなくとも、Blenderなどを使ってOBJ形式ファイルやFBX形式ファイルをglb形式に変換するだけでVRワールドとして使えます。

しかしそのまま利用するよりも、前処理することで、「必要な地域の切り出し」「Simplygonなどによる最適化」「VRワールドに何かオブジェクトをあらかじめ置いておく」などのカスタマイズができます。

13.4.1 _ Hubsの注意点

HubsのVRワールドを作る際の注意点は、性能要件が厳しいことです。さらなるモデルの軽量化が必要です。

具体的には、これまではテクスチャの大きさを8192×8192に設定してきましたが、2048程度まで落としておきます。Hubsでは、採用している3Dシステムの仕組み上、テクスチャの圧縮ができません。8192のサイズで作成したテクスチャはメモリを消費しすぎるため、なるべくサイズを小さくしておきます。

またUnityでは、9区画を展開しましたが、負荷を考え、以下では1区画だけとしておきます。

【メモ】

近年、glTF形式が拡張機能でBasisUに対応しました。それに伴いテクスチャ圧縮の対応は、今後、WebXR関連でも進んでいくと思われます。

13.4.2 _ UniGLTF(UniVRM)でglb形式に変換する

glb形式に変換するにはUniGLTFを使います。これはUniVRMに含まれています。UniVRMのページに記載されているとおりにインストールしてください。インストールとともに、UniGLTFもインストールされます。

UniGLTFを使ってglb形式に変換するには、次のようにします。

[1]テクスチャのサイズを調整しておく

エクスポートする際には、テクスチャのInspectorの[MaxSize]で設定したテクスチャサイズが適用されます。エクスポート対象のテクスチャに対して、事前に調整しておきます。

[2]変換したいモデルを子としたGameObjectを作成する

変換したいモデルを子としたGameObjectを作成しておきます。下記の例では、RootGLBがそのGameObjectに相当します。

図13-49 変換したいモデルを子としたGameObjectを作成する

[3]エクスポートする

[2]のGameObjectを選択した状態で、[UniGLTF]メニューから[Export UniGLTF-…]を選択します。

図13-50の画面が表示されたら、エクスポートするモデルが入っていることを確認して、[Export]ボタンをクリックします。

図13-50 エクスポートする

以上でエクスポートされます。エクスポートした結果を、図13-51に示します。

図13-51 エクスポートしたglb形式ファイル

13.4.3 _ SpokeでHubsのVRワールドを作る

エクスポートしたglb形式ファイルをSpokeで配置して、Hubsのワールドを作ります。

[1]Spokeにアクセスする

Spokeにアクセスします。モデルのアップロードにはログインが必要なので、ログインしておきます。

【Spoke】
https://hubs.mozilla.com/spoke/

図13-52 Spokeにアクセスする

[2]空のプロジェクトを作る

[Projects]メニューから[New Project]―[New Empty Project]を選択して、空のプロジェクトを作ります。作成すると、図13-53のようになります。Terrainは不要なので削除してください。

図13-53 空のプロジェクトを作成したところ

[3]glbファイルを配置する

変換しておいたglbファイルをドラッグ&ドロップします。するとアップロードが始まり、シーンに配置できるようになります。

シーンに配置すると、場所やスケールが自動設定されるので、適切に調整します。

図13-54 glbファイルをアップロードして配置する

[4]Spawn Pointを調整する

そしてSpawn Pointなど、必要なオブジェクトも、適切に調整します。

図13-55 Spawn Pointを調整する

[5]Publishする

[Publish to Hubs]をクリックして、Publishします。

図13-56 Publishする

正常にPublishされると、そのまま部屋を作成して試すことができます。

図13-57 Publishした3D都市モデル
コラム:NavMeshのエラーが発生するときは

公開する際、NavMeshのエラーが発生する場合は、FloorPlanの設定を粗めに調整すると回避できることがあります。参考までに、今回のFloorPlanの設定を、図13-58に示します。

図13-58 FloorPlanの設定

13.5 _ 自分でVRアプリを作る

13.1 VR用のデータを作る 」で作成したデータをシーンに配置し、VR用のカメラリグなどを置き、VRに必要な設定をすれば、OculusなどのVRヘッドセット用のアプリを作れます。なかでも「XR Interaction Toolkit」を使うと、さまざまなVRヘッドセットに対応したアプリを比較的簡単に作れます。

VR開発については、下記のヘッドセットやゲームエンジンに関するドキュメント、並びに取りまとめられているブログを参照してください。

以下では、さまざまなプラットフォームで共通のポイントを記載します。

【SteamVR】
https://valvesoftware.github.io/steamvr_unity_plugin/

【Oculus】
https://developer.oculus.com/resources/

【Unity】
https://docs.unity3d.com/ja/current/Manual/VROverview.html

【XR Interaction Toolkit】
https://docs.unity3d.com/ja/2022.2/Manual/com.unity.xr.interaction.toolkit.html

【こりん氏 (@korinVR) のVR開発メモ】
https://framesynthesis.jp/tech/

13.5.1 _ パフォーマンス

本項ではPLATEAUの3D都市モデルをUnityで扱う際に、パフォーマンスが問題になった場合(FPSが出ない、メモリ不足に陥るなど)に、ボトルネックの解消のために調整できるところを説明します。

一般的にパフォーマンスチューニングは高度な作業なため、本項は発展的内容であり、また求められる性能、グラフィックスのクオリティ、ボトルネックの状況などにより解決方法はさまざまなため、いくつかのヒントを提示するに留めます。書籍やWebなどで、Unityのパフォーマンスチューニングに関する情報は多く公開されているので、そちらを参照するのもよいでしょう。

以下では、PLATEAUの3D都市モデルを扱う際のボトルネックになりやすい部分として、主に描画と物理演算について、チェックすべき箇所を説明します。

描画

PLATEAUの3D都市モデルでは、特に描画が問題になります。なかでもテクスチャとジオメトリ、シェーダーの3つが、問題になりがちな要素です。

● テクスチャ

消費メモリが多く、よりパフォーマンスに影響するのがテクスチャです。品質とデータサイズとのバランスをとりながら、下記の項目を調整します。すべての項目が品質とのトレードオフの関係になっているので、許容される品質を確認しながら調節します。

・テクスチャサイズの縮小
・テクスチャ圧縮の利用
・テクスチャの色フォーマットの変更
・Mip Mapの調整

図13-59 テクスチャのインポートセッティングの部分

● ジオメトリ

ジオメトリのリダクションは、Simplygonの設定を工夫することでも可能ですが、Simplygonは細かいメッシュで作り込まれたモデルの頂点を間引いて最適化を図るアルゴリズムで動いており、PLATEAUのモデルのように直方体の集合を想定したものではありません。そのためリダクションの効果は限定的です。Occlusion Cullingなども設定すると有効かもしれませんが、Occlusion Culling自体のオーバーヘッドがあるので、実際にテストしつつ要否を決めるのがよいでしょう。

図13-60 Occulusion Cullingの設定画面

● シェーダー

シェーダーやレンダリング設定も大きく効いてくる設定項目です。VRであればSingle Pass Stereo Instancingに対応したシェーダーを使うのはもちろん、なるべく軽いシェーダーを使います。Unlit/Textureあたりは動作が軽いですが、見た目が問題になる場合もあるので、適切に選択します。また、ShadowやGlobal Illumination、Light Probe、Reflection Probeなどの、レンダリング設定も調整します。これらは機能をオフにする方が軽くなります。

また設定のGraphics、Qualityなどの設定を検討するのも有効です。

図13-61 Rendererのインスペクター部分とマテリアルのシェーダー設定部分

■ 物理演算

コライダー用のシンプルなメッシュを作成できれば、それをMesh Collider用のメッシュとして使うと、パフォーマンスが改善します。ただし、労力ほどの大きな効果はないので、おすすめしません。

■ その他

VRのSDKが対応していれば、レンダリングパイプラインをURPに変更すると、パフォーマンスが向上する可能性があります。

また、GameObjectをStaticに設定するのも有効です。これは描画と物理演算の両方でパフォーマンスメリットになります。

図13-62 Staticに設定するチェックボックス

13.5.2 _ VR体験の調整

SDKのなかには、NavMeshをもとにテレポート移動をする設計のものがあります。PLATEAUの3D都市モデルは、プレイヤーが中に入って体験することを想定していないので、こうした環境では、はまると抜け出すことができないような領域ができる可能性があります。解決策としては、NavMeshの作成時のパラメータを大きめに設定して、あまり細かい領域を作らないようにする方法があります。

また、自由移動が可能な体験の場合は、移動不可能になった場合に備えて、なんらかのエスケープ手段(Respawnなど)をユーザーに用意しておくのがよいでしょう。

13.6 _ 事例

VRを使った事例としては、以下のものがあります。

■ ゲーミフィケーションを通じた地域の魅力発信

【企業名】株式会社NTTドコモ
【分野】地域活性化・観光
【対象地域】東京都中央区銀座/東銀座エリア
【PLATEAU利用データ】銀座周辺の建築物LOD2データをDatasmith形式へ変換
【他のデータとの掛け合わせ】
【利用ソフトウェア】Unity
【活用概要】3D都市モデルを活用して構築した「バーチャル銀座」を舞台に、ゲーミフィケーションを通じた回遊体験の提供価値を検証する。
フィジカル空間と連携したコンテンツを「バーチャル銀座」で提供することで、多様な文化と歴史をもつ銀座の魅力を発信し、地域の活性化を目指す
【URL】https://www.mlit.go.jp/plateau/use-case/uc20-023/

■ バーチャル都市空間における「まちあるき・購買体験」

【企業名】株式会社三越伊勢丹ホールディングス
【分野】地域活性化・観光
【対象地域】東京都新宿区新宿三丁目エリア
【PLATEAU利用データ】建築物(LOD2)
【他のデータとの掛け合わせ】伊勢丹を中⼼とした複数建物詳細モデル
【利用ソフトウェア】Unreal Engine
【活用概要】3D都市モデルを用いて新宿三丁目エリアの百貨店とその周辺をバーチャル空間で再現することで、購買体験をはじめとする都市機能の提供をバーチャル空間上で実現できるかを検証
【URL】https://www.mlit.go.jp/plateau/use-case/uc20-022/

XR技術を活用した市民参加型まちづくり

【企業名】株式会社ホロラボ
【分野】都市計画・まちづくり
【対象地域】東京都八王子市
【PLATEAU利用データ】建築物(LOD1、LOD2)
【他のデータとの掛け合わせ】
【利用ソフトウェア】CesiumJS、Unity
【活用概要】3D都市モデルとXR技術を組み合わせた市民参加型まちづくりの支援ツールを開発することで、まちの課題や将来像を直感的に理解可能とし、市民のまちづくりへの参加を活性化させることを目指す
【URL】https://www.mlit.go.jp/plateau/use-case/uc22-015/

XR技術を用いた体感型アーバンプランニングツール

【企業名】インフォ・ラウンジ株式会社 / サイバネットシステム株式会社
【分野】都市計画・まちづくり
【対象地域】神奈川県横浜市
【PLATEAU利用データ】建築物モデルLOD1及びLOD2、道路モデルLOD3、都市設備モデルLOD3
【他のデータとの掛け合わせ】
【利用ソフトウェア】AR.js、Three.js
【活用概要】3D都市モデルおよびXRを用いた直感的かつ体感的なアーバンプランニングにおけるコミュニケーションツールを開発することで、市民参加を促進する
【URL】https://www.mlit.go.jp/plateau/use-case/uc22-035/

13.7 _ 参考動画

VRをPLATEAUで作成するときに参考になる動画を紹介します。

Meta Quest 2 で楽しむ PLATEAU VRアプリケーションの開発(2022年度PLATEAU Hands-onアーカイブ動画)
PLATEAUを用いたVR空間の作り方(2022年度PLATEAU Hands-onアーカイブ動画)

【文】

大澤文孝

【監修】

常名 隆司(ユニティ・テクノロジーズ・ジャパン株式会社)
於保 俊(株式会社ホロラボ)