Сегодня хочу продемонстрировать, казалось бы стандартный способ оптимизации сцены, но с учетом определенных внутренних условий. Итак, что дано:
Сцена. Остров. Множество объектов, таких как деревья и трава разных видов и разных материалов. Что нужно:
Сделать так, чтобы всё это не ложилось в 0,001 FPS даже на слабых андроид-девайсах.
Мои действия(применимо к движку юнити):
1. Проверить и сделать модели более простыми. Уменьшит кол-во полигонов, точек для более быстрого рендера, по возможности без потери качества.
2. Грамотно поработать с текстурами. Снизить их разрешение, скомпоновать в атласы, применить сжатие для более быстрого обращения к ним в игре.
3. В Unity3d есть вещь Occlusion Culling. Т.е. система отключает все объекты, которые не попадают в камеру. Но в мое случае не подходит, по некоторым причинам, связанным с системой игры и крафтом.
Поэтому решение было следующим. Это проверка этих объектов на расстояние до игрока и отключение рендера объекта при выходе из диапазона. При этом проверка должна быть не слишком частой, чтоб не грузить CPU. Например я брал 0,5-1 сек.
Что получилось, можно увидеть на видео.
Итак, с чего начать?
Потребность создавать что-то отличное от того, что мне попадалось в каких-либо играх появилась давно и самые первые попытки сделать это применимо к компьютерным играм было создание своей сюжетной линий в игре Neverwinter Nights с помощью его редактора, который был не столь банален и предполагал разбираться в программировании некоторых действий персонажей и прочих вещей. В этом редакторе был свой фреймворк с синтаксисом похожим на С++. Тогда у меня ничего не получилось в силу полного отсутствия опыта и какой-то более-менее внятной идеи, но это был первый опыт.
Чуть позже, в 2012-м
Читать далее
Вводные: задача не выжать миллион fps, а заставить при равных условиях не проиграть хаксу
Сразу хочу сказать, что я в Haxe полный ноль. Парочку файлов собрал относительно недавно. За день до этого у меня была истерическая беседа с одним человеком, который работает с Haxe. Не буду выдавать все детали. Кто знает — молодец. Кто не знает — ничего не потерял. После общения с ним мне стало любопытно. А почему ХаКс всё же шустрее работает? Начал ковырять его вдоль и поперек и нануглил интересную страничку adobe.ly/15IZlJu, где человек собрал еще в 2009 году простой пример, показывающий FPS проекта на флеше и на ХаКсе.
Речь пойдет не о том, кто лучше или хуже. Я хочу показать пример как не надо проводить тесты, т.к. многие люди в них верят.
Первое, что нам надо — скачать исходники adobe.ly/15ajTbA и извлечь их. Там лежат файлы для хакса и Flash IDE и так же готовые swf'ки с html'ками
Запускаем mandelbrot-as3.html и смотрим на генерацию фракталов. У меня заняла ~538мс первичная генерация. FPS стабильно 143.
В обработке контактов в box2d 2.1a есть баг, из-за которого память иногда безгранично наполняется объектами b2Vec2, а тела и их userData после удаления не собираются GC
Эта тема уже не раз поднималась, в т.ч. на официальном форуме бокс2д, но только сегодня мы совместными усилиями его локализовали и исправили :)
Читать дальше →
Задача:
Двигать по полю размером 1280х1200 (видимая область флешки 640х600) юнитов с анимацией в разных направлениях с максимальной производительностью. Изначально юниты в векторе.
Решение:
Нужно объединить растеризацию MovieClip (1 статья) и растровый рендер (2 и 3).
Читать дальше →
Рефакторинг – это улучшение читаемости кода без изменения его функционала. Оптимизация – увеличение эффективности работы программы.
В этой публикации я хочу на небольшом примере показать, как происходит рефакторинг и оптимизация. Никакой теории не будет, так как она уже давно описана в большом количестве книг. Перейдем сразу к практике. Для примера возьмём симпатичную флешку из публикации Растровый рендер в as3. Двигаем тысячи картинок с разрешения Platon. Если посмотреть на код, то можно увидеть, что внутри не всё так симпатично. Это нам и нужно. Предлагаю не закрывать статью по ссылке выше, чтобы исходный код был у вас перед глазами. Будем улучшать.
Читать дальше →
Флэшерам частенько приходится прибегать к различным ухищрениям, чтобы добиться хорошей производительности при большом количестве действующих объектов. Одним из решений является использование растеризации.
Применение метода достаточно широко — от реализации партиклов и до полной отрисовки всей графики. Из плюсов — производительность и плавность. Из минусов — сложнее вносить разнообразные искажения, а так же отрисовывать анимацию.
Читать дальше →