مروری بر طراحی فیلترهای فلش با Adobe Pixel Bender (قسمت دوم)

مطالعه قسمت قبل: مروری بر طراحی فیلترهای فلش با Adobe Pixel Bender (قسمت اول)

ابتدا سه بخش Pixel Shader را برای مشخص شدن نام تابع و Metadata آن به همراه بدنه خالی تابع تعریف می‌کنیم:

<languageVersion : 1.0;>
kernel FiltRGB

<   namespace : "com.mshams";
    vendor : "www.mshams.ir";
    version : 1;
    description : "first test.";
>

{
    input image4 src;
    output pixel4 dst;

void
    evaluatePixel()
{

}
}
همان طور که در مقاله قبل ذکر شد، برای اعمال هر گونه تغییر در مقدار پیکسل‌های تصویر خروجی، پس از دریافت مشخصات پیکسل با تابع نمونه گیری (sample، sampleNearest یا sampleLinear)، تغییرات را اعمال نموده و آن را به متغیر خروجی انتصاب می‌دهیم.
اما مسلما یکی از مهمترین اصول طراحی یک فیلتر، امکان تغییر پارامترهای محاسباتی توسط کاربر است. برای تعریف یک پارامتر ورودی در برنامه Pixel Bender از قالب زیر استفاده می‌شود:
parameter datatype  paramName
<
        minValue: n;  maxValue: n;  defaultValue: n;
>;
به عنوان مثال بنده در این مثال، چهار پارامتر ورودی از نوع float، برای تعیین مقادیر مشخصه‌های قرمز، سبز، آبی و درصد Grayscale تعریف می‌کنم. پس از تعریف پارامترهای ورودی و اجرای تابع با استفاده از گزینه Build and Run در برنامه Pixel Bender، چهار Scrollbar در سمت راست برنامه ظاهر شده و امکان تغییر مقدار پارامترها فراهم می‌گردد. با تغییر هر scroll، مقدار جدید به صورت بلادرنگ، در تابع اعمال شده و تصویر خروجی render می‌شود.
parameter float red
<
        minValue:1.0;  maxValue:255.0;  defaultValue:1.0;
>;

    parameter float green
<
        minValue:1.0;  maxValue:255.0;  defaultValue:1.0;
>;

    parameter float blue
<
        minValue:1.0;  maxValue:255.0;  defaultValue:1.0;
>;

    parameter float grayPercent
<
        minValue:0.0;  maxValue:100.0;  defaultValue:0.0;
>;
اکنون در بدنه تابع، متغیر جدیدی از نوع pixel4 تعریف نموده و مقدار پیکسل نمونه‌گیری شده را به آن انتصاب می‌دهیم. سپس تمام تغییرات مورد نظر را بر روی این متغیر اعمال نموده و در نهایت آن را به متغیر خروجی dst انتصاب می‌دهیم.
هدف از طراحی فیلتر مورد نظر ما، دریافت مقادیر مشخصه‌های Red، Green، Blue و اعمال مستقیم آنها به پیکسل خروجی است. همچنین با تغییر متغیر grayPercent، درصد Grayscale تصویر تعیین خواهد شد.
pixel4 p = sampleNearest(src, outCoord());

float sum = (p.r * red + p.g * green + p.b * blue) / 3.0;
float gp = sum * grayPercent / 100.0;

p.r = p.r * red *   (100.0 - grayPercent) /100.0 + gp;
p.g = p.g * green * (100.0 - grayPercent) /100.0 + gp;
p.b = p.b * blue *  (100.0 - grayPercent) /100.0 + gp;

dst = p;
به همین سادگی، یک افکت Pixel Shader ساخته می‌شود. با انتخاب گزینه Build and Run، افکت کامپایل شده و به صورت بلادرنگ قابل استفاده می‌شود.
پیشنهاد می‌کنم برای مطالعه بیشتر در مورد دستورات قابل استفاده در این IDE، به راهنمای Pixel Bender Developer Guide در مجموعه Adobe Creative Suite مراجعه کنید. با استفاده از دستورات پیچیده‌تر و محاسبات بیشتر، افکتهای بسیار پیچیده‌ای را می‌توان به صورت بلادرنگ در برنامه Adobe Pixel Bender طراحی نمود. (مثال)
در پایان این قسمت، برای استفاده از این افکت در برنامه Flash، باید از گزینه Export for FlashPlayer در منوی فایل استفاده نموده و فایلی با پسوند *.PBJ ایجاد کنید.
در قسمت آینده، طریقه بارگذاری این فیلتر با استفاده از ActionScript 3 و شیوه مقدار دهی به پارامترهای ورودی آن مورد بررسی قرار می‌گیرد.

About محمد شمس

برنامه‌نویس، طراح انیمیشن و علاقمند به هوش مصنوعی

پاسخ دهید