Быстрое сравнение трех 2D библиотек работающих на Stage3D *Обновление 1*

Привет, друзья!

Я бы хотел показать вам результаты беглого сравнения трех наиболее популярных библиотек для 2D рендера, работающих на Stage3D:
Starling, ND2D, Genome2D.

Я скачал последние доступные билды и исходники этих библиотек и написал простое AIR приложение, в котором отображается некоторое количество изображений. Все они вращаются, двигаются, скейлятся и меняют альфу каждый кадр
Изображения размещаются по всей видимой области в несколько итераций (каждый кадр добавляется заданное количество изображений, пока их общее количество не достигнет заданного предела).
Для всех изображений используется одна и та же текстура – квадрат 25 на 25 с небольшим количеством альфы.
Я прогнал это приложение на своем стационарном PC и на двух мобильных устройствах – iPad1 с iOS 5.0.1 и GalaxyTab 10.1 с Android 3.1.

Итак, вот что я получил:

Starling изGitHub’а Commit:9aa93a8195c47252253fd4d2b671115e19d16b6f, 24.03.2012:

iPad 1:
1350 изображений на 30 FPS
RAM: 6.4 МБ

GalaxyTab 10.1 (OC 1.4ГГц):
1350 изображений на 30 FPS
RAM: 6.2 МБ

PC (i7 4.8 ГГц, Radeon 6790):
10000 изображений на 30 FPS
RAM: 19.7 МБ
RAM на 1000 изображений: 9.1 МБ

Starling – отличный опенсорсный фреймворк. Он имитирует классический DisplayList, имеет большое сообщество (во многом благодаря Adobe) и очень подробную API документацию. По этому изучать и вносить изменения в эту библиотеку достаточно просто.

ND2D из GitHub’а Commit:453531f7aee46b00a112c6f0d5d8b46d62075287, 05.03.2012:

Эта библиотека позволяет отрисовывать большое количество спрайтов в одинаковой текстурой двумя разными “способами” – добавляя спрайты в Sprite2DCloud или в Sprite2DBatch. Я протестировал оба.

Sprite2DCloud:

iPad 1:
~1150 изображений на 30 FPS
RAM: 6.4 МБ

GalaxyTab 10.1 (OC 1.4ГГц):
~1150 изображений на 30 FPS
RAM: 6.2 МБ

PC (i7 4.8 ГГц, Radeon 6790):
16000 изображений на 30 FPS с падением до 16 FPS во время добавления изображений (добавлялось по 100 штук в кадр), этого падения не должно быть заметно если добавлять все спрайты сразу.
RAM: 37 МБ
RAM на 1000 изображений: 9.5 МБ

Sprite2DBatch:

iPad 1:
~1150 изображений на 30 FPS
RAM: 6.6 МБ

GalaxyTab 10.1 (OC 1.4ГГц):
~1150 изображений на 30 FPS
RAM: 6.1 МБ

PC (i7 4.8 ГГц, Radeon 6790):
10800 изображений на 30 FPS
RAM: 23.2 МБ
RAM на 1000 изображений: 9.1 МБ

ND2D это еще один прекрасный опенсорсный фреймворк для отрисовки 2D с использованием Stage3D. У него также имеется большое сообщество (хоть и меньше, чем у Starling), однако API документация страдает – она заполнена очень поверхностно (однако, зачастую и этого достаточно) и при этом фреймворк сравним по производительности со Starling.
Данную библиотеку также просто использовать, т.к. своей архитектурой визуальных объектов она тоже напоминает классический DisplayList, который мы привыкли видеть во Flash, к тому же для библиотеки доступны примеры использования.

Genome2D Nightly 0.9.0.1093:

Эта библиотека отчетливо выделяется. Достаточно посмотреть на результаты бенчмарков!

iPad 1:
1900 изображений на 30 FPS
RAM: 6.5 МБ

GalaxyTab 10.1 (OC 1.4ГГц):
3800 изображений на 30 FPS
RAM: 10 МБ

PC (i7 4.8 ГГц, Radeon 6790):
~40000 изображений на 30 FPS
RAM: 68.7 МБ
RAM на 1000 изображений: 9.1 МБ

Это просто хардкорный фреймворк! Библиотека работает с потрясающей скоростью, однако для нее нет вообще никакой API документации, у нее скромное сообщество и нет актуальных примеров для последних Nightly билдов (на данный момент последний nightly билд ушел далеко вперед по сравнению с последним релизным).
Новичку использование данного вреймворка может показаться чересчур сложным.

Итак, что у нас есть для создания 2D приложений на Stage3D:
Starling – самый приятный. Однако, в некоторых тестах проигрывает ND2D в производительности.
ND2D – компромиссный вариант – в некоторых случаях он быстрее Starling’а, но отсутствие (на данный момент) адекватной API документации немного портит впечатление (so far).
Genome2D – в некоторых случаях (как в моем, например) может показывать небывалую производительность и оставлять конкурентов далеко позади, однако использовать его я бы порекомендовал лишь хардкорным разработчикам с навыками “ниндзжениринга”) Я надеюсь, этот фреймворк станет дружелюбнее к разработчику в будущих релизах.

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

Так же, хотелось бы отметить, что iPad1 и разогнанный до 1.4 ГГц GalaxyTab 10.1 во многих случаях держались наравне. Я подозреваю, что дело в разрешении и каким-то образом компенсирующих друг друга других HW и SW отличиях.
Так что если вы сейчас задумались о портировании своей (не требовательной к ресурсам) игры с комфортом и без лишних сложностей, то я бы смело рекомендовал попробовать Starling. Если же вам требуется максимум производительности (и приключений) – посмотрите в сторону Genome2D. А если что-то между – то я бы посоветовал ознакомиться с ND2D.

В качестве бонуса привожу ссылку на архив со всеми бенчмарками для Android (и AIR 3.2 p6 Runtimes для Android):
http://codestage.ru/files/flood/android/benchmark.zip

Если вы считаете, что я где-то ошибся в тестах – пишите – я буду рад исправить свою ошибку!

*Обновление 1*

Недавно я обновил расширение для Starling – starling-imagebatch, автором которого является Philippe, чтобы оно заработало с последней версией Starling’а. Заодно проверил его в деле.

Вот результаты:

iPad 1:
2000 изображений на 30 FPS
RAM: 6.4 МБ

GalaxyTab 10.1 (OC 1.4ГГц):
2000 изображений на 30 FPS
RAM: 5.1 МБ

PC (i7 4.8 ГГц, Radeon 6790):
>16000 изображений на ровных 60 FPS (больше изображений добавить не получилось из-за ограничения размеров буфера)
RAM: 14.9 МБ
RAM на 1000 изображений: 8.4 МБ

Баг с распуханием памяти)

Пока я ковырялся с ImageBatch, случайно наткнулся на очень неприятный баг, из-за которого потребление памяти начало ощутимо скакать.
Я пока так и не понял откуда у него ноги растут, но наткнуться похоже на него не очень сложно, если часто пользуешься свернутыми условями (хорошо, что у меня такой привычки нет).

Вот первый кусок кода:

var k:Number = (premultipliedAlpha ? item.alpha : 1) / 255;

А вот второй:

var k:Number = premultipliedAlpha ? item.alpha : 1;
k /= 255;

По сути никакой разницы, верно?
Только вот при очень многократном выполнении первого куска происходит распухание памяти со скоростью где-то 5 мб/сек и примерно какждые 3-5 секунды оно чистится – получается такая гармошка на графике потребления памяти)
А если первый кусок заменить на второй – всё работает как часы без каких-либо проблем с памятью.

Нашли опечатку? Выделите её и нажмите Shift + Enter или кликните здесь, спасибо!

Share Button

Комментарии

Быстрое сравнение трех 2D библиотек работающих на Stage3D *Обновление 1* — Комментарии (8)

  1. Хороший обзор. Как я и ожидал Genome2d оставил позади всех, поэтому я и сделал ставку на него.
    Должен не согласится с термином “приключения”. Автор написал первые два туториала, и надо сказать что все в коде грамотно и логично, никаких трудностей в понимании быть не должно. Плюс есть примеры и форум.
    Ссылки на все это:
    Тутор1 – http://blog.flash-core.com/?p=838
    Тутор2 – http://blog.flash-core.com/?p=875
    AsDoc – http://www.flash-core.com/g2d/doc/
    Примеры – https://github.com/pshtif/Genome2D/tree/master/examples
    Форум – http://blog.flash-core.com/?forum=genome2d-forum

    • Спасибо за комментарий и за полезные ссылки! Genome действительно очень быстрый фреймворк, однако в определённых случаях (множество изображений из одной текстуры) в ровень с ним идёт старлинговский ImageBatch (из *Обновление 1*). Очень здорово, что у нас есть выбор, чем пользоваться – можно отдавать предпочтение тому или иному продукту исходя из потребностей!

  2. прогнали на
    Acer Iconia Tab A501
    Процессор: NVIDIA Tegra Dual-core
    Частота процессора: 1 ГГц
    Код процессора: T250
    Количество ядер: 2 шт
    Размер экрана: 10.1 ” (дюйм)
    Разрешение: 1280×800 пикс

    Starling1
    60 – 22.7 RX – 0 6.8+ – 6.8GRX+ – 6.08 (постоянно растет там где +, через минуту начал греть)

    Starling2
    60 – 22.7 RX – 0 6.8+ – 6.8GRX+ – 6.08 (постоянно растет там где +, через минуту начал греть, растет быстрее первого)

    ND2D –
    Sprite2DBatch
    60 – 20.9 R X – 0 8.38 – 7.9 GRX – 5.53
    Sprite2DCloud
    60 – 27.8 RX – 0 6.41 – 641 GRX – 5.89

    Genom2D
    60 – 20,5 RX – 0 14.68 – 15.24 G R X – 7.05

    • Спасибо за комментарий! Однако, кому как не мне знать о том баге – я был инициатором его поимки) Но если вы читали ту статью – там он проявляется при совсем других условиях, по-этому нельзя достоверно сказать что корни у бага одни и те же.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">