Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,189 views

Published on

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

Published in: Mobile
  • Be the first to comment

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

×