![]() |
|
||||||||||
|
|||||
|
Добрый вечер, возникла задача наложить на объект некий кастомный фильтр - ShaderFilter, но не на весь объект полностью, а имея возможность оставить какую-то кастомную область нефильтрованной (mmm... beer...), как это делается в DisplacementMapFilter через методы mapPoint и mapBitmap, коих к сожалению не наблюдается в ShaderFilter.
С масками и дублированием изображения не хочу заморачиваться, желательно обойтись только фильтрами. В качестве таргета может выступать не только битмапа, а любой DisplayObject, в т.ч. и с динамическим содержимым, копирование будет затруднительно. Подскажите пожалуйста, как подружить эти фильтры между собой, или подскажите способ как это реализовать покрасивее. Примерно такое хочу получить в результате:
__________________
Стой! Опасная зона! Работа мозга! |
|
|||||
|
Напиши свой кастомный эффект в Pixel Bender'е
__________________
if (love is true) break my.heart; |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Ээ вы писали вообще кастомные фильтры?
Это просто берётся и делается %) mapPoint и mapBitmap - это не методы, а св-ва, в своём шейдере можно завести похожие.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Да, да, сделал уже все...
Просто в ShaderFilter математически описываем функцию для "маски", если круг, квадрат и пр. - то все ок, а вот заюзать как-нибудь сложный графический объект, зараннее вручную отрисованный уже проблематично. Вобщем обошелся примитивами через скрипт.
__________________
Стой! Опасная зона! Работа мозга! |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Всегда можно подать на вход шейдеру ещё одну битмапу. Вам 2-х битмап на входе (что автоматом есть в ShaderFilter ) - не хватило? Одна из них - бэк, вторая "маска", я думал так будет.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
-De-, а точно, в Pixel Bender Toolkit же 2 битмапы на вход можно...
Спасибо, сейчас гляну.
__________________
Стой! Опасная зона! Работа мозга! |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
А, ошибся чуть, 2 битмапы автоматом на входе если шейдер используется как BlendMode. Может, вам лучше его так использовать? Тогда просто обе битмапы будут автоматом генерится из того, что лежит.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Не буду плодить темы, спрошу еще здесь.
Есть варианты оптимизации производительности при работе с Shader фильтрами, может какие-нибудь секреты-хаки?) Фильтры накладываю на контейнер (Sprite) с динамическим содержимым. Фильтров может быть несколько штук, поэтому написал для них небольшой, своего рода, менеджер (addFilter, removeFilter, conatainsFilter и пр.), в нем хранится текущий массив фильтров. 1-3 фильтра в среднем может висеть на контейнере одновременно. Параметры фильтра динамически меняются в зависимости от входных данных (в частности координаты мыши), поэтому приходится на MOUSE_MOVE обновлять параметры фильтров и обновлять их все _container.filters = _filters; FPS держит на ПК при движении мышью и макс. кол-ве фильтров - 20-25(31), на нетбуке же показатели fps не радуют... Вот и думаю, может есть в схеме слабое место, или тут уже ничем не помочь только алгоритмы шейдеров писать максимально легкие?
__________________
Стой! Опасная зона! Работа мозга! |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
По-моему один большой шейдер, который делает то же, что и три маленьких будет значительно быстрее.
Плохо помню, может быть можно менять параметры шейдеров без присваивания _container.filters = _filters;
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Цитата:
Цитата:
Что точно влияет - контейнеру флаг обязателен cacheAsBitmap и не нужно вызывать в хандлере MOUSE_MOVE updateAfterEvent() у события. Первое что еще приходит на ум - уменьшение активной области фильтра, т.е. контейнер уменьшить. Второе - будет ли большой прирост производительности при замене динамического контента битмапой. Завтра это попробую сделать отрисовывая заранее контент, а динамику как-нибудь кусочками к битмапе можно ложить и убирать. Посмотреть много ли выиграю от такого. Еще вот статью нашел: http://www.derschmale.com/2009/07/23...ps-benchmarks/ Сами шейдеры тоже надо пооптимизировать.
__________________
Стой! Опасная зона! Работа мозга! |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|