![]() |
|
||||||||||
|
|
|
|||||
|
Приветствую
В процесе работы над диздоком одной игры встал вопрос - делать ли поддержку фулскрина. Суть вопроса в том, что в основном игровом режиме большую часть экрана будет занимать анимированная водная поверхность, а насколько мне известно, с большими текстурами Flash не очень хорошо дружит. Да, вид в игре изометрический. В стандартном("оконном") режиме вода реализована следующим образом: 1. Есть статическая текстура - довольно-таки реалистично нарсованная водная поверхность. 2. Есть текстура для искажений, используется в DisplacementMapFilter. По размерам она в 2 раза больше статической, состоит из 4 тайлов, в фильтре смещается путем смены параметров матрицы трансформации для метода BitmapData.draw. 3. Так как полученный результат не очень впечетлил, была добавлена еще одна текстура, длиной в два раза больше статической, но равная по высоте. Похожа на статическую текстуру, но на ней более сильно выражено горизонтальная "растяжка" волн. Состоит из 2 тайлов, повторяющихся по горизонтали, соответственно, скроллится по оси Х. Альфа выставлена в 0.5, что в результате наложения двух картинок позволяет получить эффект изменющихся волн, к тому же искаженных DisplacementMapping-ом. Надеюсь, не очень запутал... В общем, немного погуглив, понял что с таким расточительным отношениям к размеру текстур я далеко не уйду. Плюс, нашел информацию, что DisplacementMapFilter с большими BitmapData начинает сильно просаживать FPS. Какие пока вижу решения: 1. Генерировать все текстуры с множества тайлов(подходящих друг к другу) - множества, так как хочется создать довольно реалистичную воду(такая общая стилистика игры), без ярко выраженных повторяющихся элементов. 2. Попробовать использовать для DisplacementMapping-а Pixel Bender. Что можете посоветовать? Алгоритмы, хитрости, стоит ли копать в указанных направлениях, стоит ли вообще в таком случае делать фулскрин? |
|
|||||
|
Неповторимость тайлинга можно реализовать, например, используя т.н. «Принцип Цикады»
__________________
Дебаггер не предлагать |
|
|||||
|
Спасибо за совет, алгоритм выглядит интересным, до этого использовал Texture Splatting c добавкой рандома.
Попробовал шейдеры, вроде везде повключал ускорение на GPU, результат не особо радует. Алгоритм таков: При смене размеров сцены генерируем спрайт с тайлами, размер равен размеру сцены, рисуем его в битмапу - это будет база для применения шейдерного фильтра. По-хорошему надо бы еще отдельно сгенерировать битмапу для тектуры смещения, но я просто добавляю начальный сдвиг к координатам и использую данные с одной текстуры. Таким образом, в шейдер передаем: текстуру воды, время, и размер текстуры(для зацикливания текстуры в шейдере - аналогов TextureWrapping из OpenGL для Flash я не нашел, увы...может чего подскажите, чтобы убрать из шейдера операцию?). В итоге получаем визуально приемлимый результат(с тайлами и цветами еще надо поиграться) для нормального режима. В фулскрине даже при разрешении 1366х768 выжать больше 18.3 FPS не получилось. А ведь в игре планируются частицы(Flintparticles), работа с сервером на Socket...Видимо, остается только делать много анимированных тайлов(бедный дизайнер) + Texture Splatting + использовать «Принцип Цикады». Да, вот результат: http://c4.site90.com/flash/water/new/ Графика не моя, используется только для демонстрации, взял с одной похожей по тематике игрушки. Для фулскрина в консоли нужно ввести комманду "/fs"(без кавычек). |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:52. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| DisplacementMapping , PixelBender , Вода , изометрия |
|
|