~■はじめに周りから「GPUでバイキュービックぐらいできるだろ」いわれたのでやりました。右のテクスチャがバイキュービックサンプリングしたものです(書かれている文字に特に意味はありません)。バイリニアが全体的にぼけるのに対して、バイキュービックは「しまりがある」ぼかしになります。今回の方法では、45度のラインが綺麗な直線になります。4角形などの角では、逆に内側が変にへこんだりします。これらは補間関数で調整が可能なので、特に気にしないで行きましょう。いつものようにプログラムです。2_0])ソースには、いつものように適当にファイルが入っています。大事なファイルは次のものです。高度な方法として、3次曲線を使って周辺のテクセルの値から読み込むテクスチャの色を決定する方法が3次補間です。テクスチャに使うときには、縦と横の2方向から合成をするので、「2」を意味する双(Bi)をつけて、双3次補間といいます。普通は、双3次補間をするときには、テクスチャ座標の周囲16点のサンプリング点からテクセルを読み込んで、縦と横方向に3次補間を施します。数式で表現すると、補間多項式をW、テクスチャ座標の左上のサンプリングポイントからの距離をu,vとして、各サンプリング点での色をcijとすれば、双3次補間サンプリングは次のようになります。uやvは、最近接テクセル間の距離が1になるような距離で正規化されます。この補間関数Wは、一般的には任意です。縦方向と横方向で同じ補間多項式を使うことに注目しましょう。このような式の場合、和は2つの式に分離することができます。これは、実装時に、縦方向の補間を行った後に、横方向の(同じ係数の)補間を行えば最終的な値が得られるという意味で、押さえておきたい変形です(ガウスぼかしの分解と同じようなもんです)。補間関数Wは、任意なのですが、今回は次のような補間多項式を使いました。曲線の端点での傾きが2倍になったものになっています。このような曲線を採用しました(つまり、傾きを調整すれば、補間の強さの調整ができるということです)。■シェーダプログラム今回は、ピクセルシェーダだけの実装になっています。シェーダプログラムは、主に3つの部分に分かれます。1つは、合成する重みを計算する部分です。最初に指定されたテクスチャ座標が、テクセル内のどのを指示しているのか調べます。次に、それらの位置を3乗まですると共に、重みをつけて合成します。この重みは、先ほどの式をしこしこと分解して求めます。w0;次に、テクスチャをサンプリングします。残りの8点は一様にずらしてテクスチャ座標とします。今回は、ポイントサンプリングを使って、半端な位置のテクスチャを読み込んでも、それなりの値が得られるようにしています。);最後に、計算した重みとサンプリングした色で合成します。はじめに、横方向に合成してから、後で縦方向に合成します。}■テクスチャ座標アプリケーション側では、テクスチャ座標を指定して描画します。シェーダプログラムに流し込むデータは、次のような8つのテクスチャ座標を持つ構造体です。TVERTEX8;後は、べたに構造体にデータを流し込みます。テクセル単位でずらす値として、テクセル幅の逆数(du,dv)を計算しておいて、各テクスチャ座標をテクセルごとにずらします。};後は、シェーダを設定して描画です。}■最後に欠点は、双3次補間をするだけで、他にはほとんど何もできなくなることでしょうか。場所を区切れば使えるかもしれませんね。もどるimagire@gmail.com。