GPU のテクスチャフィルタリング機能と線形補間のお話です。表題では「拡縮時の」と入れてありますが、実際は描画全てに影響があるため拡縮時だけではなく、サブピクセルレンダーなんかも影響を受けます。

線形補間とは?

Linear Interpolation = 線形補間です。Linear Interpolation は Lerp とも呼ばれます。一般的には描画を担当するハードウェアである GPU が演算を行います。

GM:Studio はスプライトの描画を、線形補間の「有り/無し」から選択できます。この設定はアプリケーション実行中でも任意のタイミングで変更可能。アプリケーション全体の描画設定が決定できるのみで、オブジェクト単位の Draw/Draw GUI 各描画レイヤー毎に設定を変えることなどはできません。ただしシェーダに関しては別の設定があります。

線形補間演算は GPU がサポートするテクスチャフィルタリング機能であり、線形補間は複数の演算方法があります。GM:Studio はドキュメントでも「線形補間」の有無にしか言及されておらず、具体的にどんな演算方法が選択されているのか、あるいは任意の線形補間演算から選択する機能などは提供されていません。

一応 YoYo のフォーラムなどでは双一次補間(バイリニア/ Bilinear )じゃないかなと言われていますが開発者自身が語ったわけではないため確認しないと分かりません。バイリニアは計算コストが低い演算法ですがレンダリング結果の品質が高いとは言えず、GM:Studio の描画結果を見るとバイキュービック法など高品質が期待できる演算法とは思えないので……筆者もバイリニアで合ってると思います。

効能とか

分かりやすい効果として、画像を拡大縮小した時の処理方法に線形補間演算を用いるか否かで、画像を「どのように見せるか」が決定されます。Lerp は画像を拡大縮小した時の画質(クォリティ決定する選択ではない点に注意してください。選択できるのは見せ方の違いです。

アプリケーション全体の設定

Lerp 設定のデフォルトが起動時に true か false かは Global Game Settings に依存するため、各製作者のプロジェクト設定毎に異なります。Global Game Settings の設定を変えていない限りデフォルトは false で、Lerp は無効化されています。

アプリケーション実行中は以下関数から設定を変更できます。

texture_set_interpolation(boolean);

  • false = 最近傍補間( ニアレストネイバー )
  • true = 線形補間( おそらくバイリニア )

これを別の表現に換えると

  • false = ドット絵が拡大してもくっきり綺麗に描画される
  • true = 拡縮時に滑らかになるよう境界が中間色で描画される

サブピクセルを利用した場合にも差が生じます

Lerp 設定のオン・オフはオブジェクト・インスタンスの座標に浮動小数点(サブピクセル)を使った場合にも描画結果に差が生じます。

ニアレストネイバーを選択している場合は浮動小数点座標でもレンダリング結果にアンチエイリアスが発生しません。Lerp を選択した場合、浮動小数点座標を使うとアンチエイリアスが発生します。

関連:整数座標と浮動小数点座標、アンチエイリアスについて
参考 (YoYoGames):texture_set_interpolation
参考 (YoYoGames):texture_set_interpolation_ext
参考 (YoYoGames):The Windows Tab
参考 (GameMakerまとめwiki/日本語):texture_set_interpolation
参考 (デジタルフロンティア):分かる!画像補間 ~基本から応用まで~

戻る

Leave a Reply

Your email address will not be published. Required fields are marked *