掲示板投稿ネタその1 : 境界条件

http://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=40&vew=243
私も何となくフーリエ解析の境界条件を思い出してました(画像フィルタはむしろ畳み込みですが).金属中の熱輸送に関する拡散方程式や加速空洞内の電場計算でのポアソン方程式は微分方程式と境界条件のセットで一意の解を求めます.境界条件は境界で定常値(熱浴に接触・グラウンドに接地)や周期境界条件(対象は円筒形の物質)などが一般的ですね.
そういえばPhotoshopでのフィルタ操作には画像の上下と左右を連続と思ってフィルタリングしてくれるというオプションがありません.タイルパターンを作りたいときなどに微妙にそういう設定が欲しくなることがあります.仕方ないので毎回タイル状に並べてからフィルタをかけ,また一部を切り抜いています.
ちなみにD3DSAMP_ADDRESS*とD3DRS_WRAP*の使い分けですが,アドレッシングモードはUV座標系での直積空間[0,1]×[0,1]と[-∞,∞]×[-∞,-∞]との対応をどうとるかを決めるもので,ラッピングモードは[0,1]×[0,1]に位相を入れるためのものです.前者は[0,1]×[0,1]よりも広い領域(ただしフィルタによっては意図せずこれが起きる場合がある)を用いる際に設定するもので,後者はUV設定を[0,1]×[0,1]内で完結させる場合に使います.
最後にアドレッシングモードによる補間結果の違いを実際にお見せしましょう.以下に示すエフェクトファイルの記述それぞれで描画結果がどうなるか比較してみます.元画像 (サイズ16×16)をDirectX Graphicsで256×256に拡大表示します.

technique Wrap
{
    pass P0
    {
        MagFilter = Linear;
        AddressU  = Wrap;
        AddressV  = Wrap;
    }
}

technique Clamp
{
    pass P0
    {
        MagFilter = Linear;
        AddressU  = Clamp;
        AddressV  = Clamp;
    }
}













16×16の画像をDirectX Graphicsで256×256に拡大
Wrap使用時 Clamp使用時
Wrap使用時 Clamp使用時

Wrap使用時には左右の端に色が回り込んでいるのが分かりますね.デフォルトWrap (ただしMagFilterのデフォルトはPoint)となっておりますので,プログラマより原画師の方が単価高そうなゲームを作る人は特に注意しましょう.