拡大縮小フィルタ比較

やっとこさ一段落しましたので、先の件にもありますPixelShaderによる拡大フィルタについてつらつらと。


液晶の引き延ばしは、色々問題があるため自前で引き延ばすことが急務になってきた昨今、とりあえずDirect3DのTextureFilterにあるLinearを使うというのが今までの常でありました。
液晶側の引き延ばしに関しても、一昔前のものや、ノートPC(これは今でも)ではLinearで補完するものが大半を占めていましたので、これで特に不満は産まれませんでした。
が、近年の液晶は、Linearではなくもうちょっと技術的に進んだ拡大を使っているものが増えてきています。
何を使っているかはカタログに表記されていることはほぼありませんので見た目による判断しか有りませんが、少なくともうちの「MDT243WG」はLinearではありません。
実際の所、ノートPCなどの解像度が横1280ぐらいの液晶ではLinearで全く持って問題有りませんが、横1920ぐらいになるとLinearでは画像はともかく文字のぼやけが結構深刻かな?というのが個人的な所感です。
最近では横2560の液晶も出てきているので、こりゃぁえらいこっちゃ!ってことで、ほんのちょっぴり真剣に対処しておりました。

比較画像。※縮小表示されているのでクリックして拡大してください。


1024→1920に拡大した画像なので、倍率はx1.875になります。
ごく一般的なbicubic(強度可変型)とlanczosの実装ですが、個人的にはこの2つがあれば、もうお腹いっぱいかなーとおもいます。
Linearに比べると雲泥の差で、特に文字がかなり読みやすいという点が注目すべき所かと思われます。
ただ、うちのノートマシン(Intel GMA 3100)では重くて60FPS出ませんでした。(Shaderが重いと言うよりも、TexelReadが圧倒的に足りないようです)
そこで、ノートでも使えるように、処理が軽いLinearをもうちょっとシャープになるように改良したものが、一番右のLinear(Sharp)になります。
bicubicと比べるとTexelReadは1/4、Shader命令数も1/4と非常に軽量です。


肝心のアルゴリズムについてはまた今度。
借りてきた「男達のフィギュアスケータ」と「ナチョ・リブレ」を見てからだ!!