Structured Buffer (構造化バッファ / StructuredBuffer)は、ゲームグラフィックスのレンダリングや最適化(テクニカルアート)において極めて重要となる技術用語です。Compute Shaderや最新のシェーダーにおいて、C#の構造体(複数の属性を持つカスタムデータ)の配列を、高精度かつ高密度に保持したままGPUメモリに転送し、超並列で読み書きするための大容量共有バッファの解説。

現実世界での例え:配達員に1枚ずつメモ用紙(個別の変数)を手渡すのをやめ、何千人分の全データが完全に整理された『巨大なExcelシート(構造化バッファ)』を共有メモリにドカンと1枚アップロードしておく一発共有

構造化バッファは、「C#(CPU)とシェーダー(GPU)の間で、膨大な顧客リストや位置リストなどの『巨大なExcelデータベース』を、超高速なGPU専用共有メモリ領域に直接置いて、お互いに自由なインデックス(行番号)で超並列アクセスできるようにする大容量データテーブル」です。個別にパラメータを書き換える手間が完全に消滅し、GPUは「1回の描画命令」で、バッファから自分のID(Instance ID)に対応する行データを一瞬で読み取って全員別々の位置や色で整列描画します。

Structured Buffer (構造化バッファ / StructuredBuffer) concept infographic diagram

図:Structured Buffer (構造化バッファ / StructuredBuffer)の基本的な処理フローと仕組みを日本語表記で分かりやすく図解したインフォグラフィック

詳細な仕組みと動作原理

C#側で `Position` や `Color` などのカスタム構造体(struct)を定義し、それを `ComputeBuffer` の `Structured` タイプに格納してシェーダーに一括転送し、シェーダー側で `StructuredBuffer` として配列アクセスします。