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

TSMPEncoder

送信者側では TSMPEncoder を使用します。 TSMP データを出力レンダー テクスチャに書き込みます。

ほとんどのユーザーは、各フィールドを直接編集するのではなく、TSMPSetup を通じて設定します。

必要なもの

  • 出力 RenderTexture
  • TSMPSetup を通じて選択された Luma4 ハンドラー。
  • 少なくとも 1 つの有効な TSMP ネットワーク コンポーネント、またはキューに入れられた RPC 呼び出し。
  • 選択したデータに対して十分なペイロード容量。

使い方

  1. TSMPSetup を通じて出力テクスチャを割り当てます。
  2. [コーデック] タブで Luma4 を選択します。
  3. 目標フレームレートを設定します。
  4. Apply Setup」をクリックします。
  5. 同期されたオブジェクトが移動する間の出力テクスチャを観察します。

ペイロード データが変更されると、出力テクスチャが目に見えて変化するはずです。平坦なままの場合、または静的なパターンのみが表示される場合は、セットアップ参照とペイロード診断を確認してください。

出力はどのようになるか

正常な TSMP 出力には通常、次の内容が含まれます。

  • 構造化されたヘッダー領域。
  • 同期値が変更された場合に変更されるペイロード領域。
  • テクスチャに現在のペイロードが必要とする容量よりも多くの容量がある場合、空の黒いスペースまたは未使用のスペース。

設定やペイロード サイズを変更した後は、古いブロックが残らないようにしてください。存在する場合は、出力クリアが有効になっていて、出力レンダー テクスチャが表示されているものであることを確認してください。

ペイロードと容量

エンコーダーはフレームごとに 1 つのペイロードを構築します。ペイロードには以下が含まれます:

  • [TransSync] フィールドからの変数状態メッセージ。
  • SendTransRPC によってキューに入れられた RPC メッセージ。

ペイロードが大きすぎる場合、エンコーダは Payload buffer is full をログに記録し、すべてを含めることができません。まず同期データを減らしてから、必要に応じてテクスチャ容量を増やします。

高帯域幅のソースには次のものが含まれます。

  • 完全な VRChat アバターのポーズの同期。
  • 多くのボーンを備えた人型のポーズ。
  • 幅広いブレンド形状の選択。 ・現役選手が多い。
  • 多数の独立した変換オブジェクト。

RPC の使用

TSMPNetworkBehaviour から次のように呼び出します。

SendTransRPC(nameof(MyMethod), RPCTarget.All);

エンコーダには、いくつかのフレームのペイロードにキューに入れられた RPC が含まれるため、短いイベントがテクスチャ トランスポートによって見逃される可能性が低くなります。

対象:

ターゲット送信者受信機
Localすぐに実行されます。送信されませんでした。
Remoteローカルでは実行されません。デコード後に実行されます。
Allすぐに実行されます。デコード後に再度実行します。

ランタイム診断

重要なフィールドと警告:

診断意味
フレームインデックスフレームがエンコードされているときに増加します。
ペイロードバイトこのフレームに書き込まれたペイロードのバイト数。
メッセージ数ペイロード内のネットワーク メッセージの数。
Payload buffer is full現在のフレームは、すべての同期データを収めることができません。
Failed to write TSMP valueフィールドをエンコードできませんでした。
コーデックまたは出力テクスチャがありませんエンコーダは有効なフレームを生成できません。

一般的な修正

症状これを試してください
フレームインデックスが増加しない自動エンコードを有効にするか、「デバッグ」タブから「今すぐエンコード」を呼び出します。
ペイロードは常にゼロです有効な TSMP ネットワーク コンポーネントを追加し、Apply Setup を実行します。
ペイロードバッファがいっぱいです同期データを減らすか、出力容量を増やしてください。
RPC が失敗しましたフレーム損失を確認し、RPC リピート フレームを有効のままにします。
コーデック変更後も出力が変化していないように見えるApply Setup を再実行し、出力レンダリング テクスチャがクリアされていることを確認します。