![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2009
Сообщений: 35
|
Доброго времени суток %username%.
Появилась необходимость создания "Динамического блюра", раскрою: Есть некий фон (например векторный), и есть например шар, который может двигаться по фону. Сам по себе этот шар прозрачный, но он заблюривает фон. Т.е. получается эффект "грязного стекла", где шар - грязное стекло. Есть идея грабить в Sprite весь этот фон, его заблюрить, а потом отрисовывать заблюренный фон по маске шара. Но этот способ, как мне кажется, очень ресурсоемкий. Какие идеи? |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 35
|
chaboapok, можно ссылку?
|
|
|||||
|
класс flash.filters.ShaderFilter
шейдеры делаются в программе adobe pixel bender на сайте адоба есть adobe pixel bender guide и adobe pixel bender reference в описании flash as programming есть глава 17 работа с шейдерами Pixel bender и примеры в пиксель бендере есть, простенькие. |
|
|||||
|
Цитата:
Цитата:
По сути дела шейдер каждый раз производит какие-то операции + он вынужден бегать по всем пикселям. В случае с маской смазывание происходит один раз и далее - просто показ того, что находится под маской. ИМХО, худшего решения, чем шейдеры, на AS3 не написать =)
__________________
...вселенская грусть |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 35
|
gloomyBrain, это все замечательно, но фон не статичный.
|
|
|||||
|
Ну ок, не статичный. Берем BitmapData.draw(), отрисовываем ограничивающий прямоугольник нашего шарика, смазываем его. Можно конечно делать то же самое и шейдером, при небольшом размере неизвестно, что будет быстрее.
ЗЫ насчет шейдеров - у них есть shaderPrecision (точность), которую если поставить на маленькую, о вроде как быстрее работает ЗЗЫ В интернете точно есть примеры реализации блюра через шейдеры. Косяк в том, что чтобы сделать эффект от них похожим на обычный фильтр, придется прогонять картинку через шейдер несколько раз (ибо циклы в PixelBender не поддерживаются для FP)
__________________
...вселенская грусть |
|
|||||
|
Цитата:
но если вы приводите ТАКИЕ аргументы -- значит вы шейдерами никогда не пользовались. пример шейдера блюра идет в комплекте с пиксель бендером. Циклы действительно не поддерживаются, но прогонять картинку несколько раз не надо%) Конечно, было б удобней с циклами, но вцелом, и без них обойтись можно. шейдеры компилятся в специальный ассемблер и выполняются видеокартой, а всякие bitmapdata.draw() -- интерпретатором флеша, который славится особой тормознутостью. Эффект "прозрачного шарика" на шейдере будет летать, а на битмапдате будет считаться по кадру в несколько минут %). И это несмотря на то, что и там и там будет "бегать по всем пикселам" насчет остального - да, возможно. Шейдеры мне показались оптимальными только навскидку, а так как вы пишите тоже можно и будет работать Наверно вы правы с том, что шейдер, возможно, для такого - мощновато. Но тут опять же, надо смотреть что за задача. |
|
|||||
|
Цитата:
Цитата:
При этом не забывайте - PB и FP выполняются в разных потоках, по сему польза от PB теряется из-за медленного обмена данными между этими потоками ЗЫ Цитата:
__________________
...вселенская грусть Последний раз редактировалось gloomyBrain; 26.11.2010 в 02:57. |
|
|||||
|
Цитата:
Цитата:
Цитата:
вобщем, вы наверное забыли. Шейдеры можно использовать как фильтры, как функцию наложения, и как просто черный "ящик", который из нескольких картинок делает одну. Так вот, отправлять шейдеру через draw() картину надо (и то не всегда) только в последнем случае. А если работать через фильтры - можно вполне без отрисовок типа draw(). говорю же - с графикой через шейдеры часто работа идет быстрее и более "гладко", чем без них. Если у вас это было не так - то либо у вас что-то сверх специфическое, либо вы что-то не так делали. |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:42. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| blur , Dynamic |
|
|