Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ShaderFilter на область объекта (http://www.flasher.ru/forum/showthread.php?t=169628)

marat_sa 09.10.2011 00:21

ShaderFilter на область объекта
 
Вложений: 1
Добрый вечер, возникла задача наложить на объект некий кастомный фильтр - ShaderFilter, но не на весь объект полностью, а имея возможность оставить какую-то кастомную область нефильтрованной (mmm... beer...), как это делается в DisplacementMapFilter через методы mapPoint и mapBitmap, коих к сожалению не наблюдается в ShaderFilter.

С масками и дублированием изображения не хочу заморачиваться, желательно обойтись только фильтрами. В качестве таргета может выступать не только битмапа, а любой DisplayObject, в т.ч. и с динамическим содержимым, копирование будет затруднительно.

Подскажите пожалуйста, как подружить эти фильтры между собой, или подскажите способ как это реализовать покрасивее.

Примерно такое хочу получить в результате:

Rzer 09.10.2011 14:25

Напиши свой кастомный эффект в Pixel Bender'е

-De- 09.10.2011 14:53

Ээ вы писали вообще кастомные фильтры?
Это просто берётся и делается %)
mapPoint и mapBitmap - это не методы, а св-ва, в своём шейдере можно завести похожие.

marat_sa 09.10.2011 17:36

Да, да, сделал уже все...
Просто в ShaderFilter математически описываем функцию для "маски", если круг, квадрат и пр. - то все ок, а вот заюзать как-нибудь сложный графический объект, зараннее вручную отрисованный уже проблематично.
Вобщем обошелся примитивами через скрипт.

-De- 09.10.2011 18:33

Всегда можно подать на вход шейдеру ещё одну битмапу. Вам 2-х битмап на входе (что автоматом есть в ShaderFilter ) - не хватило? Одна из них - бэк, вторая "маска", я думал так будет.

marat_sa 09.10.2011 18:42

-De-, а точно, в Pixel Bender Toolkit же 2 битмапы на вход можно...
Спасибо, сейчас гляну.

-De- 09.10.2011 18:51

А, ошибся чуть, 2 битмапы автоматом на входе если шейдер используется как BlendMode. Может, вам лучше его так использовать? Тогда просто обе битмапы будут автоматом генерится из того, что лежит.

marat_sa 11.10.2011 01:08

Не буду плодить темы, спрошу еще здесь.
Есть варианты оптимизации производительности при работе с Shader фильтрами, может какие-нибудь секреты-хаки?)

Фильтры накладываю на контейнер (Sprite) с динамическим содержимым. Фильтров может быть несколько штук, поэтому написал для них небольшой, своего рода, менеджер (addFilter, removeFilter, conatainsFilter и пр.), в нем хранится текущий массив фильтров. 1-3 фильтра в среднем может висеть на контейнере одновременно.

Параметры фильтра динамически меняются в зависимости от входных данных (в частности координаты мыши), поэтому приходится на MOUSE_MOVE обновлять параметры фильтров и обновлять их все _container.filters = _filters;

FPS держит на ПК при движении мышью и макс. кол-ве фильтров - 20-25(31), на нетбуке же показатели fps не радуют...

Вот и думаю, может есть в схеме слабое место, или тут уже ничем не помочь только алгоритмы шейдеров писать максимально легкие?

-De- 11.10.2011 01:37

По-моему один большой шейдер, который делает то же, что и три маленьких будет значительно быстрее.
Плохо помню, может быть можно менять параметры шейдеров без присваивания _container.filters = _filters;

marat_sa 11.10.2011 01:51

Цитата:

По-моему один большой шейдер, который делает то же, что и три маленьких будет значительно быстрее.
Я тоже думаю, что быстрее, однако они и были разделены на логические группы в расчете на последующую комбинацию между собой. В этом то и вся фишка, чтобы их комбинировать.

Цитата:

Плохо помню, может быть можно менять параметры шейдеров без присваивания _container.filters = _filters;
Не, не работает так =)

Что точно влияет - контейнеру флаг обязателен cacheAsBitmap и не нужно вызывать в хандлере MOUSE_MOVE updateAfterEvent() у события.

Первое что еще приходит на ум - уменьшение активной области фильтра, т.е. контейнер уменьшить.
Второе - будет ли большой прирост производительности при замене динамического контента битмапой. Завтра это попробую сделать отрисовывая заранее контент, а динамику как-нибудь кусочками к битмапе можно ложить и убирать. Посмотреть много ли выиграю от такого.

Еще вот статью нашел:
http://www.derschmale.com/2009/07/23...ps-benchmarks/

Сами шейдеры тоже надо пооптимизировать.


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

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