メインコンテンツまでスキップ

テクスチャトランスポート

TSMP は、エンコードされたピクセルがエンコーダーからデコーダーへのパスを通過した場合にのみ機能します。

TSMP 領域をデータ バスのように扱います。見た目には無害に見える変更でも、バイトが破損する可能性があります。

基本ルール​

TSMP 領域をビデオではなくデータのように扱います。正確にコピーする必要があります。

避ける:

  • TSMP 画像の拡大縮小。
  • バイリニアまたはトリリニア フィルタリング。
  • アンチエイリアシング。
  • カラーグレーディング。
  • トーンマッピング。
  • TSMP 領域にブルームまたはポスト処理を行います。
  • ピクセル値を変更するビデオ圧縮。
  • ヘッダーまたはペイロード領域のトリミング。

VRChat スクリーンスペース出力​

VRChat カメラ キャプチャの場合、TSMP 出力は TSMP カメラまたは画面空間マテリアルで表示される必要があります。

通常の設定は次のとおりです。

  1. TSMP 出力マテリアルを立方体または同様のメッシュに適用します。
  2. VRChat カメラをそのメッシュ内に配置します。
  3. TSMP 画像をキャプチャ ビュー全体に表示します。
  4. 完全なヘッダーとペイロード領域を表示したままにします。

カメラがメッシュの一部のみを認識している場合、デコーダはヘッダーの欠落、CRC の不一致、またはメッセージがゼロであることを報告する可能性があります。

## 解決

解像度が高くなるとペイロード容量が増えますが、レンダリングとリードバックの作業コストも増加します。

サンプルのプレハブのデフォルトから始めます。次の場合にのみ解像度を上げます。

  • Payload buffer is fullが表示されます。
  • デバッグ キャンバスには、容量に近いペイロードの使用量が表示されます。
  • 不要な同期データはすでに削減されています。

トランスポートの問題を隠すために解像度を上げないでください。 CRC エラーは、より多くのピクセルを使用することではなく、ピクセルを保持することによって修正する必要があります。

フィルタリング設定​

TSMP データを運ぶテクスチャの場合:

  • 可能な場合はポイント フィルタリングを使用します。
  • ミップマップを避けます。
  • TSMP レンダー テクスチャのアンチエイリアスを無効にします。
  • 送信者と受信者の間で色空間とサンプリングの一貫性を保ちます。
  • TSMP 領域がピクセルどおりであることがわかっている場合を除き、OBS で画像のサイズを変更しないでください。

OBS とキャプチャ設定​

OBSを使用する場合:

  • Spout の入力または出力が OBS に必要な場合は、Spout2 プラグインをインストールします。
  • 可能な場合は、TSMP 出力解像度でキャプチャします。
  • スケーリングフィルターは避けてください。
  • 色補正フィルターは避けてください。
  • TSMP 領域を完全に表示しておきます。
  • レシーバーの入力テクスチャが、元のエンコーダーのレンダリング テクスチャではなく、OBS 出力であることを確認します。

Unity から FFmpeg で配信する​

TSMPFfmpegRtmpPublisher は、別途インストールした FFmpeg 実行ファイルを使って Unity のテクスチャを RTMP サーバーへ送信します。デスクトップ Unity 用であり、VRChat 内で動作する Udon コンポーネントではありません。

Source Texture、FFmpeg Path、RTMP の送信先を指定し、StartPublishing() を呼ぶか Auto Start を有効にします。エディターでもキャプチャする場合は Publish In Edit Mode を有効にします。StopPublishing() の呼び出し、コンポーネントの無効化または削除で配信が終了します。

Use Source Dimensions が有効ならテクスチャの実際の解像度を使用します。無効の場合、Width と Height はソースと完全に一致する必要があります。不一致は警告とともに拒否され、TSMP のピクセルを自動的に拡大縮小することはありません。YUV420p では幅と高さの両方が偶数である必要があります。

解像度とフレームレートは配信開始時に固定されます。設定やソースの解像度を変えた後は、停止してから再開してください。ソースの削除やサイズ変更を検出すると、不適合なバイトを送信する前に停止します。再開後に届いた以前のセッションの GPU リクエスト結果は破棄します。

Flip Vertical は行のサイズを変えずに上下の順序を反転します。Repeat Last Frame When Idle は新しいキャプチャがない間、最後のフレームを繰り返します。プロセスのエラーは Last Error と警告ログに表示され、追加の出力は Log Ffmpeg Output で確認できます。H.264 圧縮や色変換によるデータ破損は防げないため、実際の転送経路でデコード結果を確認してください。

最初の輸送テスト​

複雑なアバターを同期する前に:

  1. TSMPNetworkGameObjectToggleを追加します。
  2. ローカルの切り替えを確認します。
  3. テクスチャ パスを介して遅延デコードされたトグルを確認します。
  4. 変換同期を追加します。
  5. 高帯域幅の同期コンポーネントを最後に追加します。

トグルが到着しない場合は、データを追加する前にトランスポートとデコーダのステータスを修正してください。