コーデック シェーダ
TSMP コーデック シェーダーは、ペイロード バイトと可視フレーム ピクセルの間で変換を行います。デフォルトの Luma4 コーデックは参照パスとして使用できますが、カスタム コーデックは独自のマテリアルとシェーダー パスを使用できます。
エンコード側
エンコード シェーダまたはマテリアルは通常、次のものを受け取ります。
| 入力 | 目的 |
|---|---|
| ペイロード バイト テクスチャまたはバッファ テクスチャ | エンコーダによって配置されたソース バイト。 |
| ヘッダーピクセル | ヘッダー領域はコア エンコーダーによってすでに準備されています。 |
| コーデックオプションバイト | コーデック固有の小さな設定。 |
| ブロックサイズ | シンボル出力のピクセル ブロックの寸法。 |
| ペイロードサイズ | 描画する有効なバイト数。 |
エンコード結果は、ヘッダーを読み取り可能な状態にし、コーデックによって報告されたレイアウトにペイロード シンボルを配置する必要があります。
デコード側
デコード シェーダまたはマテリアルは通常、以下を受け取ります。
| 入力 | 目的 |
|---|---|
| ソース TSMP フレーム | カメラ、OBS、Spout、または別のパスからキャプチャされたテクスチャ。 |
| ヘッダーのメタデータ | ペイロード サイズ、ブロック サイズ、サンプル サイズ、およびコーデック オプション バイト。 |
| ペイロードのレイアウト | 開始行/ブロックとブロック数。 |
| バイト出力テクスチャ | リードバックのために回復されたバイトを保存するテクスチャ。 |
デコーダはヘッダーからペイロードのバイト数のみを読み取ります。未使用のピクセルは結果に影響を与えません。
回復されたバイトを RGBA バイト テクスチャに出力するデコード シェーダについては、TSMPDecodeByteOutput.cginc スクリプト API を参照してください。
シェーダ インクルード パス
パッケージ シェーダーは、パッケージ安定したインクルード パスを使用する必要があります。シーン フォルダーに依存する相対インクルード パスは、パッケージがプロジェクトとパッケージの場所の間で移動される場合に脆弱になります。
パッケージが VPM パッケージとしてインストールされた場合でも機能するインクルードを優先します。
精度ルール
- ヘッダーのサンプリングを正確に保ちます。
- ペイロード シンボルでのフィルタリングを避けます。
- バイトリカバリにはポイントサンプリングを使用します。
- 現在のペイロードで使用されているすべての出力ピクセルをクリアまたは上書きします。
- 表示される古いブロックを避けるために、可能な場合は未使用の出力ピクセルを確定的なままにしておきます。
材料特性
カスタム コーデックは、シェーダー プロパティを文書化する必要があります。一般的なプロパティは次のとおりです。
| 財産 | 意味 |
|---|---|
_MainTex | ソース フレームまたはペイロード テクスチャ。 |
_PayloadByteTexture | 中間バイトのテクスチャ。 |
_PayloadSize | 有効なペイロードのバイト数。 |
_BlockSize | コーデックのブロック サイズ。 |
_SampleSize | デコードサンプルサイズ。 |
_CodecOptionBytes | コーデック固有のオプション ベクトル。 |
安定したプロパティ名を使用して、エディターのセットアップとランタイム コードが特殊な場合を除いて値を割り当てられるようにします。
検証
コーデック シェーダーを出荷する前に:
- 確定的なバイト シーケンスをエンコードおよびデコードします。
- フルではないペイロード サイズをテストします。
- コーデックを切り替えて、古いブロックが残っていないことを確認します。
- キャプチャ スケーリングを無効にしてテストします。
- ユーザーが出荷するのと同じレンダー テクスチャ サイズでテストします。