フィルター
D3D12_FILTERのenum値で、定義値を見るとごちゃごちゃしていてよくわからない。
最初に定義されているのが「D3D12_FILTER_MIN_MAG_MIP_POINT」で、D3D12_FILTERの後に、MIN、MAG、MIP、POINTという名前がついている。
MINがテクスチャの縮小時の挙動、MAGがテクスチャの拡大時の挙動、MIPがミップレベルの挙動を指していて、最後のPOINTがその挙動。
挙動にはPOINTとLINERとANISOTROPICがあり、ANISOTROPICはちょっと特殊。
POINTはポイントサンプリング、LINERはサンプリングに線形補間を使用。
改めて「D3D12_FILTER_MIN_MAG_MIP_POINT」を見ると、拡大縮小、ミップレベルですべてポイントサンプリングするということになる。
別の定義「D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR」は、縮小時は線形補間、拡大時はポイントサンプリング、ミップレベルは線形補間を利用する。
ただリファレンスには「拡大または縮小のどちらを行うかの選択があいまいな場合に、未定義の動作が発生します。」とあるので、実質使うのは「D3D12_FILTER_MIN_MAG_MIP_POINT」と「D3D12_FILTER_MIN_MAG_MIP_LINER」だけでいいのではないか?
残りのANISOTROPICは異方性補完という方法で、視線も考慮した補完方法らしい。
線形補間よりも品質は良くなるがパフォーマンスも落ちるので、今のところは未使用。
定義も、「D3D12_FILTER_ANISOTROPIC」で、拡大縮小、ミップレベルの補完をいい具合にしてくれるみたい。
アドレスモード
D3D12_TEXTURE_ADDRESS_MODEのenum値で全部で5種類ある。
D3D12_TEXTURE_ADDRESS_MODE_WRAP
並べて表示
D3D12_TEXTURE_ADDRESS_MODE_MIRROR
反転して表示
D3D12_TEXTURE_ADDRESS_MODE_CLAMP
範囲外は端の色が続く
D3D12_TEXTURE_ADDRESS_MODE_BORDER
範囲外はD3D12_SAMPLER_DESCの色で塗りつぶされる
アルファを0にすると、範囲外は何も描かれなくなる
D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE
1回だけ反転して、それ以降はCLAMPの動作
アドレスモードはD3D12_SAMPLER_DESCに3つ指定することになる。
1つ目は横方向、2つ目は縦方向、3つ目はよくわからない。
横と縦に同じアドレスモードを指定した見本
貼り付けるテクスチャ画像はこれ。
このテクスチャを5×5で表示(UVの値は-2~2を指定)
ドットがしっかりした画像の場合は、線形補間するとぼやけてしまう。
以降はポイントサンプリング。



























0 件のコメント:
コメントを投稿