Преобразование пиксель-бендера в AS3
Я пишу приложение для Android, используя AIR + AS3. Поскольку файлы пиксель-бендера не поддерживаются в режиме графического процессора, я пытаюсь преобразовать этот фильтр хроматических ключей в чистый AS3. Любые предложения, инструменты или помощь будут оценены:
<languageVersion : 1.0;>
kernel DifferenceKey
< namespace : "com.quasimondo";
vendor : "Quasimondo";
version : 1;
description : "A simple difference key for chroma keying";
>
{
input image4 src;
output pixel4 dst;
parameter float3 keyColor;
parameter float tolerance
<
minValue: 0.0;
maxValue: 3.0;
defaultValue: 0.02;
>;
parameter float ramp
<
minValue: 0.0;
maxValue: 1.0;
defaultValue: 0.005;
>;
parameter float gamma
<
minValue: 0.0;
maxValue: 10.0;
defaultValue: 1.00;
>;
void
evaluatePixel()
{
dst = sampleNearest(src,outCoord());
float diff = length( dst.rgb - keyColor );
if ( diff < tolerance )
{
dst.a = 0.0;
} else if ( diff < tolerance + ramp )
{
dst.a = pow( (diff - tolerance) / ramp, gamma );
}
}
}
1 ответ
Боюсь, это не сработает. Итерации по каждому пикселю в AS3, вероятно, будут мучительно медленными (именно поэтому изначально был сделан пиксель-бендер), особенно в мобильных устройствах с маленькими процессорами (по сравнению с настольными компьютерами).
Я бы посоветовал вам взглянуть на Stage3D, который использует графическую карту для тяжелой работы (практически единственный способ добиться приличной производительности при использовании флэш-памяти на мобильных устройствах) и различные платформы на ее основе. Starling для 2D-графики, Feathers для пользовательского интерфейса (на основе Starling), Away3D для полноценного 3D-материала. Вот где импульс сейчас, особенно на мобильном телефоне. Stage3D поддерживает различные режимы наложения и фильтры, которые могут помочь вам легко достичь того, что вы ищете. К сожалению, преобразование приложения со списком отображения старой школы в Starling не является тривиальным, но ИМХО оно того стоит.