TSMP の仕組み
TSMP は、シーン データをピクセルに変換し、それらのピクセルをテクスチャまたはビデオ パスを通じて送信し、シーンの変更に戻します。
同じ考え方が、Unity エディター、再生モード、およびアップロードされた VRChat ワールドでも機能します。危険な部分はトランスポート パスです。ピクセルが変化するとデータも変化します。
送信者
送信側では、TSMPEncoder が有効な TSMP ネットワーク コンポーネントを探します。各コンポーネントは、エンコーダーがフィールドを読み取る前に、現在の状態を 1 つ以上の [TransSync] フィールドにコピーします。
エンコーダは次のようにします。
- 可変状態メッセージとキューに入れられた RPC メッセージからネットワーク ペイロードを構築します。
- フレーム インデックス、コーデック ID、ペイロード サイズ、および CRC を含む 56 バイトの TSMP ヘッダーを書き込みます。
- ヘッダーとペイロードを選択したコーデックに渡します。
- 結果のピクセルを出力レンダー テクスチャに書き込みます。
通常、このプロセスを直接編集することはありません。同期コンポーネントを追加または削除してから、Apply Setup を実行します。
## 輸送
エンコードされたテクスチャは、表示、キャプチャ、ストリーミング、またはループバックできます。
一般的なトランスポート:
- カメラで見た VRChat スクリーンスペース TSMP 出力。
- Spout から OBS まで。
- OBS 出力を受信機テクスチャに戻します。
- テスト用のローカル レンダー テクスチャ パス。
トランスポートでは TSMP 領域を保持する必要があります。エンコードされた領域での色補正、圧縮、スケーリング、フィルタリング、アンチエイリアシング、または後処理は避けてください。
受信機
受信側では、TSMPDecoder が入力テクスチャを読み取ります。まずフレーム ヘッダーを検証します。ヘッダーが有効で CRC が一致する場合、ペイロード バイトをデコードしてメッセージをディスパッチします。
受信機は以下を使用します。
- 正しい
TSMPNetworkBehaviourを見つけるためのネットワーク ID。 - 正しい
[TransSync]フィールドを見つけるための変数ハッシュ。 - TSMP RPC イベントをディスパッチするための RPC ハッシュとメソッド名。
したがって、送信側と受信側のシーンは一貫して構成する必要があります。 TSMPSetup は、これらの ID を並べる実行時バインディング テーブルを構築します。
障害境界
TSMP はフェールクローズされるように設計されています。
- 無効なヘッダー: フレームは破棄されます。
- CRC 不一致: フレームは破棄され、警告がログに記録されます。
- 不正な形式のペイロード: ペイロードの処理が停止し、診断が更新されます。
- バインディングが欠落しています: その値または RPC を適用できません。
これが、デバッグ キャンバスが役立つ理由です。オブジェクトの動きからすべてを推測することを強制するのではなく、どのステージが失敗したかを示します。