3Dモデルを立体視で確認できるVRアプリを作っている

10月に衝動的にUnityでVR(Meta Quest 2)アプリを作り始めた↓



作り始めた理由は、ZBrushで作った3Dオブジェクトを立体視で確認する目的に丁度良いレンダリング品質の既存アプリが存在しなかったからだけど、その後Adobe MAX 2022Adobe Substance 3D Modelerが発表された↓



このAdobe Substance 3D Modelerが3D形状を把握しやすいレンダリング品質のアプリならそれで十二分な気はするけど、自分のニッチな用途に特化した小さなアプリを作ってみれば色々と学びもあるだろう。
と思って作り続けることにする。


スポンサーリンク


作り始めてからちょいちょいUnityのバージョンをアップデートしていて、今はUnity 2021.3.16を使っている。
かなり汚いコードだけど、とりあえず当初欲かった機能は実装した↓

実装した機能

  • PC上のファイルをブラウジングして任意のOBJファイルを選択する (Runtime File Browserを使用)
  • OBJファイルをロードする (Runtime OBJ Importerを使用)
  • 3Dモデルの初期配置・スケールを自動調整し、高さ30cmサイズで目の前に表示する
  • コントローラー操作で3Dモデルを移動・スケールできる (Oculus Integrationを使用)
  • サーフェイサーを吹いた状態風の質感でレンダリングする (Unity-GeoAOを使用)

OBJファイルのブラウジングとロード

ファイルのブラウジング機能を提供するRuntime File BrowserはAssetStoreで配布されている無料アセットだけど、UnitySimpleFileBrowserとしてGitHubにもあるので、URLを指定してPackageManager経由でインストールした。
ファイルエクスプローラー的なCanvasがPrefabとして用意されており、それをsceneに配置してPhysic RaycasterをOVR Raycasterに置き換え、UIHelper.prefabもsceneに配置すれば簡単に導入できる。
ブラウジングして選択したOBJファイルをRuntime File Browserでロードするようにした↓


3Dモデルを掴む、ピンチ操作で拡大・縮小

意外にも、コントローラーでオブジェクトを掴む機能の実装に1番苦戦した。Oculus Integrationを利用してはいるけど、今の実装が適切なのか分からない。車輪の再発明になってるかも。
付属のScriptそのままでは、動的にロードしたGameObjectを掴めるようにするのが難しかったので。
2つのコントローラーを使ったピンチ操作(?)で3Dモデルの拡大・縮小もできるようにした↓



スポンサーリンク

3Dモデルをサーフェイサー風の質感でレンダリングする

当初、サーフェイサー風の質感にするためにSSAO(screen-space ambient occlusion)で陰影を付けていたが、オブジェクトをコントローラーで掴んで自由に移動できるようになったら、左右の視点で陰影の付き方が極端に違ってチラつく現象に遭遇しやすくなった。SSAOは視点に依存した近似手法なのでしかたがないのだが、形状を確認する上でAmbient Occlusionは重要なので、視線に依存しない方法でAmbient Occlusionを近似する方法を探した。
幸い、今回作ろうとしているアプリでは3Dオブジェクトの形状が動的に変形したりしないので、陰影をテクスチャとしてキャッシュして処理負荷を抑える方法が使える。

少し調べてみたら、GitHubでUnity-GeoAOというプロジェクトを見つけたので移植↓



まだAmbient Occlusionのサンプリング範囲や強度のパラメータが無いので、見た目の微調整ができない。
順にURP標準のレンダリング、URP + SSAO、URP + GeoAO↓







AO無しでも悪くない気がしてきている(笑)

今後

欲しかった機能をとりあえず実装して全体像はできたけど、まだソースコードはほぼ1つのファイルのベタ書き。ここからブラッシュアップというか、コードのリファクタリングと欠けている細々とした機能を追加してユーザビリティを改善して行こうと思う。まだQuest Linkを利用したPCVR状態だけど、できればQuest 2単体で動く軽量なアプリにしたい。

修正・追加したい機能

  • 移動・スケール後の3Dオブジェクトを初期位置に戻す (リセット)
  • 別の3Dオブジェクトをロードする
  • 3Dオブジェクトの拡大・縮小中にスケール数値を表示する

UltimateXRというフレームワークを使えばリッチなUIを手軽に実現できるだろうか。
Quest 2単体で動作させるためのパフォーマンスチューニングはだいぶ後回しになりそう。

見えてきた課題

HMDで高さ30cmのフィギュアサイズで3Dオブジェクトを表示して見て、HMDの特性というか欠点にも気づいた。
現行のHMDは、目の前に小さなオブジェクトを表示して注視する用途は想定されておらず、目から1メートル以上離れた距離のオブジェクトを見る前提で作られている。目からの距離30cm程度に配置された小物を見ようとしても、左右の目の焦点が上手く合わない。

以前3Dディスプレイを使ってみた時にも似た問題に直面したな↓



この問題をソフトウェア的に、コンテンツ制作側で解決する方法がないかちょっと考えてみたい。

ここまで、進捗を動画キャプチャしてTwitterの進捗アカウントに投稿していたけど、OculusMirrorの画面をWindows標準の動画キャプチャ機能で録画したものを編集していた。録画が何故か全画面にならないので、Adobe Premiere Proで一部分だけを切り抜く手間がかかっていた。
Adobe Premiere ProでもHMDを使ってVR動画のプレビューができることを知った↓
https://helpx.adobe.com/jp/premiere-pro/using/immersive-video.html

もしや、Unity Recorderパッケージを使えばもっと手軽にキャプチャできるのだろうか。
https://www.vjyou.com/2022/08/unity360.html

GitHub

オイラはGitHubでUnityプロジェクトのバージョン管理をしているのだが、Unityプロジェクトだとファイルサイズの大きいアセットが多くなるからLFSの容量制限がシビアですぐに上限に達する。



GitHubのアカウントは一応Proだけど、Git LFSには1つのアカウントで1GBまでしか使えないらしい。他のリポジトリを削除したりなんやらで対処してるけど、こういう本筋と無関係の手間でやる気を失う(笑)

このVRアプリの開発記事まとめページ↓
3Dモデルを立体視で確認できるVRアプリ
Quest2を発売と同時に購入しておきながら、たいして活用しないまま2年以上経った。 衝動的に、VRで3DCGの造形を立体視で確認できるアプリをUnityで作り始めた。


スポンサーリンク

関連記事

WordPressのサーバ引っ越し方法を考える
UnityでPoint Cloudを表示する方法
UnityでARKit2.0
Open Shading Language (OSL)
ZBrushでアヴァン・ガメラを作ってみる 全体のバランス調整
ZBrushでアヴァン・ガメラを作ってみる 頬の突起を作り始める
ZBrushでゴジラ2001を作ってみる 身体のアタリを作る
OpenCV
Point Cloud Utils:Pythonで3D点群・Meshを扱うライブラリ
SONY製のニューラルネットワークライブラリ『NNabla』
ZBrushでアヴァン・ガメラを作ってみる 甲羅のバランス調整
映像ビジネスの未来
サンプルコードにも間違いはある?
マイケル・ベイの動画の感覚
openMVG:複数視点画像から3次元形状を復元するライブラリ
Geogram:C++の3D幾何アルゴリズムライブラリ
Adobe Photoshop CS4 Extendedの3Dモデル編集機能
trimesh:PythonでポリゴンMeshを扱うライブラリ
UnityのGlobal Illumination
SONYの自律型エンタテインメントロボット『aibo』
3DCG Meetup #4に行ってきた
Mitsuba 3:オープンソースの研究向けレンダラ
『PIXARのひみつ展』に行ってきた
PyDataTokyo主催のDeep Learning勉強会
ZBrushからBlenderへモデルをインポート
WordPressプラグインによるサイトマップの自動生成
ガメラ生誕50周年
OpenCV 3.3.0 contribのsfmモジュールのサンプルを動かしてみる
素敵なパーティクル
UnityのAR FoundationでARKit 3
写真から3Dメッシュの生成・編集ができる無料ツール『Autodesk Memento』
Accord.NET Framework:C#で使える機械学習ライブラリ
ZBrushでアヴァン・ガメラを作ってみる 下半身のバランス調整
Windows Server 2008にAutodesk Maya 2009をインストール
3分の動画でプログラミングを学習できるサイト『ドットインストール』
ラクガキの立体化 分割ラインの変更・バランス調整
書籍『メイキング・オブ・ピクサー 創造力をつくった人々』を読んだ
Stanford Bunny
Unityで画面タッチ・ジェスチャ入力を扱う無料Asset『TouchScript』
Unite 2017 Tokyoに行ってきた
『シン・ゴジラ』のコンセプトアニメーションのメイキング動画が公開された
なんかすごいサイト

コメント