最近NVIDIAのRTX 3060のGPUを購入したのもあり、
リアルタイムレイトレーシングを最大限に活かせる場である「NVIDIA Omniverse」について調べていました。
リアルタイムレイトレーシングだけでなく、いろんな使用用途が模索されておりこれは将来大きなソリューションになるのかも、という予感がしたので今理解できた内容をまとめることにしました。
NVIDIA Omniverse(以下、Omniverseとして記載)は、2021年5月段階ではオープンベータになります。
Omniverseは、複数人での作業を仮想空間上で共同で行ったりリアルタイムシミュレーションを行うことができるオープンプラットフォームです。
GPUメーカーのNVIDIA社が提供しているプラットフォームになります。
https://www.nvidia.com/ja-jp/omniverse/
背景
2021年にオンラインで行われたNVIDIAの大型イベントGTC21ではOmniverseについてのセッションもたくさんあり、
「メタバース」や「デジタルツイン」という単語がプッシュされていました。
「メタバース」とは一言で言えば「仮想世界」です。
SF作家のニール・スティーヴンスンの1992年のSF小説「スノウ・クラッシュ」で出てきたインターネット上の仮想世界をそう呼んでいます。
Wikipedia 「メタバース」 : https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E3%83%90%E3%83%BC%E3%82%B9
かつて「メタバース」をうたうサービスが一瞬流行ったことがあったのですが、今で言うバズワード的なつかみどころがない実装が多かったのもあってか(当時の技術では目標に追いついてないのも多かったかもしれない)、
徐々に廃れていきました。
と、ちょっとぼかしておきます。技術的な問題だけじゃなくて、、というのもあったと記憶しています。
「デジタルツイン」とは、現実世界の複製を仮想世界に置く概念です。
「ミラーワールド」などもよく使われる単語かもしれません。
Wikipedia 「デジタルツイン」 : https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E3%83%84%E3%82%A4%E3%83%B3
この考え方の特徴は、いったん仮想世界に現実のものを表現し、それらを使って仮想世界内で事象をシミュレートし、
最終的にそれを現実世界に持ってくるという役割です。
ある都市の周囲の建物を仮想世界に建て、
そこに新しく施工するビルを仮配置して風が流れた場合の風洞実験を行う、などが分かりやすいかもしれません。
引いてみると、要は「シミュレーションの場を設ける」に行きつきそうで、小さい範囲だとすでに運用されてるところもあるのかもしれません。
現実世界とウリ二つな広範囲の仮想世界を作るというのはまだ実現できていないので(都市全体をとフォトグラメトリしてみた、など模索されてるところはあります)、そのあたりは期待できそうです。
VR/ARと相性よさそうですよね。
なお、風呂敷広げすぎるとバズワードとして多用される恐れもあるので「そういうものがあるんだ」程度にとどめておくのがよいのかもしれません。
VR/ARが何回か衰退と発展を繰り返して2021年現在は何とか数年持ちこたえてる感がしますので、それと同じで「メタバース」も慎重に進むのかなと思ってます。
そろそろ実現できるかもしれない、という入り口に立ったのが今の状態でしょうかね。
追記 :
VR環境ではVRChatやNeosVRといった、アバターになってVR上で交流したり何か制作したりという場は実現されています。
現状はメタバース的な存在として、こういったVRのコミュニティの場かオンラインゲームがあるのかなと思ってます。
Omniverseの構成
Omniverseは複数のプロジェクトの集合体で、
GTC21の基調講演 ( https://www.nvidia.com/ja-jp/gtc/keynote/ )によるとNVIDIA社の取り組みとして結構中核に位置しているように見えます。
公式サイト ( https://www.nvidia.com/ja-jp/omniverse/ ) でこれでもかというくらいに説明されているので改めて書く必要はなさそうですが、
実際に触ってみて自分なりに構成を書いてみました。
エンドユーザから見たOmniverseの役割
使い手側から見ると、以下のような構成になります。
現在動作するツールを図にしています。
Omniverseの用意する仮想空間を通して様々なツールがその空間を共有し、同時に複数人で編集作業を行うことができます。
Omniverseは、リアルタイムレイトレーシングを行うレンダラを持っています。
Omniverseは単体として使用するのではなく、3DCG/CAD/BIM/テクスチャ作成などさまざまな分野のソフトウェアと連携して使用されます。
自身の判断でツールを3DCG/CAD/BIMに分けました。
3DCGはビジュアル/デザイン目的の3Dモデリングやレンダリングを行うツール(一般的にDCCツールと呼ばれるもの)、
「CAD」は設計向けのツール、「BIM」は建築がメインの設計ツール、としました。
その他、マテリアルやテクスチャ作成に特化したSubstanceシリーズ、
キャラクタ作成のためのCharacter Creator、
リアルタイムゲームエンジンのUnreal Engine4、などさまざまな分野のツールと連携できます。
これらのツールとOmniverseをつなぐための役割を行うものを「Omniverseコネクタ」と呼んでいます。
これ以外にもOmniverseとつなぐコネクタとして「Blender」「CityEngine」「SolidWorks」「Houdini」「ParaView」用のものが予定されているようです。
「 https://www.nvidia.com/ja-jp/omniverse/ 」の「プラットフォーム概要」で確認できます。
リアルタイムレイトレーシングでのレンダリングを行うには、NVIDIA社のGPUであるRTXシリーズが必要になります。
システム要件は「 https://docs.omniverse.nvidia.com/plat_omniverse/plat_omniverse/technical.html 」に記載されています。
決して低くはなく、ある程度ハイエンドになります。
最近は RTX3060が5-6万円台と手に入りやすい価格にはなりましたが、動作させるにはそれなりのCPU/メモリも必要になります。
その代わり、「最低限レイトレーシングができるGPU」「レイトレーシングで構成されるリアルタイムレンダラ」で底上げされるため、リアルタイムですが品質はオフラインレンダラと区別が付かないくらい高品質です。
以下は、Omniverse Createでシーンを表示しました。
RTX Path-tracedとしてリアルタイムなパストレーシングを行った結果です。
以下は、iRay(GPUレンダラ)でのオフラインレンダリングを行った結果です。
グラス表現でも、屈折含めてほぼ同じ結果になりました。
このように、レンダリング待ちを行うことなくフォトリアルな結果を得ることができるというのが大きな利点です。
「オフラインレンダラ」「リアルタイムゲームエンジン」と比較すると以下が特徴として上げられます。
- オフラインレンダラと比べて、レンダリング待ちを行う必要はない
- リアルタイムゲームエンジンのような前処理(ライトマップの事前計算、オクルージョンマップの指定など)が不要
反面、リアルタイムではありますが、ゲームのような30fpsや60fpsのスピードが出るかというとそうでもありません。
オフラインレンダラサイドから見た需要のほうがあるのかな、と個人的には感じています。
データの受け渡し手段 : USD
「Omniverseコネクタ」は、「USD」フォーマットを使ってデータを受け渡しします。
USD ( Universal Scene Description )はPixar社が提唱しているオープンなフォーマットです。
https://graphics.pixar.com/usd/docs/index.html
USDの特徴として「非破壊」「スケーラブル」が挙げられます。
また、マテリアルはPBRマテリアルをベースにしているため、PBRマテリアルにさえ準拠していれば様々なツールでマテリアルを共有しやすいです。
「非破壊」は、フォーマットとしてリアルタイム用に多角形の三角形分割やテクスチャベイクなどを行うことなく、中間ファイルとして扱えるような体系です。
DCCツール間で3Dモデルをやり取りする場合、テクスチャをベイクしてしまったり、面をすべて三角形分割してしまうと、再編集はほぼできなくなってしまいます。
ただし、USDのマテリアルについては非破壊かというと少し語弊があると感じています。
OmniverseではNVIDIA社が提供するMDL(Material Definition Language)というShader言語を
標準のUSDのマテリアルのShader(UsdPreviewSurface)の代わりに指定することができます。
具体的には、MDLではBaseColorの色とBaseColorテクスチャを分離して指定できたりします。
また、UsdPreviewSurfaceのマテリアルよりもMDLのほうがパラメータの指定がシンプルで分かりやすいです。
また、DCCツール独自のマテリアル指定がある場合、独自のMDLを記述してそれを取り込むことも可能です。
ただし、「独自の」というのは両刃の剣で、USDのフォーマットでのMDLの使用は標準とは異なる方言ではあるので慎重に行く必要があるのかもしれません。
MDLを使った場合は、USDの付属のusdviewやAppleのAR Quick Lookではマテリアルが表現できないことになってしまいます。
「スケーラブル」は大規模シーンに対応できる拡張性を指します。
USDはファイルで構成されており、それぞれの3DモデルをUSDファイルに分けて「参照」として入れ子構造にしていくことができます。
これにより、例えば大量の木を参照として表現したり、アセットが大量にあるシーンでもそれぞれをUSDファイルに分けて管理することで、遅延の読み込み、LOD的に「後でちゃんとした3Dモデルに入れ替える」といった運用が可能になります。
USD(21.05)にはLODの仕組みはなかった気がするので、距離に応じた自動のLOD対応できるかは分からないです。
Omniverse上の場合は対象となるアセットのUSDファイルを上書きすればそれで更新されることになるため、3Dモデルの入れ替えは容易です。
では、Omniverseはいったいどれくらいのシーンを表現できるのか、というのは以下の動画が興味深いです。
180億三角形の描画とのこと。
映像制作でも使えるのかもしれません。
DCCツール側の役割分担として、モデリングを行ってマテリアルを割り当てた後、
Omniverse側にアセットとして放り込む(レンダリングは勝手にOmniverse側がリアルタイムでしてくれる)、なんならこれを複数人で並列作業する、というワークフローが確立できる気もします。
では、コネクタが用意されていないツールからOmniverseにアクセスできるかというと、
Omniverse自身がUSDをベースとして実装されているため、USDファイルさえ作ることができれば編集のリアルタイム反映というわけではありませんが連携できます。
Omniverse側でUSDファイルをインポートする機能があります。
また、Omniverseで保存されるファイルもUSDになっています。USDさえ理解できればOmniverseとのやりとりは容易になります。
逆に、USDの理解がない場合はOmniverseとのやりとりは難しいと考えてもよいかもしれません。
fbxやglTFからコンバートしてインポートするという手段もありますが、うまくいかない場合も多々ありました。
Omniverseの実際のデータの流れ
OmniverseはRTXのレンダラだけではなく、「Nucleus」というサーバシステムがありこれがコネクタの橋渡しを行っています。
ツール間の連携/同期についてはバックにNucleusを走らせておき、RTXレンダラを使用しないという使い方もできると思われます(まだ試してないですが)。
概念は以下のような感じです。
DCCツールとして3DCG/CAD/BIMなどのツールを使用し、コネクタ経由でやりとりします。
コネクタがやり取りする先は「Nucleus」となり、このサーバシステムはローカルにあってもいいですし、LAN上のどこかのマシンにあってもよいです。
このNucleusがUSDを通してアセットやシーンを管理することになります。
また、ローカルからサーバ上のファイルをミラーする「Omniverse Drive」という仕組みもあります。
「Omniverse Create」というのは「Omniverseアプリ」と呼ばれるもので、これはRTXレンダラ、物理シミュレーションや流体のエンジンを持っています。
ファイルシステムとしてはUSDをベースとしており、これがNucleusと連携して同期を取ることになります。
Omniverseの大きなソリューションから見ると、Omniverse CreateもNucleusにつながるツール/クライアントアプリの1つとなります。
コネクタがないDCCツールの場合、USDファイルを出力してこれをOmniverse Createにインポートしてくることになります。
Omniverseアプリの種類
Omniverse CreateみたいなOmniverseアプリは、用途に合わせていくつか用意されています。
ベータ段階では以下のようなものがあります。
- Audio2Face : 音声からフェイシャルアニメーションを行う。
- Create : シーンの確認用。たぶん一番よく使われる。
- View : 建築向けのビュワー
- Kaolin : 3D Deep Learningの検証用
- Machinima : 映像制作向け
すべてRTXレンダラが基盤にあるため、リアルタイムレイトレーシングでの描画です。
なお、すべてのOmniverseのプロジェクトは、
https://www.nvidia.com/ja-jp/omniverse/
よりオープンベータをダウンロードし、インストールした「NVIDIA Omniverse Launcher」よりインストールできます。
さまざまなドキュメントやフォーラムへの入り口、NVIDIAのOmniverse関連のニュースなどもLauncherに表示されるため、
ここからOmniverseのリソースにアクセスできます。
RTXレンダラを使うアプリを作りたい
「Omniverse Kit」というPython/C++を使ったSDKがベータで公開されています。
上記のOmniverseアプリもすべてKitから制作されているようです。
これを使うことで、RTXレンダラを独自アプリに埋め込んだりUSD対応したりできそうです。
Connectorを作りたい
現状のベータの段階で、SampleのOmniverse Connectorが用意されています。
これを参考にすることで、現段階でコネクタを開発することができます。
以下は、開発中のShade3DのOmniverse Connectorの動画です。
USDファイルをアプリから出力したい
Pixar社のUSDを使いましょう。
https://graphics.pixar.com/usd/docs/index.html
GitHubでソースが公開されているため、ビルドして使用します。
https://github.com/PixarAnimationStudios/USD
Omniverseのすべてのデータのやり取り/ファイルはUSDで統一されているため、
USDをエクスポートする機能さえ作れば、どのDCCツールからでもOmniverse側に3Dモデルやシーンを渡すことができるようになります。
OmniverseのMDL(OmniPBR/OmniGlass)の情報を出したい場合もUSDの構造に情報を追記するだけのため、別途MDLのSDKは不要です。
Shade3Dの「USD Exporter for Shade3D」プラグインで、OmniverseのMDLにも対応していますので参考としてよろしければ。
https://github.com/ft-lab/Shade3D_USDExporter
でUSDにアクセスしています。
appendNodeMaterial_OmniverseMDL関数あたりをたどると、MDLにどう出力してるか読めるかもしれません。
なお、Omniverseのコネクタを作る場合は、SampleのOmniverse ConnectorにUSDも含まれますので別途USDのSDKを用意する必要はありません。
では、Omniverseで何ができそうか ?
ここまではDCCツールの利用から見たOmniverseの模索でした。
最後に、Omniverseで何ができそうかという動画をいくつか列挙しておきます。
いずれもGTC21で紹介されていたものです。
Omniverseアプリはオープンベータでまだ始まったばかりですのでまだこれから進化していく必要はあるかと思いますが、
ポテンシャルがあるのでは、と個人的に期待しています。
建築のためのビジュアライゼーション
DRIVE Sim
仮想的な工場
アセットの管理システム
映像制作
まだ実験的な部分も多く、ワークフローを変えるだけの力があるかというのはまだ時間がかかるのかもしれません。
冒頭に戻って、では「メタバースになりうるか?」というのはまだまだ試行錯誤が必要とは思ってます。
現状は、その一番基礎となるリアルタイムレンダリングとコラボレーションの仕組みを押さえたところ、といった感じでしょうか。
Omniverse Kitを使ったアプリとして、各分野に合わせたキラーツール?がいるかもしれない、と思ったりもしてます。
Omniverseについてはいろいろ掘っている最中ですので、またブログに書いていく予定です。