メタバース

Unity Render Streamingとは|クラウドレンダリングの仕組みと導入手順

Unity Render Streamingは、Unityが描画した映像・音声をWebRTCでブラウザへ配信し、ブラウザ側のマウスやキーボード入力をUnityへ送り返すUnity公式パッケージです。重いHDRPシーンをGPUを積んだマシンで描画し、iPadや社給ノートPCのブラウザからそのまま操作できるため、車のコンフィギュレーターや建築モデルのレビューといった用途で使われます。

この記事では、パッケージの実体(現行は3.1.0-exp.9)と仕組み、インストールからブラウザ接続までの手順、つながらないときの切り分け、そしてUnity公式のホスティングサービスFurioosが終了した後に本番構成をどう組むかまでを、公式ドキュメントとリポジトリの一次情報に沿って整理します。

まとめ

  • Unity Render Streamingの実体はUnityパッケージ com.unity.renderstreaming。最新は3.1.0-exp.9(2024年12月13日リリース)で、名前のとおり実験的(experimental)段階が続いている。
  • 配信の中身はWebRTCのP2P接続。接続を仲介するシグナリングサーバー(Web app)を別途起動する必要があり、既定のシグナリングプロトコルはWebSocketである。
  • 対応表に明記されたエディタはUnity 2020.3 / 2021.3 / 2022.3 / 2023.1で、Unity 6の記載はない(別ページのFAQは「2020.3以上」とだけ書いており、動作保証の明記はない)。WebGLとUWPはビルド対象として非対応で、Androidは64bit(ARM64)のみ。
  • 「クラウドレンダリング」には映像制作向けのバッチ型レンダーファームと、Render Streamingのようなリアルタイム型ピクセルストリーミングの2種類がある。用途が違うので比較検討の入口を間違えない。
  • Unity公式のマネージド配信サービスFurioosは2023年10月4日に提供終了。現在は自前でGPUインスタンスを用意するか、Vagon Streams・PureWeb・OmniStreamなどのサードパーティを使うことになる。ただし公式FAQはクラウドへのレンダリングサーバー配置をサポート対象外と明記している。
  • 同時接続はGPU1枚に対して無制限ではない。公式FAQは「デスクトップPC1台で720p映像を約5台まで」を目安とし、それ以上はSFU配信サーバーが必要と説明している。

Unity Render Streamingの仕組み|WebRTCとシグナリングサーバー

パッケージの実体と現行バージョン

Unity Render Streamingは、GitHubの Unity-Technologies/UnityRenderStreaming で開発されているUnityパッケージ com.unity.renderstreaming です。リポジトリの package.json に記載された現行バージョンは 3.1.0-exp.9、CHANGELOGでのリリース日は2024年12月13日です。3.1系は2021年6月の 3.1.0-exp.1 から一貫して exp(実験版)が外れておらず、正式版(verified)は存在しません。

依存パッケージも3.1.0-exp.9の package.json で固定されています。

項目
パッケージ名 com.unity.renderstreaming
バージョン 3.1.0-exp.9(2024-12-13)
最小Unity 2020.3
依存: WebRTC com.unity.webrtc 3.0.0-pre.8
依存: Input System com.unity.inputsystem 1.5.1

3.1系の最初のリリース 3.1.0-exp.1 は2021年6月15日で、実験版のまま5年以上が経過しています。この点は採用判断で正面から見ておくべき事実です。APIが破壊的に変わる可能性を許容できないプロダクトでは、パッケージのバージョンを固定し、Unityエディタのアップグレードとセットで検証する運用が前提になります。

映像・音声・入力が流れる経路

Render Streamingの通信はWebRTCのP2Pです。UnityアプリとブラウザがそれぞれSDP(Offer / Answer)とICE Candidateを交換して直接接続を張り、確立後は映像・音声・入力データがピア間を直接流れます。この交換を仲介するのがシグナリングサーバー(リポジトリの WebApp)で、Unity側の既定シグナリングURLは ws://127.0.0.1、プロトコルの既定はWebSocketです(HTTPポーリングも選択でき、その場合の既定ポーリング間隔は5000ミリ秒)。

NAT越えのためのICEサーバーは、Project SettingsのRender Streamingパネルで設定します。既定値は stun:stun.l.google.com:19302 というGoogleの公開STUNサーバーのみで、TURNサーバーは含まれません。社内ネットワークのように対称型NATやファイアウォールでP2Pが張れない環境へ配信するなら、TURNサーバーを自前で用意して登録する必要があります。ここを空のまま本番に出すと「開発機では映るのに顧客環境で映らない」という典型的な失敗になります。

シグナリングにWebSocketを使う理由や、HTTPポーリングとの性質の違いについては、SSEとWebSocketの違いと使い分け|WebRTC・WebTransportまで性能比較で通信方式ごとの特性を比較しています。

クラウドレンダリングの2つの型|レンダーファームとピクセルストリーミング

「クラウドレンダリング」という言葉は、性質のまったく違う2つの技術に対して使われます。検討の入口を取り違えると、必要のないサービスを比較し続けることになります。

バッチ型:レンダーファーム

映像・アニメーション制作で使われるのがこちらです。BlenderやMayaのシーンをクラウド上の多数のマシンへ投げ、フレームを分散して焼き上げ、完成した連番画像や動画ファイルを受け取ります。処理は非リアルタイムで、料金はレンダリング時間(ノード時間)課金が中心です。「クラウドレンダリング 比較」で出てくるサービス一覧の多くは、この型を指しています。

リアルタイム型:ピクセルストリーミング

Unity Render Streamingはこちらです。サーバー上でUnityアプリを実行し続け、毎フレームの描画結果をH.264などで圧縮してWebRTCで送り、ユーザーの操作を受け取ってその場で描画に反映します。ユーザーから見ればブラウザの中でUnityアプリが動いているのと同じで、実際の描画はサーバーのGPUが担います。Unreal Engineの標準機能であるPixel Streamingが同じ位置づけの技術です。

この型で押さえるべき違いは課金構造です。バッチ型はジョブが終われば課金が止まりますが、リアルタイム型はユーザーがセッションを開いている間ずっとGPUインスタンスを占有します。しかも後述のとおり1インスタンスで同時に捌ける人数は限られるため、コストは「同時接続数 × GPUインスタンス単価 × 接続時間」で決まります。視聴者数が増えるほどインスタンス数を増やす必要がある、という構造を最初に把握しておいてください。

導入手順|パッケージのインストールからブラウザ接続まで

対応Unityバージョンとプラットフォーム制約

公式ドキュメント(Documentation~/index.md)が対応を明記しているエディタは Unity 2020.3 / 2021.3 / 2022.3 / 2023.1 です。Unity 6(6000系)はこの対応表に記載がありません。一方で同じリポジトリのFAQは「Unity 2020.3以上」とだけ書いており、公式の記述は一枚岩ではないのが実情です。いずれにせよUnity 6での動作保証は明記されていないため、Unity 6で使うなら自前の検証を前提にしてください(Unity 6自体の変更点はUnityの日本語化とUnity 6の新機能|エディタ言語設定の手順と主な変更点で整理しています)。

区分 対応 非対応
Unityエディタ 2020.3 / 2021.3 / 2022.3 / 2023.1 対応表に記載のない版(動作保証なし)
配信側プラットフォーム Windows x64・Linux・macOS・iOS・Android UWP・WebGL・Android ARMv7
ブラウザ(Windows) Chrome・Edge(Chromium)・Firefox WebRTC非対応ブラウザ
ブラウザ(Mac・iOS) Safari・Chrome(Macのみ) iOSのhttp接続
ハードウェアエンコード Windows・Linux:NVCodec対応NVIDIA GPU 非対応GPU(ソフトウェアエンコード)

macOSはIntel・Apple Siliconの双方に対応し、AndroidはARM64のみでARMv7は対象外です。ブラウザ対応は公式の表がOSごとに分かれており、Firefoxとchromium版EdgeはWindowsのみが検証対象になっています。

とくにWebGLビルドは非対応である点は誤解が多いところです。Render Streamingは「Unityアプリをブラウザで動かす」技術ではなく、「サーバーで動くUnityアプリの映像をブラウザへ送る」技術なので、配信する側がWebGLになることはありません。ブラウザ側に必要なのはWebRTC対応だけです。

パッケージのインストールとRender Streaming Wizard

公式チュートリアルの手順は次のとおりです。Package Managerの「+」から Add package by name を選び(Unity 2020.3では Add package from git URL)、パッケージ名を入力します。

com.unity.renderstreaming

インストールが完了すると Render Streaming Wizard ウィンドウが自動で開きます。ここで Fix All を押すと、Input Systemのバックエンド切り替えなど必要なプロジェクト設定がまとめて適用されます。この段階でエディタの再起動を求められることがあります。設定はProject Settingsの「Render Streaming」パネルに設定アセットとして保存され、Automatic Streamingが有効なら、シーン再生と同時に配信の初期化が走ります(MonoBehaviour.Startより前に実行されます)。

シグナリングサーバーの起動とブラウザからの接続

次にシグナリングサーバーを立てます。Wizardウィンドウの Download latest version web app を押すと、実行ファイル(webserver)がダウンロードできます。コマンドラインから起動し、既定ではポート80で待ち受けます。

.\webserver                 # Windows。Linux・macOSでは ./webserver
.\webserver -s -p 443       # httpsで起動(server.cert と server.key が必要)
.\webserver -t http         # シグナリングをHTTPポーリングに変更
.\webserver -m private      # 同じ ConnectionId のピア同士だけを接続する private モード

サーバーが起動したらUnityエディタで再生し、ブラウザで http://127.0.0.1 を開きます。表示されたトップページで Receiver Sample を選び、Play を押すとUnityのゲームビューがブラウザに表示され、マウス・キーボード・タッチ・ゲームパッドの入力がUnity側へ送られます。httpsで起動した場合は、Unity側のシグナリングURLも wss / https に合わせて変更しないと接続できません。

つながらないときの切り分け

Safari・iOSで映らない

SafariとiOS SafariはhttpではWebRTCを使えません。iPadやiPhoneのブラウザを対象にするなら、webserverをhttpsで起動し、Unity側のシグナリングURLもwssにするのが必須条件です。さらにiOS Safariは、自己署名証明書のサーバーに対してWebSocketシグナリングが通りません。検証段階でiOSを含めるなら、正規の証明書を用意するか、シグナリングをHTTPポーリング(-t http)に切り替えて切り分けます。

映像が出ない・Unityが起動しない

公式FAQが挙げる原因は具体的です。ブラウザに映像が出ない場合は、ブラウザのバージョンが古いか、ファイアウォールがUDPを止めている可能性が高く、ブラウザのコンソールとUnityのDebugコンソールの両方にエラーが出ていないかを先に確認します。Unity側の初期化そのものが失敗する場合は、使用中のGraphics APIが com.unity.webrtc の要件を満たしていない、あるいはハードウェアエンコーダを有効にしているのにNVCodec非対応のGPUを使っている、グラフィックスドライバが古い、のいずれかを疑います。webserverが起動しない場合は、既定ポート80が他のWebサーバー(IISなど)に取られていないかを netstat で確認し、-p でポートを変えます。

本番運用の設計|Furioos終了後にどこで動かすか

1台のGPUで何人まで捌けるか

公式FAQは、同時配信について「新しめのデスクトップPCなら720pの映像を約5台程度まで送信できるが、それ以上はSFU配信サーバーが必要になる」と明記しています。加えてsimulcastは未対応のため、回線品質の異なる視聴者ごとに解像度を出し分けることもできません。NVENCを使ったハードウェアエンコードにも、GPUごとに同時エンコードセッション数の上限があります。

つまりRender Streamingは、多数の視聴者へ同じ映像を一斉配信する用途には向いていません。「1人(あるいは少人数)が操作するインタラクティブなセッションを、人数分のインスタンスで供給する」設計になります。多人数へ配信したいなら、SFUを挟む構成(100ms.liveとは何か?WebRTCベースのライブ動画配信プラットフォームの概要とインフラエンジニア視点での特徴で扱っているような配信基盤)や、そもそもAWSとOBSを活用したライブストリーミングの概要と基本知識で解説しているような一方向配信の仕組みが適しています。

ホスティングの選択肢と、採用すべきでない場面

かつてUnityは、ビルドをアップロードするだけでストリーミング配信できるマネージドサービス Furioos を提供していましたが、2023年10月4日に提供を終了しました。パッケージ側のFurioos連携も、それに先立つ 3.1.0-exp.7(2023年8月)のCHANGELOGで「Removed Furioos Integration」として削除されています。日本語記事の中には今もFurioosを前提にした解説が残っていますが、この選択肢はもうありません。

そして見落としてはいけないのが、公式FAQの回答です。「GCPのようなクラウドサービスにUnityをレンダリングサーバーとしてデプロイできるか」という質問に対し、Unityは「レンダリングサーバーとしての利用はサポートしていない」と答えています。つまりクラウド上でRender Streamingを常時稼働させる構成は、動くかどうかにかかわらず公式サポートの対象外です。この前提を握ったうえで、残る選択肢は2つになります。

  • 自前でGPUインスタンスを運用する:AWSのG系などNVIDIA GPU搭載インスタンスにUnityアプリとwebserverを載せる。セッション数に応じたインスタンスの起動・停止(オートスケール)とTURNサーバーの用意まで自分で設計することになる。柔軟だが運用負荷は最も重く、しかも上記のとおり公式サポート外なので、トラブル時は自力で切り分ける前提が要る。
  • サードパーティのストリーミング基盤を使う:Furioos終了後に移行先として名乗りを上げたサービス群を使う。スケーリングとエッジ配信を任せられる代わりに、同時接続時間あたりの課金になる。
選択肢 対応エンジン 課金の軸 スケーリング
自前GPUインスタンス Unity・Unreal インスタンス稼働時間 自前で設計
Vagon Streams Unity・Unreal 他 ストリーミング時間 サービス側
PureWeb Reality Unity・Unreal ストリーミング時間 サービス側
ZeroLight OmniStream Unity・Unreal 個別見積(商談型) サービス側

料金体系は改定されるため、金額は各社の公式ページで確認してください。選定の分かれ目は「同時接続のピークが読めるか」です。ピークが読めて常時稼働の台数が固定できるなら自前が安く、キャンペーンや展示会のようにピークが跳ねるならサービス側のスケーリングに任せたほうが総額は下がります。

そのうえで、Render Streamingを採用すべきでない場面をはっきりさせておきます。(1) 数十人以上が同時に同じ映像を見る展示・イベント用途――前述のとおりSFUなしでは破綻します。(2) 軽量な3DコンテンツをWebで見せたいだけの用途――WebGLビルドで足りるなら、GPUサーバーを常時動かす必要はありません。(3) 長期保守が前提で、パッケージのAPI変更を吸収する余力がないプロダクト――3.1系がexp表記のまま3年以上動いている以上、破壊的変更のリスクを織り込めない案件では、Unrealのピクセルストリーミングや商用ストリーミング基盤を含めて再検討する価値があります。逆に、GPUを積めない端末に高品質な3Dを見せたい、少人数がインタラクティブに操作する、という条件がそろうときは、Unity公式のパッケージであることと導入の速さが効きます。

よくある質問

Unity Render Streamingの最新バージョンは?

3.1.0-exp.9で、CHANGELOG上のリリース日は2024年12月13日です。この更新はWebRTCパッケージを3.0.0-pre.8へ上げたことと、各コンポーネントのAPIドキュメント改善が中心でした。最新の状況はGitHubリポジトリ Unity-Technologies/UnityRenderStreaming のリリース一覧で確認してください。

Unity 6で使えますか?

3.1.0-exp.9の公式ドキュメントが対応を明記しているのは Unity 2020.3 / 2021.3 / 2022.3 / 2023.1 で、Unity 6は対応表に含まれていません。動作する可能性はありますが公式サポート外なので、採用するなら自前での検証と、問題が出た場合に自力で対処する体制が前提になります。

WebGLビルドでRender Streamingは使えますか?

使えません。公式FAQはUWPとWebGLを非対応と明記しています。Render Streamingは配信する側(サーバー側)でUnityアプリを実行する技術で、ブラウザ側に必要なのはWebRTC対応だけです。

ソースコードやサンプルはどこにありますか?

GitHubの Unity-Technologies/UnityRenderStreaming に、パッケージ本体(com.unity.renderstreaming)、HDRP用のプロジェクトテンプレート、シグナリング用のWebアプリ(WebApp)、サンプルプロジェクトがまとめて置かれています。バグ報告と機能要望も同リポジトリのIssuesが公式窓口です。

同時に何人まで接続できますか?

公式FAQの目安は、デスクトップPC1台から720p映像を約5台まで送信、それ以上はSFU配信サーバーが必要、というものです。simulcastは未対応で、NVENCのエンコードセッション数にもGPUごとの上限があります。同時接続数が読める設計にしてから、インスタンス数を見積もってください。

関連記事

資料請求

RELATED POSTS 関連記事