【Metal/Swift/XCode】Metal MTLSamplerDescriptor mipFilterの設定

Mac

grainTextureを作るときに mipmapはいらないので notMipmapped を指定しようと思ったけどこれはデフォルトで。

基本的にはnotMipmappedだけど、プレビューを小さくする時は samplerを.linearにしても良いのかな?と

ぼかしでガウシアンブラーをするとき、スケールも利用しているのでそこではlinearのsamplerは有効かな?というくらいで。

でも半分、面積1/4くらいに縮小する必要がなければあま意味ないようなので基本のnotMipmappedで問題なさそうでした。

一応めもとして


1️⃣ Compute kernel(生成や加工用)

  • テクスチャをそのまま書き込む / ピクセル単位で扱う
  • scale はしない → ミップマップ不要
  • 設定
samplerDescriptor.mipFilter = .notMipmapped

2️⃣ Fragment shader(描画用)

  • テクスチャを拡大縮小して描画する場合
    • 縮小表示(UVを0-1の範囲で伸縮する) → ミップマップを使った方が滑らか
  • 設定例
samplerDescriptor.minFilter = .linear
samplerDescriptor.magFilter = .linear
samplerDescriptor.mipFilter = .linear  // 縮小表示時に滑らかに
  • ピクセル感を正確に出したい場合(フィルムグレインなど)
    • 拡大縮小してもテクスチャの細かいノイズを保持したい → notMipmapped のままでもOK

✅ まとめ

場所scale推奨 mipFilter
Compute kernelなし.notMipmapped
Fragment shaderあり.linear
Fragment shaderピクセル精度重視.notMipmapped

もし希望であれば、grain テクスチャ用に kernel 側と fragment 側で sampler を使い分ける最適な設計例 も示せます。
作ってほしいですか?


お気軽にコメントください!

スパム対応のためコメント認証に数日かかることがありますが、お気軽にコメントいただけると嬉しいです^^

コメント

タイトルとURLをコピーしました