Successfully reported this slideshow.
Your SlideShare is downloading. ×

Zillion Whales: как отрисовать 12 000 спрайтов в Unity

Ad

Как отрисовать
12000 спрайтов на
мобилах и быстро!

Ad

Мы из i-Free / Zillion Whales
Александр Феер
Unity tech lead с версии Unity 2.0
Андрей Коротков
Game producer
ex. C++ 3D e...

Ad

Задача
Нужно срендерить 4 000 * 3 спрайтов, чтобы был
стабильный FPS не ниже 30 на iOS / Android
устройствах класса iPhone...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Loading in …3
×

Check these out next

1 of 22 Ad
1 of 22 Ad

Zillion Whales: как отрисовать 12 000 спрайтов в Unity

Download to read offline

Unity tech lead Александр Феер и продюсер Андрей Коротков рассказали о том, как решали проблему эффективной прорисовки большого количества спрайтов в мобильной версии "Войны грибов".

Unity tech lead Александр Феер и продюсер Андрей Коротков рассказали о том, как решали проблему эффективной прорисовки большого количества спрайтов в мобильной версии "Войны грибов".

Advertisement
Advertisement

More Related Content

Advertisement

Zillion Whales: как отрисовать 12 000 спрайтов в Unity

  1. 1. Как отрисовать 12000 спрайтов на мобилах и быстро!
  2. 2. Мы из i-Free / Zillion Whales Александр Феер Unity tech lead с версии Unity 2.0 Андрей Коротков Game producer ex. C++ 3D engine developer
  3. 3. Задача Нужно срендерить 4 000 * 3 спрайтов, чтобы был стабильный FPS не ниже 30 на iOS / Android устройствах класса iPhone 4s.
  4. 4. Решение 1 Создать 4000 GameObject и в каждом внутри еще 2 GameObject. Плюсы: Простое управление объектами Возможность использовать анимацию юнити Минусы: Низкий FPS Очень низкий FPS Невозможно низкий FPS
  5. 5. Решение 2 Создать большой Mesh через new Mesh(). Плюсы: Хороший контроль спрайтов (uv, position, color) Минусы: Проблемы с анимациями юнити (Нужно анимировать вручную) Необходимо перестраивать меш каждый кадр Чуть быстрее предыдущего варианта (Низкий FPS)
  6. 6. Решение 3 Использовать Legacy Particles. По сути это тот же вариант №2, но уже на стороне юнити. Плюсы: Хороший контроль спрайтов (uv, position, color) Минусы: Проблемы с анимациями юнити (Нужно анимировать вручную) Чуть быстрее предыдущего варианта (Низкий FPS)
  7. 7. Решение 4 Использовать ParticleSystem. Решение передавать массив структур на сторону C++ (внутрь Unity), где уже происходит отрисовка и сортировка. Плюсы: Быстро. Очень быстро. Нужный FPS. Минусы: Проблемы с анимациями юнити (Нужно анимировать вручную) Нельзя задавать uv координаты каждого Particle в отдельности (blocker) Решение можно использовать (Существует несколько хаков чем заменить передачу uv координат), но хотелось бы красивое решение.
  8. 8. Решение 5 Использовать класс GL из Unity. Плюсы: - Минусы: Иллюзия low-level API Instant mode Медленно Никогда не используйте этот класс, ни для чего кроме дебага!
  9. 9. Никогда->
  10. 10. Решение 6 Написать рендер плагин на С++. Плюсы: Быстро. Очень быстро. Нужный FPS. Можно контролировать все что хочется, без оглядки на ограничения Unity. Минусы: Нужно знать С++ и понимать, как работает рендер конвейер Настроить компиляцию под все платформы, в том числе поддержка минимум: OpenGL 2.x, OpenGL ES 2, Direct3D 9, Direct3D 11 Забыть про Web :(
  11. 11. Что такое плагин в Unity? Обычная библиотека (зависит от платформы). Можно экспортировать простые статические функции. У Unity нет C++ API. Нужно писать C# враппер.
  12. 12. Unity Render Plugin API
  13. 13. Проблема 1 Как быстро передать массив данных из C# в C++?
  14. 14. Beware of mem copy!
  15. 15. Самый быстрый способ
  16. 16. Проблема 2 Совмещение рендеринга из Unity и из плагина.
  17. 17. Вызываем рендер MonoBehaviour.OnPostRender() - тоже подойдет
  18. 18. Блендинг :(
  19. 19. Результат
  20. 20. Вопросы? Репозиторий с прототипом: https://bitbucket.org/megaDRONe86/shroomz/ Александр: https://github.com/chromealex Андрей: dronprogs.org

×