Обзор оптимизации сцены под плаформу android

Сегодня хочу продемонстрировать, казалось бы стандартный способ оптимизации сцены, но с учетом определенных внутренних условий.
Итак, что дано:
Сцена. Остров. Множество объектов, таких как деревья и трава разных видов и разных материалов.
Что нужно:
Сделать так, чтобы всё это не ложилось в 0,001 FPS даже на слабых андроид-девайсах.
Мои действия(применимо к движку юнити):
1. Проверить и сделать модели более простыми. Уменьшит кол-во полигонов, точек для более быстрого рендера, по возможности без потери качества.
2. Грамотно поработать с текстурами. Снизить их разрешение, скомпоновать в атласы, применить сжатие для более быстрого обращения к ним в игре.
3. В Unity3d есть вещь Occlusion Culling. Т.е. система отключает все объекты, которые не попадают в камеру. Но в мое случае не подходит, по некоторым причинам, связанным с системой игры и крафтом.
Поэтому решение было следующим. Это проверка этих объектов на расстояние до игрока и отключение рендера объекта при выходе из диапазона. При этом проверка должна быть не слишком частой, чтоб не грузить CPU. Например я брал 0,5-1 сек.
Что получилось, можно увидеть на видео.

Трудности соло-разработки мобильной 3D-игры или первый опыт, первые шишки.

Логотип игры
Итак, с чего начать?
Потребность создавать что-то отличное от того, что мне попадалось в каких-либо играх появилась давно и самые первые попытки сделать это применимо к компьютерным играм было создание своей сюжетной линий в игре Neverwinter Nights с помощью его редактора, который был не столь банален и предполагал разбираться в программировании некоторых действий персонажей и прочих вещей. В этом редакторе был свой фреймворк с синтаксисом похожим на С++. Тогда у меня ничего не получилось в силу полного отсутствия опыта и какой-то более-менее внятной идеи, но это был первый опыт.
Чуть позже, в 2012-м
Читать далее

Air VS OpenFL. Тест Nape.



Всем привет!
Наконец-то я собрался и сделал демки на AS3 и Haxe, чтобы сравнить производительность Nape на iPad 3.

Читать дальше →

Haxe vs Flash: Как не надо делать тесты производительности

Обновления в конце

Вводные: задача не выжать миллион fps, а заставить при равных условиях не проиграть хаксу

Сразу хочу сказать, что я в Haxe полный ноль. Парочку файлов собрал относительно недавно. За день до этого у меня была истерическая беседа с одним человеком, который работает с Haxe. Не буду выдавать все детали. Кто знает — молодец. Кто не знает — ничего не потерял. После общения с ним мне стало любопытно. А почему ХаКс всё же шустрее работает? Начал ковырять его вдоль и поперек и нануглил интересную страничку adobe.ly/15IZlJu, где человек собрал еще в 2009 году простой пример, показывающий FPS проекта на флеше и на ХаКсе.

Речь пойдет не о том, кто лучше или хуже. Я хочу показать пример как не надо проводить тесты, т.к. многие люди в них верят.

Первое, что нам надо — скачать исходники adobe.ly/15ajTbA и извлечь их. Там лежат файлы для хакса и Flash IDE и так же готовые swf'ки с html'ками

Запускаем mandelbrot-as3.html и смотрим на генерацию фракталов. У меня заняла ~538мс первичная генерация. FPS стабильно 143.


Читать дальше →

Исправление бага с утечкой памяти в box2d (memory leak solution, b2vec2)

В обработке контактов в box2d 2.1a есть баг, из-за которого память иногда безгранично наполняется объектами b2Vec2, а тела и их userData после удаления не собираются GC

Эта тема уже не раз поднималась, в т.ч. на официальном форуме бокс2д, но только сегодня мы совместными усилиями его локализовали и исправили :)
Читать дальше →

Ускоряем компиляцию под Flash IDE

Очень короткая, но важная заметка.
Если отключить «Warnings Mode», то компиляция станет быстрее в разы(!)
У меня получилось 4,5 сек. против 17. :)

все гениальное - просто
PS: Советую периодически ее включать обратно и исправлять выпавшие предупреждения (если такие будут).

Личные наблюдения по оптимизации

Список всего что я нашел (столкнулся) в процессе написания игры.
Читать дальше →

Растровый рендер (анимация + движение + поворот)

Здравствуйте.

На FGB есть статьи посвященные растеризации и растровому рендеру.
1. flashgameblogs.ru/blog/actionscript/667.html
2. flashgameblogs.ru/blog/actionscript/713.html
3. flashgameblogs.ru/blog/actionscript/717.html
Спасибо авторам и надеюсь, они не против использования их статей и исходников в разработке. Копирайты из исходников сохранены. Эти 3 статьи легли в основу движка о котором эта статья.

Задача:
Двигать по полю размером 1280х1200 (видимая область флешки 640х600) юнитов с анимацией в разных направлениях с максимальной производительностью. Изначально юниты в векторе.

Решение:
Нужно объединить растеризацию MovieClip (1 статья) и растровый рендер (2 и 3).
Читать дальше →

Рефакторинг и оптимизация растрового рендера

Рефакторинг – это улучшение читаемости кода без изменения его функционала.
Оптимизация – увеличение эффективности работы программы.

В этой публикации я хочу на небольшом примере показать, как происходит рефакторинг и оптимизация. Никакой теории не будет, так как она уже давно описана в большом количестве книг. Перейдем сразу к практике. Для примера возьмём симпатичную флешку из публикации Растровый рендер в as3. Двигаем тысячи картинок с разрешения Platon. Если посмотреть на код, то можно увидеть, что внутри не всё так симпатично. Это нам и нужно. Предлагаю не закрывать статью по ссылке выше, чтобы исходный код был у вас перед глазами. Будем улучшать.
Читать дальше →

Растровый рендер в as3. Двигаем тысячи картинок

Разноцветные круги.Флэшерам частенько приходится прибегать к различным ухищрениям, чтобы добиться хорошей производительности при большом количестве действующих объектов. Одним из решений является использование растеризации.

Применение метода достаточно широко — от реализации партиклов и до полной отрисовки всей графики. Из плюсов — производительность и плавность. Из минусов — сложнее вносить разнообразные искажения, а так же отрисовывать анимацию.
Читать дальше →