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;
}
}
}
}
