[Omniverse] [Unity] Unity Omniverse Connector : USDのインポート

  • by

前回はUnity Omniverse ConnectorのUSDエクスポートを確認しました。
今回はUSDインポートを行うため、以下をチェックします。

  • AR Quick Lookのusdzを使う
  • TrnioPlus(フォトグラメトリを行うアプリ)からエクスポートしたusdzを使う
  • UnityでUSDのインポート

Unity 2021.3.11f1(URP)とOmniverse Create 2022.3.3を使用しました。
Unity Omniverse Connector 200.0.0-beta.1を使用しました。

これはOmniverseはそれほど関係なく、「UnityにUSDをインポートする」という機能になります。
OmniverseのOmniPBRのマテリアルもある程度解釈してUnityにインポートする、というのが利点になります。

USDのシーンはどこでGetする ?

ところで、USDのシーン(ファイル)はどこでGetするのがよさそうでしょうか?
DCCツールでUSDファイルを出力しUSDを中間ファイル的に扱うというのは、個人的には今のところそれほど主流にはなっていない気がしています。
別のツールに持って行く場合は、昔からあるobjやfbxがよく使われるでしょうか。
各DCCツールにはUSDエクスポートはあるのですが意図しない結果になる場合も多く、これらは現在進行形で開発が進んでいるのかもしれません。

AR Quick Lookのusdzを使う

Apple社がARとして用意している"AR Quick Look"のusdzを使ってみましょう。
AR Quick LookのusdzはAR目的であるため、シーンの寸法がしっかりしています。
もし、寸法が間違っていればARで現実世界に召喚したときにすぐに違和感はわかりますよね。
また、「iPhoneやiPadでusdzを見ることができる=USDの検証に使える」ということで
USDとしても間違った記述があれば読み込みに失敗するか、見た目で破綻を確認できます。
アニメーション対応の確認も可能です。
現状はPixar社のUSD SDKに付属の「USDView」(これはOmniverse Launcherからもインストールできます)か「AR Quick Look」を使うのがUSDの検証としてはいいと思います。

以下の「3Dモデル」にいくつかusdzがあります。
iPadやiPhoneのSafariからアクセスすると、そのままARできます。
https://developer.apple.com/jp/augmented-reality/quick-look/

Windows環境からアクセスするとusdzファイルとしてダウンロードできます。
ここでは例として蓄音機(gramophone.usdz)をダウンロードしてみました。

Unity Omniverse Connectorは、まだusdzの直接のインポートには対応していません。
そのため、いったんusdzを解凍する必要があります。
usd/usdc/usdaファイルにするとインポートできるようになります。
ちなみにusdzファイルは「無圧縮のzipファイル」になっています。
OSの機能で解凍できます。

ファイルエクスプローラで対象のusdzファイルを右クリック。
ポップアップメニューで"解凍"-"ここに解凍"を選択。

これはWindows 10での解凍ですが、もし解凍できない場合は、

など、検討するのがよいかもしれません。
以下のように解凍されました。

フォルダ"0"にテクスチャが展開されています。

Unityでusdファイルをインポート

Unityを起動します。ここではUnity 2021.3.11f1(URP)を使いました。
なお、各Unityプロジェクトでは、Unity Omniverse ConnectorをPackage Managerからインストールしておいてください。
Unity Omniverse Connectorがない環境では、このUSDインポートは使用できません。

Projectウィンドウに「usdファイルとテクスチャをまとめてドロップ」することで、USDファイルがインポートされます。
もしくは、同一フォルダにあらかじめテクスチャファイルをインポートしておいてください。
usdファイルのあるフォルダもしくはそのサブフォルダがテクスチャファイルの検索対象となります。

NormalMapは"Fix now"します。

usdcファイルを選択すると、Inspectorウィンドウでusdファイルを確認できます。
Unityでfbxを読み込んだときと同じ感じでusdファイルを扱えていますね。

シーンに配置してみました。

マテリアルも、BaseMap/MetallicSmoothnessMap/NormalMap/OcclusionMapに割り当てられているのを確認できます。
PBRマテリアルもいい感じです。

Trnio Plusを使ってusdzを取得

iPhone/iPadアプリの"Trnio Plus 3D Scanner"はフォトグラメトリを行うアプリで、私は重宝しています。
https://apps.apple.com/us/app/trnio-plus-3d-scanner/id1546160586

これはフォトグラメトリした形状をusdz形式のファイルとしてエクスポートできます。
フォトグラメトリした形状をUnity Omniverse Connectorにインポートしてみましょう。
iPhone8上のTrnio Plusで確認します。
エクスポートしたい形状を長押しし、ポップアップメニューを出します。

"Export Scan"を選択。

"TEXTURE SETTINGS"でTYPEを"JPG"とします。

※ デフォルトの"HEIC"はUnityでは認識できないので、Jpegかpngに変更する必要があります。

iCloud上にusdzファイルをエクスポートするのがよいと思います。
これをWindows環境に持って行き、同様に解凍します。
usdcファイルと"0"フォルダ内のテクスチャに展開されました。

Unityを起動し、
Projectウィンドウにusdファイルとテクスチャをまとめてドロップします。

フォトグラメトリの形状がインポートできました。

Unityはシーン上のGridの1マスが1m x 1mになり、シーン単位はメートルです。
シーンに配置すると、1つ前にインポートした蓄音機と比べても実寸であるのが確認できます。
これが非常に重要で「Trnio PlusでARKitやLiDARを使ったフォトグラメトリは実寸が確保できる」のです。
そのためARとも相性がいいですし、厳密な寸法を持つことができるUSDフォーマットとも相性がいいです。

Unity Omniverse ConnectorのUSDインポートの制限

現状、Unity Omniverse ConnectorのUSDインポートはスキンやウエイト情報、スケルトンのインポート、アニメーションのインポートには対応していません。
また、マテリアルがOmniPBRの場合は一部正しく読み込まれないものもあります。
OmniGlassやカスタムMDLのインポートには対応していません。
これらは今後のバージョンアップで改善されることになると思われます。

今回は、Unity Omniverse ConnectorのUSDのインポートについて解説しました。
この場合は、マテリアルはUsdPreviewSurfaceを使うことになります。
次回、BlenderからのUSDエクスポートをUnityに読み込む、ということにチャレンジしようと思います。