Unity を検索

Unity & WebRTC - ブラウザーと Unity を繋げる

2019年9月17日 カテゴリ: テクノロジー | 4 分 で読めます
取り上げているトピック
シェア

日々進化する Unity のグラフィックスを活用したアプリケーションを開発したいと思うことはよくあります。しかし、HD レンダーパイプライン(HDRP)やレイトレーシングのような高品質なグラフィックスを可能にするテクノロジーは、どのようなデバイスでも動作するものではありません。

そこで私たちは、WebRTC のテクノロジーを利用して、ブラウザーから Unity の高品位なレンダリングを使用したプロジェクトを活用できるようにするフレームワークを開発しました。このフレームワークはランタイムからもエディターからも利用できるため、HDRP を使ったカーコンフィギュレーターや建築モデル、その他ツールとの連携など、様々な用途に応用できます。

このコンテンツはサードパーティのプロバイダーによってホストされており、Targeting Cookiesを使用することに同意しない限り動画の視聴が許可されません。これらのプロバイダーの動画の視聴を希望する場合は、Targeting Cookiesのクッキーの設定をオンにしてください。

ブラウザーとリアルタイムを繋ぐ WebRTC

WebRTC とは、Google が 2011 年から開発しているオープンソースソフトウェアで、ブラウザーやモバイルプラットフォーム間でピアツーピアのリアルタイム通信を可能にするために利用されています。WebRTC は主要なブラウザーで対応が進められているため、最新のブラウザーさえインストールされていれば、多くの端末で利用可能です。

私たちは Unity で WebRTC を気軽に活用できるようにするライブラリを Apache 2.0 ライセンスのもと、オープンソースのプロジェクトとして GitHub に公開しました。また、このライブラリはプレビューリリースとしてパッケージマネージャーに公開されているので、プロジェクトに気軽に追加することができます。

WebRTC + Unity のドロップインフレームワーク「Unity Render Streaming」

Unity 向けの WebRTC ライブラリを開発するとともに、このライブラリを用いて Unity のアプリケーションをブラウザーから利用できるようにする Unity Render Streaming というフレームワークの開発に取り組んでいます。

Unity Render Streaming をプロジェクトに追加することで、Google Chrome や Safari などの、皆さんが日頃利用しているブラウザーから Unity で開発したアプリケーションをリアルタイムに操作できます。また、私たちはデスクトップのブラウザーだけでなく、iPad や iPhone、Android の主要ブラウザーで動作を確認しています。

Unity Render Streaming もパッケージで公開しているため、パッケージマネージャーからすぐに追加することができます。ソースコードはこちらの GitHub リポジトリから取得できます。

ユーザー入力をブラウザーから

Unity Render Streaming はブラウザー上で行われた入力操作を Unity アプリケーションへ即座に送信してディスパッチします。キーボードからの入力、マウス及びタッチの操作、HTML ボタンのイベントに対応しています。Unity 上で通常の開発と同じように入力処理を実装すれば、Unity Render Streaming フレームワークが WebRTC の DataChannel API を通して新しい Input System に入力イベントを受渡して処理するため、普通の Unity の開発体験と同じようにブラウザーからの入力を利用することができます。

複数の端末に同時配信する

Unity Render Streaming を使用したアプリケーションは、同時に複数の端末と接続することが可能です。同時接続可能な台数はマシンスペックと映像品質に依存しますが、通常のマシン環境であれば、同時に 4 台程度の接続は許容範囲です。

1 つ注意が必要なのは、Unity Render Streaming を利用する際のネットワーク環境です。WebRTC は映像のストリーミング配信も行うので、映像品質を維持するためには安定したネットワーク環境が必要になります。

また、複数の端末への配信が可能といっても、端末数が増える分だけ負荷は増加します。
Unity Render Streaming 単体でもイントラネット環境でのストリーミングは簡単に構築することができますが、実際のインターネットでの配信サービスを作る際ははるかに複雑な仕組みが必要となることを覚えておく必要があります。

例えば、10 台以上の端末への配信を考える場合は、SFU と呼ばれる配信用の分散サーバーを使ったシステムを構築する必要があるほか、インターネットで WebRTC を活用するためには、別途 STUN / TURN サーバーといったものを利用する必要があります。

映像のハードウェアエンコーディング

ハイクオリティなグラフィックスを高いユーザー体験をもたらせるフレーム数でストリーミングするためには、パフォーマンスと遅延の 2 つの問題を解決する必要があります。

ストリーミング時の遅延を減らして高いユーザー体験を提供するために、NVIDIA Video Codec SDK を使用してフレームバッファの GPU ハードウェアエンコーディングを行い、ブラウザーに送信しています。

そのため、現在の Unity Render Streaming を使用する際には、NVIDIA の GPU を搭載したコンピューターで実行する必要があります。将来的にはより多くの GPU をサポートしていきます。

サポートは?また、使ってみるには?

Unity の WebRTC ライブラリは Apache 2.0 ライセンスのもと、コミュニティサポートのテクノロジーとして運用します。このテクノロジーに興味がある方はぜひ開発に参加してください。リポジトリをフォークしたり、機能を拡張したりすることも自由です。さまざまな可能性を試してみてください。もしかしたら新しいアイデアがひらめくかもしれません。

まずはチュートリアルドキュメント(英語日本語)をご一読ください。また、ドキュメントの FAQ も役に立つかもしれません。WebRTC と Unity Render Streaming についてのフォーラムを開始しましたので、ぜひフィードバックや情報交換にご活用ください。

みなさんが WebRTC と Unity で、さまざまな面白いプロジェクトを開発されることを楽しみにしています。

2019年9月17日 カテゴリ: テクノロジー | 4 分 で読めます
取り上げているトピック