Показаны сообщения с ярлыком Эффекты. Показать все сообщения
Показаны сообщения с ярлыком Эффекты. Показать все сообщения

вторник, июля 28, 2009

Генерим облака

Вот понадобилось мне облака генерить. Изобретать велосипед не будем - прямиком в гугл.
А тут красоты всякой - видимо-невидимо.

Сразу хочу отметить полезный тул: Perlin Noise Explorer. Собственно, кто еще недопонял, что такое perlin noise, может подробно изучить это явление.

Замечательный пейзажик: Actionscript 3.0 perlinNoise method.
Облака с перспективой: Clouds.
Целый движок: Perlin Clouds and Frocessing (with an F).

Без демки, но проверены:
Generating Pseudo Realistic Clouds In Flash (AS3 + Perlin Noise)
Lets make some (perlin) noise!

Не облака:
Забавная пружинка: тут.
Нереальные игры с электричеством: тут.
Красивое облако: тут.
Земля: Papervision3D clouded planet Earth tutorial and source.
Такие вот пузыри: Actionscript 3 blobs / lava lamp effect
Древесные кольца: тут.

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

* * *

Решил поступить так. Берем пример Generating Pseudo Realistic Clouds In Flash (AS3 + Perlin Noise). Подстраиваем параметры таким образом, чтобы облака были редкими.
Для большой области, динамический рендер по производительности просто убийственный. Но мы генерируем крупный битмап один раз, не скупясь на качество, и затем, просто скроллим его циклически.

* * *

Сделал еще проще. Полученный битмап не скроллю, а циклически со смещением заливаю им нужную область. Это гораздо удобнее, т.к. метод заливки beginBitmapFill умеет склеивать текстуру самостоятельно при любом смещении. И по производительности это выигрышнее.

* * *

В примере, полученый клип с облаками накладывается с эффектом blendMode = "screen". Для производительности это не есть хорошо. Поэтому, в целях оптимизации, рабочий битмап делаем прозрачным, заливаем белым цветом и копируем в его альфа-канал любой из цветовых каналов сгенерированного битмапа с облаками. Точнее, для генерации perlinNoise используем один канал, который потом и копируем.

понедельник, октября 27, 2008

Имитация воды

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

С появлением фильтров эта задача стала еще проще. Если раньше рябь получали путем маскирования изображения мельчайшими полосами и многократного его дублирования, что дико нагружало процессор, то начиная с 8й версии, фильтр DisplacementMapFilter, легко позволяет искажать изображение, и получать эффектную анимацию воды.

Поглядим, какие эффекты делают наши коллеги:

Realistic Flash Water Effect - AS2. Вода получается сочетанием Bitmap.perlinNoise и DisplacementMapFilter. Вода смотрится вполне реалистично, если не считать недостатка отсутствия перспективы.
Кстати, мой коллега разрабатывал flash-заставку для Алых парусов. Он изначально сделал ставку на искажения водяной поверхности при помощи именно такого метода. Увы, требования заказчика по производительности были столь высоки, что эффект пришлось убрать... А было очень сильно сделано. К сожалению, фильтры на больших площадях очень медленны.

Здесь: Water effect, обошлись без фильтров и сделали всё масками. Смотрится конечно слабовато да и работы многовато. Но, для тех, кто не хочет дружить с flash-программированием, то вполне сойдет.
Сюда же отнесу и вот этот вариант: Flash Water Effects - пример для совсем начинающих.

Довольно продвинутый способ создания ряби, плюс имитация подводных каустиков: Water caustic effects with Flash/AS2. Демка смотрится довольно свеженько, но как-то не совсем реалистично. А всё из-за того, что карта подводных каустиков не генерируется, а является секвенцией. И сгенерирована она специальной программой, неким Caustics Generator. Что же, такой подход тоже имеет право на существование и, возможно, пожертвовав памятью на секвенцию карты, мы выиграем в производительности. А я думаю, что для того, чтобы на лету генерировать такую графику, ресурсов надо прилично, да и алгоритм еще поискать/разработать придется.

Смотрим далее: несравненный блог #Laboratory Andre Michelle и эффект Water. К сожалению, для него нет исходников. Приходится просто любоваться...

Продолжаем любоваться на воду: Rain Drop Water Effect. Сайт предлагает купить flash-компоненты с различными эффектами. Мы, безусловно, вежливо отказываемся и продолжаем рыскать.

Люди выкладывают исходный код на форумах: например, здесь - water effect. Правда нет демки, а прежде чем потратить время на проверку, хочется знать, ради чего. Пока пропустим, но будем иметь в виду.

По соседству лежит еще код: is this water effect possible in AS3? Он позволяет скрывать/появлять изображение с эффектом искажения. Как-то не очень...

Следующий претендент: Water ripples revisited (AS3-only version). Вот это то что надо! Есть Демка с "волнующейся" поверхностью и исходники. Думаю, здесь стоит остановиться и поэкспериментировать. О результатах обязательно отпишусь. Добавлю, что сам блог еще свежий, но пестрит очень любопытными демками с исходниками.

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

Пока это всё, что я смог нарыть про эффект водяной ряби. Причем, помню, что видел еще что-то стоящее по этой теме, но, увы не смог найти. Буду рад помощи.

* * *

Вспомнил еще одну статью по анимации воды: Море воды - программная анимация и не только, и здесь же: Еще раз о воде - самый главный секрет. Очень полезные примеры имитации воды с помощью анимационных приемов и капельки программирования.

* * *

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