ПрограммированиеФорумГрафика

Flash оптимизация отрисовки

Страницы: 1 2 Следующая »
#0
15:02, 4 янв 2011

Изометрия, имеется множество тайлов, необходимо ускорить процесс их рендеринга.
1. Пробовал добавлять все тайлы родительскому объекту, т.к. сам Flash никак не реализует отсечение FPS весьма низкий и приходится вручную добавлять и удалять тайлы (addChild/removeChild). Да и жрёт памяти этот метод немеряно только на создание экземпляров Bitmap для тайлов (BitmapData общая)
2. Пробовал рендерить все тайлы в BitmapData размером с экран. Памяти потребляет значительно меньше предыдущего метода, но люто бешено тормозит.

Очевидно что в первом случае рендеринг производится какими-то внутренними и относительно шустрыми методами. Существуют ли какие-либо методы оптимизации такой специфической задачи? Также очень интересует за счёт чего ускоряется рендеринг в Alternativa3D )

upd: copyPixels спасает

#1
15:36, 4 янв 2011

по вопросу отсечения не помогу, поскольку Flash не знаю, но может на мысли натолкну. Последнее время много трубили, что flash стал поддерживать аппаратное ускорение для вывода графики. Если это так, то отрисовка десятка тысяч тайлов не должна давать существенного падения производительности.
В альтернативе кулинг реализован и разбиение пространства. Не уверен, не помню точно, но вроде BSP.

#2
16:20, 4 янв 2011

Флеш будет тормозить при перерисовке большой области экрана, потому как рендер софтварный. То есть если карта прокручивается - тормозов избежать сложно. Спасает дело cacheAsBitmap спрайта, делает оно примерно то же, что и было реализовано в 2. Только карта должна быть вся привязана к одному спрайту и кроме нее в потомках у спрайта ничего быть не должно. Если карта больше экрана, бейте ее на большие квадраты (например, 20х20 тайлов), отсекайте их динамически через свойство visible. Потому как cacheAsBitmap не работает на спрайтах шире/выше чем, вроде бы, 2200 пкс.
Опять же, если будут проблемы с памятью, придется делать квадраты не спрайтами, а битмапами и рендерить в них тайлы вручную при загрузке карты.

#3
16:59, 4 янв 2011

XProger
>2. Пробовал рендерить все тайлы в BitmapData размером с экран. Памяти потребляет значительно меньше предыдущего метода, но люто бешено тормозит.
методом draw() что-ли?
попробуйте copyPixels()

аля так, псевдо код:

var canvas:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false);
addChild(canvas);
...
main loop:
canvas.lock();
for (var i:int=0;i<tilesQuantity;i++)
    canvas.copyPixels(tile[i], tile[i].rect, destPoint); //tile[i] is BitmapData
canvas.unlock()
#4
20:31, 4 янв 2011

XProger
Кэш в битмап , Отсечение. Глупо удалять и добавлять объекты. Ты же в обычной игре не используешь список объектов для тайлов? Просто рисуем тайлы в битмап как было написанно раньше Ps-spectre. ФПС падает из за частого добавления и удаления объектов. Объекты в принципе нужны для часто анимируемых объектов
и  еще может быть для интерфейса( Если нужен только вектор, а если используешь растр для интерфейса то нафиг объекты)

#5
22:08, 4 янв 2011

evirus
Бетка с поддержкой GPU выйдет весной, а публичная версия на начало 2012 г намечена, увы )

The.web
cacheAsBitmap пробовал, но от перерасхода памяти оно не спасает :\

Ps-spectre, Ignis,
copyPixels значительно разгрузило рендер, пасиб! )

#6
22:55, 4 янв 2011

XProger


Весной выйдет  3Д вроде? А так Флэш уже давно умеет ускорять графику на GPU но только вектор  по идее. Таким образом Alternativa 3D  и вывыодит все -  за счет векторной графики.

#7
23:02, 4 янв 2011

Ignis
Текущий флеш ускоряет только видео и ничего кроме видео, текущая Alternativa3D 7 также ничего через GPU не ускоряет, а та что была показана на Adobe MAX 2010 является демонстрацией будущего Flash Molehill API который простым смертным девелоперам в руки не дадут до весны )

#8
23:23, 4 янв 2011

XProger
А че ето Bitmap жрет память, раз BitmapData общяя? Сколько у тебя тайлов там на екране?

#9
23:28, 4 янв 2011

Z
На экране мало, а вцелом весьма внушительные цифры накапливаются )

#10
23:40, 4 янв 2011

XProger
Ну вот, я про екран и говорю.
А что за изометрия - есть там статика, за которую может зайти динамика и что делаеш в етом случае?

#11
0:03, 5 янв 2011

Z
Если более конкретно, Симс первый видел? Вот то же самое, до 3д моделей и динамики пока не добрался.

#12
0:47, 5 янв 2011

XProger

зайди в свойства публикации любого Flash начиная вроде с CS3 и там будут пункты ускорения графики. Их три : Нет ускорения, прямое, ГПУ

#13
0:48, 5 янв 2011

Ignis
И чо? )

#14
0:57, 5 янв 2011

XProger
И профит же Х) Даже в контекстном меню в пункте "Параметры" есть пункт ускорения графики)

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.