Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.12.2008, 01:24
TERRORist вне форума Посмотреть профиль Отправить личное сообщение для TERRORist Найти все сообщения от TERRORist
  № 1  
Ответить с цитированием
TERRORist
 
Аватар для TERRORist

блогер
Регистрация: Jun 2005
Адрес: RU
Сообщений: 1,540
Записей в блоге: 12
По умолчанию PixelBender эффект свечения

Хочу создать фильтр свечения ярких объектов (скажем если сфоткана яркая точка то вокруг нее появится мягкий свет) в pixelbender...

Я знаю как узнать координаты самых ярких пикселей, проблема как их потом "размыть" по соседним... Кто нить может помочь?

Проблема в том что циклы он не поддерживает, выходит при радиусе размытия скажем 20 пикселей мне придется вручную писать 2*(20^2)=800 if'ов?

вот что я уже написал:

Код:
<languageVersion: 1.0;>

kernel glowWhite
<   namespace : "AIF";
    vendor : "Adobe Systems, Inc.";
    version : 1;
    description : "Glows white"; >
{
    input image4 src;
    output float4 dst;

    parameter float threshold 
    <       
        minValue:float(0.01);
        maxValue:float(1.0); 
        defaultValue:float(0.5);
    >;
    
    parameter float multiplier 
    <       
        minValue:float(0.01);
        maxValue:float(5.0); 
        defaultValue:float(2);
    >;
    // evaluatePixel(): The function of the filter that actually does the 
    //                  processing of the image.  This function is called once 
    //                  for each pixel of the output image.
    void
    evaluatePixel()
    {
        // Obtain the input pixel color
        float4 inputColor = sampleNearest(src, outCoord());

        // Calculate (1 - channel) for each of the RGB channels
        dst.rgb = inputColor.rgb;
        
        float2 pos = outCoord();
        
        float4 sampled1 = sampleNearest(src, float2(pos.x, pos.y+2.0));
        if(sampled1.r>threshold && sampled1.g>threshold && sampled1.b>threshold){
            dst.rgb *= multiplier;
        }
        
        // set the alpha value equal to the alpha of the input
        dst.a = inputColor.a;
    }
}
скриптик окрасит светлые пиксели в кардинально белый цвет
как теперь размыть это дело?

Старый 24.12.2008, 01:52
flash33 вне форума Посмотреть профиль Отправить личное сообщение для flash33 Найти все сообщения от flash33
  № 2  
Ответить с цитированием
flash33
 
Аватар для flash33

Регистрация: Nov 2005
Сообщений: 1,155
Что б
Цитата:
скриптик окрасит светлые пиксели в кардинально белый цвет
бендер не нужен (threshold). Вы уверены что и для остального без бендера не обойтись?

Старый 24.12.2008, 01:55
TERRORist вне форума Посмотреть профиль Отправить личное сообщение для TERRORist Найти все сообщения от TERRORist
  № 3  
Ответить с цитированием
TERRORist
 
Аватар для TERRORist

блогер
Регистрация: Jun 2005
Адрес: RU
Сообщений: 1,540
Записей в блоге: 12
А вы запускали этот скрипт? это не совсем theshold...
Мне нужно чтобы FSP был приличный.

Старый 24.12.2008, 13:05
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
такой вариант навскидку,
производительность не тестировал, с pixelbender не сравнивал
Код AS3:
var srcBmd:BitmapData = new Pic(0, 0);
var resBmd:BitmapData = srcBmd.clone();
var tmpBmd:BitmapData = new BitmapData(resBmd.width, resBmd.height, true, 0);
 
var level:int = 0xAA;
var clr:int = 0xFFFFFFFF;
var blurVal:int = 16;
 
tmpBmd.threshold(resBmd, resBmd.rect, new Point(), ">", level << 16, clr, 0x00FF0000);
tmpBmd.threshold(resBmd, resBmd.rect, new Point(), ">", level << 8, clr, 0x0000FF00);
tmpBmd.threshold(resBmd, resBmd.rect, new Point(), ">", level , clr, 0x000000FF);
 
tmpBmd.applyFilter(tmpBmd, tmpBmd.rect, new Point(), new BlurFilter(16,16));
 
resBmd.draw(tmpBmd);
tmpBmd.dispose();
 
var bmp1:Bitmap = new Bitmap(srcBmd);
addChild(bmp1);
 
var bmp2:Bitmap = new Bitmap(resBmd);
bmp2.x = bmp2.width + 20;
addChild(bmp2);

Старый 24.12.2008, 15:34
TERRORist вне форума Посмотреть профиль Отправить личное сообщение для TERRORist Найти все сообщения от TERRORist
  № 5  
Ответить с цитированием
TERRORist
 
Аватар для TERRORist

блогер
Регистрация: Jun 2005
Адрес: RU
Сообщений: 1,540
Записей в блоге: 12
6.5 fps... только для статической картинки такое можно использовать

Старый 24.12.2008, 15:52
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
а сколько pixelbender такую же картинку считает?

Старый 24.12.2008, 16:58
TERRORist вне форума Посмотреть профиль Отправить личное сообщение для TERRORist Найти все сообщения от TERRORist
  № 7  
Ответить с цитированием
TERRORist
 
Аватар для TERRORist

блогер
Регистрация: Jun 2005
Адрес: RU
Сообщений: 1,540
Записей в блоге: 12
да в том то и дело что я не могу получить аналогичный результат в пиксельбендере поэтому я и создал тему!)

скриптик только threshold находит а размыть и наложить его не может...

по идее должен работать не медленнее чем твой скрипт с битмапдатами

Старый 24.12.2008, 17:03
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
да не обязательно аналогичный, хотя бы тот, что светлые пиксели красит сколько считает?

Старый 24.12.2008, 17:39
TERRORist вне форума Посмотреть профиль Отправить личное сообщение для TERRORist Найти все сообщения от TERRORist
  № 9  
Ответить с цитированием
TERRORist
 
Аватар для TERRORist

блогер
Регистрация: Jun 2005
Адрес: RU
Сообщений: 1,540
Записей в блоге: 12
О, я все таки догадался... если сделать копию объекта и чтобы бендеровский скрипт делал альфу равной 0 у всех пикселей кроме засвеченных, и наложить на него обычный встроенный в флеш блюр, эффект становится таким же!

замерял все FPS на стареньком 1.7 ггц селерончике с кучей запущенной ерунды, показывает >1000 FPS. то есть 0 ms выполнение..

Может я меряю неправильно?

Код:
function oef(e:Event=null):void
{
    var t1:int=getTimer();
     var sf:ShaderFilter=new ShaderFIlter(shader);
     glow.filters=[sf, new GlowFilter(0xFFFFFFF, 1, 30, 30, 3, 2)];
     fps.text=(getTimer()-t1)+'ms';
}


Последний раз редактировалось TERRORist; 24.12.2008 в 17:52.
Старый 25.12.2008, 12:19
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
слегка офтоп,
не про свечение, а про производительность ShaderFilter
поскольку TERRORist закроил сравнение , нарисовал свой тест
картинку считаем или через ShaderFilter со скриптом из 1го поста или
тремя threshold'ами из 4го поста, результат счета немного разный, но это неважно - хотелось просто сравнить производительность
ощутимой разницы не обнаруживается, да и та в сторону преимущества threshold'а

понятно, что речь о только о простых вещах, но все ж..

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:11.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.