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

Вернуться   Форум Flasher.ru > Flash > Pixel Bender/AGAL

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 05.12.2010, 02:55
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 5  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
i.o. — респект! отличная наводка на подавление зеленого края!
я ее лишь несколько видоизменил и лишил настройки (она поначалу была, но все тесты показали ее ненадобность)

теперь наш фильтр имеет такой вид:
Код:
<languageVersion : 1.0;>

kernel GreenscreenKeying
<
    namespace : "ChromaKeying";
    vendor : "Vadim BELLinSKY feat. i.o.";
    version : 3;
    description : "Greenscreen keying with edge color correction";
>
{

    parameter float amount
    <
        minValue:       float(0.0);
        maxValue:       float(10.0);
        defaultValue:   float(0.0);
    >;
    
    parameter float threshold
    <
        minValue:       float(0.0);
        maxValue:       float(1.0);
        defaultValue:   float(0.8);
    >;
    
    input image4 src;
    output pixel4 dst;

    void
    evaluatePixel()
    {
    
        dst = sampleNearest( src, outCoord() );

        // очищаем зерна от плевел
        float A  = clamp( 1.0 - ( dst.g * ( 1.0 + threshold ) - dst.r - dst.b ) * amount, 0.0, 1.0 );
        float A1 = 1.0 - A;
        
        // упрощенная схема поиска серого, эквивалентного(~) данной точке по яркости
        float GREY = ( dst.r + dst.g + dst.b ) * 0.33;
        
        // обесцвечивание полупрозрачных точек с акцентом на зеленый канал
        dst.r += A1 * ( GREY - dst.r );
        dst.g += A1 * ( GREY - dst.g ) * 2.0;
        dst.b += A1 * ( GREY - dst.b );
        
        // ну и, собственно, отсечение зеленого фона
        dst.a = A;
        
        // код ниже добавлен лишь для демонстрации и должен быть удален в релизе
        // начало кода задника
        dst.r = dst.r * A + A1 * ( sin( outCoord().x * 0.25 ) * cos( outCoord().y * 0.5 ) * 0.5 + 0.5 );
        dst.g = dst.g * A + A1 * ( cos( outCoord().x * 0.5 ) * sin( outCoord().y * 0.25 ) * 0.5 + 0.5 );
        dst.b = dst.b * A + A1;
        dst.a  = 1.0;
        // конец кода задника
        
    }

}
особенно показательны эти кадры:
первый: волосы в блюре — частая ситуация (наряду с прочими размытостями при быстрых движениях)
второй: весь кадр какой-то зеленоватый — нередко при съемках отражающих объектов (в данном случае ткань платья приняла на себя много рира)

как видишь, твоя подсказка позволяет более не "пережимать" настройки, что делает края более плавными.
__________________
Поймай яблоко 2!


Последний раз редактировалось Zebestov; 05.12.2010 в 06:03.
Создать новую тему   Часовой пояс GMT +4, время: 18:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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