Fake Thermography


PixelBenderで作成したカスタムフィルタを使っての”似非サーモグラフィ”のデモ。
カスタムフィルタの作成はここを参考にしました。

Fake Thermography – wonderfl build flash online

PixelBenderToolKitでのカスタムフィルタ作成手順を簡単にメモ。
1. 新規カーネルを作成
2. パラメータの作成
3. void evaluatePixel() メソッド内に実行させたい処理を書く
以上の手順でカスタムフィルタが作成できるっぽいです。

■ 今回使用したフィルタのソース

 <languageVersion : 1.0;>

kernel NewFilter
<   namespace : "jp.digifie";
    vendor : "Auther@mousepancyo";
    version : 1;
    description : "none";
>
{
    input image4 src;
    output pixel4 dst;

    parameter float min_level
    <
        minValue:float(0.0);
        maxValue:float(1.0);
        defaultValue:float(0.0);
    >;
    
    parameter float max_level
    <
        minValue:float(0.0);
        maxValue:float(1.0);
        defaultValue:float(1.0);
    >;
    
    parameter float luminance_r
    <
        minValue:float(0.0);
        maxValue:float(1.0);
        defaultValue:float(0.29891);
    >;
    
    parameter float luminance_g
    <
        minValue:float(0.0);
        maxValue:float(1.0);
        defaultValue:float(0.58661);
    >;
    
    parameter float luminance_b
    <
        minValue:float(0.0);
        maxValue:float(1.0);
        defaultValue:float(0.11448);
    >;
    
    void evaluatePixel()
    {
    dst = pixel4(0.0, 0.0, 0.0, 1.0);
     if(max_level != min_level)
        {

        float2 pos = outCoord();
        pixel4 col = sampleLinear(src, pos);
        
        float luminance = col.r * luminance_r + col.g * luminance_g + col.b * luminance_b;
        
        luminance = max(0.0, min(1.0, (luminance - max_level) / (min_level - max_level)));
        
        if(luminance < 1.0 / 6.0)
            {
                dst.b = luminance * 6.0;
            }
            else if(luminance < 2.0 / 6.0)
            {
                dst.b = 1.0;
                dst.g = luminance * 6.0 - 1.0;
            }
            else if(luminance < 3.0 / 6.0)
            {
                dst.g = 1.0;
                dst.b = 3.0 - luminance * 6.0;
            }
            else if(luminance < 4.0 / 6.0)
            {
                dst.g = 1.0;
                dst.r = luminance * 6.0 - 3.0;
            }
            else
            {
                dst.r = 1.0;
                dst.g = 3.0 - luminance * 3.0;
            }
        }
    }
}