PixelShaderを使ったバイキュービック法

というわけで、前に言っていた三次関数による補間処理ですが、とりあえずPixelShader経由で何とか動作するものまで組みました。

初めはVertexShader側で計算できれば楽なのにな~と思っていましたが、よく考えてみると、VertexShaderは頂点に対してしか計算できないので

各ピクセルごとに重みの計算が必要となる補間処理には使えないことがわかり結局使わないことになりました。

ちなみに三次補間処理のPixelShaderは最低でも2.0がないと無理です。処理の長さ的に足りません。

一応共三次内挿法に基づいて計算を行っています。ちょっと命令数が多い(approximately 54 instruction slots used (16 texture, 38 arithmetic))ですが、仕方がないでしょう。

もう少し粘れば命令数を削れるかもしれませんが、複雑な処理なのでHLSLを使っているためにこうなります。

また、VertexShaderも合わせると少し楽・・・かもしれません。テクスチャ座標が結局16点必要になるので前段階としてテクスチャ座標の増加作業

(中央点の周辺のテクスチャ座標をあらかじめ計算して頂点に組み入れておく)が必要になり、その部分でVertexShaderを借りるというのはありだと思います。

Shaderのルーチンだけなら[bi-cubic PixelShader]あたりで検索をかければ目的のものが見つかると思いますので。

一応検索を見ないでルーチンを作っていますよ。(原理式をそのままアルゴリズムとして実装しただけですが)

あと、参照するテクスチャの座標は注意してくださいね~。正直に入れると怪しい(テクスチャのサンプリングミスによる)線が現れますので。

この現象を解くのに2時間くらいかけました・・・。

そして今日は政治の方でも大きな動きがあった、とだけ書いておきましょう。

様々な人がそれについて話しているのでこちらではこの記述だけにとどめておきます。

11/15 追記

何となくで記事を書いていったら

PixelShaderを使った画像補間 (2) 三次補間(Bi-Cubic)ということで、説明を書いてしまいました・・・。


コメントを残す

メールアドレスが公開されることはありません。

*

この記事のトラックバック用URL