memo : Gatherがサンプリングする位置
GatherはDirectX10.1から使える機能の1つで4サンプルを1度にとってこられるものです。
Gatherを使うと4つのピクセルのRGBを3命令でとってくることができます。
今までは
Sample( sampler, uv )
Sample( sampler, uv + offset0 )
Sample( sampler, uv + offset1 )
Sample( sampler, uv + offset2 )
とやっていたのが
GatherRed( sampler, uv );
GatherGreen( sampler, uv );
GatherBlue( sampler, uv );
で取れるということです。
が、いざ使ってみようと思ったら、
Gatherに指定するuvとフェッチされるサンプルの位置についての記述が見当たりません。
どこに書いてあるんですか??
仕方ないので調べてみる。
まず普通にテクスチャを描画。
テクスチャは16x16です。(ポイントフィルタで描画)
次に、Gatherでサンプリングした結果を復元して描画
Rチャンネル
uvが0.5ずつ左下にずれている
Gチャンネル
uvが0.5ずつ右下にずれている
Bチャンネル
uvが0.5ずつ右上にずれている
Aチャンネル
uvが0.5ずつ左上にずれている
ということで、
- Gatherに指定するuv → 中心
- Gatherでサンプリングする位置 → 中心±0.5テクセルの位置
Gatherに指定するuvをPとすると、
RGBA各チャンネルのサンプリングポイントは以下の図のようになる
まあ予想通りというか普通な結果ですが、
指定したuvはサンプリングされないということです。
それと、Gatherを使う場合はリニアフィルタが利かないです。
