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

コーデック シェーダ

TSMP コーデック シェーダーは、ペイロード バイトと可視フレーム ピクセルの間で変換を行います。デフォルトの Luma4 コーデックは参照パスとして使用できますが、カスタム コーデックは独自のマテリアルとシェーダー パスを使用できます。

エンコード側

エンコード シェーダまたはマテリアルは通常、次のものを受け取ります。

入力目的
ペイロード バイト テクスチャまたはバッファ テクスチャエンコーダによって配置されたソース バイト。
ヘッダーピクセルヘッダー領域はコア エンコーダーによってすでに準備されています。
コーデックオプションバイトコーデック固有の小さな設定。
ブロックサイズシンボル出力のピクセル ブロックの寸法。
ペイロードサイズ描画する有効なバイト数。

エンコード結果は、ヘッダーを読み取り可能な状態にし、コーデックによって報告されたレイアウトにペイロード シンボルを配置する必要があります。

デコード側

デコード シェーダまたはマテリアルは通常、以下を受け取ります。

入力目的
ソース TSMP フレームカメラ、OBS、Spout、または別のパスからキャプチャされたテクスチャ。
ヘッダーのメタデータペイロード サイズ、ブロック サイズ、サンプル サイズ、およびコーデック オプション バイト。
ペイロードのレイアウト開始行/ブロックとブロック数。
バイト出力テクスチャリードバックのために回復されたバイトを保存するテクスチャ。

デコーダはヘッダーからペイロードのバイト数のみを読み取ります。未使用のピクセルは結果に影響を与えません。

回復されたバイトを RGBA バイト テクスチャに出力するデコード シェーダについては、TSMPDecodeByteOutput.cginc スクリプト API を参照してください。

シェーダ インクルード パス

パッケージ シェーダーは、パッケージ安定したインクルード パスを使用する必要があります。シーン フォルダーに依存する相対インクルード パスは、パッケージがプロジェクトとパッケージの場所の間で移動される場合に脆弱になります。

パッケージが VPM パッケージとしてインストールされた場合でも機能するインクルードを優先します。

精度ルール

  • ヘッダーのサンプリングを正確に保ちます。
  • ペイロード シンボルでのフィルタリングを避けます。
  • バイトリカバリにはポイントサンプリングを使用します。
  • 現在のペイロードで使用されているすべての出力ピクセルをクリアまたは上書きします。
  • 表示される古いブロックを避けるために、可能な場合は未使用の出力ピクセルを確定的なままにしておきます。

材料特性

カスタム コーデックは、シェーダー プロパティを文書化する必要があります。一般的なプロパティは次のとおりです。

財産意味
_MainTexソース フレームまたはペイロード テクスチャ。
_PayloadByteTexture中間バイトのテクスチャ。
_PayloadSize有効なペイロードのバイト数。
_BlockSizeコーデックのブロック サイズ。
_SampleSizeデコードサンプルサイズ。
_CodecOptionBytesコーデック固有のオプション ベクトル。

安定したプロパティ名を使用して、エディターのセットアップとランタイム コードが特殊な場合を除いて値を割り当てられるようにします。

検証

コーデック シェーダーを出荷する前に:

  • 確定的なバイト シーケンスをエンコードおよびデコードします。
  • フルではないペイロード サイズをテストします。
  • コーデックを切り替えて、古いブロックが残っていないことを確認します。
  • キャプチャ スケーリングを無効にしてテストします。
  • ユーザーが出荷するのと同じレンダー テクスチャ サイズでテストします。