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

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

Recommended

UI, сделай мне хорошо by
UI, сделай мне хорошоUI, сделай мне хорошо
UI, сделай мне хорошоssuser2062cc
231 views3 slides
Podlodka i os crew 8 by
Podlodka i os crew 8Podlodka i os crew 8
Podlodka i os crew 8ssuser2062cc
99 views127 slides
Developing our own rendering by
Developing our own renderingDeveloping our own rendering
Developing our own renderingDevGAMM Conference
172 views40 slides
Citrix and NVIDIA bring 3D into clouds by
Citrix and NVIDIA bring 3D into cloudsCitrix and NVIDIA bring 3D into clouds
Citrix and NVIDIA bring 3D into cloudsSergey Khalyapin
541 views11 slides
Indie game development for UE by
Indie game development for UEIndie game development for UE
Indie game development for UEDevGAMM Conference
1.1K views7 slides
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают... by
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают..."Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...Egor Petrov
58 views36 slides

More Related Content

Viewers also liked

Unity3D Tips and Tricks or "You are doing it wrong!" by
Unity3D Tips and Tricks or "You are doing it wrong!"Unity3D Tips and Tricks or "You are doing it wrong!"
Unity3D Tips and Tricks or "You are doing it wrong!"Taras Leskiv
22K views17 slides
Optimizing Large Scenes in Unity by
Optimizing Large Scenes in UnityOptimizing Large Scenes in Unity
Optimizing Large Scenes in UnityNoam Gat
10.9K views40 slides
EA: Optimization of mobile Unity application by
EA: Optimization of mobile Unity applicationEA: Optimization of mobile Unity application
EA: Optimization of mobile Unity applicationDevGAMM Conference
1K views24 slides
Unity Optimization Tips, Tricks and Tools by
Unity Optimization Tips, Tricks and ToolsUnity Optimization Tips, Tricks and Tools
Unity Optimization Tips, Tricks and ToolsIntel® Software
2.6K views50 slides
Unity Internals: Memory and Performance by
Unity Internals: Memory and PerformanceUnity Internals: Memory and Performance
Unity Internals: Memory and PerformanceDevGAMM Conference
28.3K views46 slides
Practical Guide for Optimizing Unity on Mobiles by
Practical Guide for Optimizing Unity on MobilesPractical Guide for Optimizing Unity on Mobiles
Practical Guide for Optimizing Unity on MobilesValentin Simonov
10.2K views39 slides

Viewers also liked(20)

Unity3D Tips and Tricks or "You are doing it wrong!" by Taras Leskiv
Unity3D Tips and Tricks or "You are doing it wrong!"Unity3D Tips and Tricks or "You are doing it wrong!"
Unity3D Tips and Tricks or "You are doing it wrong!"
Taras Leskiv22K views
Optimizing Large Scenes in Unity by Noam Gat
Optimizing Large Scenes in UnityOptimizing Large Scenes in Unity
Optimizing Large Scenes in Unity
Noam Gat10.9K views
Unity Optimization Tips, Tricks and Tools by Intel® Software
Unity Optimization Tips, Tricks and ToolsUnity Optimization Tips, Tricks and Tools
Unity Optimization Tips, Tricks and Tools
Intel® Software2.6K views
Unity Internals: Memory and Performance by DevGAMM Conference
Unity Internals: Memory and PerformanceUnity Internals: Memory and Performance
Unity Internals: Memory and Performance
DevGAMM Conference28.3K views
Practical Guide for Optimizing Unity on Mobiles by Valentin Simonov
Practical Guide for Optimizing Unity on MobilesPractical Guide for Optimizing Unity on Mobiles
Practical Guide for Optimizing Unity on Mobiles
Valentin Simonov10.2K views
Сибирская кухня. блюда из дичи by Montikmur24
Сибирская кухня. блюда из дичиСибирская кухня. блюда из дичи
Сибирская кухня. блюда из дичи
Montikmur243.3K views
Present rec 04_tor by chibook
Present rec 04_torPresent rec 04_tor
Present rec 04_tor
chibook217 views
Employment status key points by eleanordeem
Employment status key pointsEmployment status key points
Employment status key points
eleanordeem733 views
A Nonlinear Integrated Model for Operational Planning of Multi-Site Refineries by Alkis Vazacopoulos
A Nonlinear Integrated Model for Operational Planning of Multi-Site RefineriesA Nonlinear Integrated Model for Operational Planning of Multi-Site Refineries
A Nonlinear Integrated Model for Operational Planning of Multi-Site Refineries
Alkis Vazacopoulos1.4K views
Bảng báo giá hình tool by sy_thanh2001
Bảng báo giá hình toolBảng báo giá hình tool
Bảng báo giá hình tool
sy_thanh2001187 views
Cfo act of 1990 driving the transformation of federal financial management by xiguaatsumi
Cfo act of 1990 driving the transformation of federal financial managementCfo act of 1990 driving the transformation of federal financial management
Cfo act of 1990 driving the transformation of federal financial management
xiguaatsumi1.5K views

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

Character creation pipeline for Age of Magic (3D mobile) by
Character creation pipeline for Age of Magic (3D mobile)Character creation pipeline for Age of Magic (3D mobile)
Character creation pipeline for Age of Magic (3D mobile)DevGAMM Conference
1.1K views122 slides
Rendering and synchronization of 4000 units in Mushroom Wars 2 by
Rendering and synchronization of  4000 units in Mushroom Wars 2Rendering and synchronization of  4000 units in Mushroom Wars 2
Rendering and synchronization of 4000 units in Mushroom Wars 2DevGAMM Conference
1.5K views30 slides
SECON'2016. Чубарь Алексей, Мобильные грабли Unity by
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
265 views66 slides
Портирование игр на мобильные платформы by
Портирование игр на мобильные платформыПортирование игр на мобильные платформы
Портирование игр на мобильные платформыStanislav Krasnoyarov
1.3K views63 slides
Tanki Online — multiplayer 3D-action in browser by
Tanki Online — multiplayer 3D-action in browserTanki Online — multiplayer 3D-action in browser
Tanki Online — multiplayer 3D-action in browserAnton Volkov
4.5K views70 slides

Similar to Zillion Whales: как отрисовать 12 000 спрайтов в Unity(20)

Character creation pipeline for Age of Magic (3D mobile) by DevGAMM Conference
Character creation pipeline for Age of Magic (3D mobile)Character creation pipeline for Age of Magic (3D mobile)
Character creation pipeline for Age of Magic (3D mobile)
DevGAMM Conference1.1K views
Rendering and synchronization of 4000 units in Mushroom Wars 2 by DevGAMM Conference
Rendering and synchronization of  4000 units in Mushroom Wars 2Rendering and synchronization of  4000 units in Mushroom Wars 2
Rendering and synchronization of 4000 units in Mushroom Wars 2
DevGAMM Conference1.5K views
SECON'2016. Чубарь Алексей, Мобильные грабли Unity by SECON
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON265 views
Портирование игр на мобильные платформы by Stanislav Krasnoyarov
Портирование игр на мобильные платформыПортирование игр на мобильные платформы
Портирование игр на мобильные платформы
Tanki Online — multiplayer 3D-action in browser by Anton Volkov
Tanki Online — multiplayer 3D-action in browserTanki Online — multiplayer 3D-action in browser
Tanki Online — multiplayer 3D-action in browser
Anton Volkov4.5K views
Android - 10 - Graphics by Noveo
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - Graphics
Noveo780 views
Работа с графической подсистемой (Lecture 10 – Graphics) by Noveo
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)
Noveo178 views
Внедрение параллельного рендеринга в игровой движок by Roman_Lut
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движок
Roman_Lut1.4K views
Unity3d - простой путь к iPhone приложению by Yandex
Unity3d - простой путь к iPhone приложениюUnity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложению
Yandex1.2K views
Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м... by DevGAMM Conference
Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м...Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м...
Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м...
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр by CodeFest
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игрCodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
CodeFest1.8K views
Yuriy Sherstobitov "Optimization of mobile games in Unity3d and ESC" by Lviv Startup Club
Yuriy Sherstobitov "Optimization of mobile games in Unity3d and ESC"Yuriy Sherstobitov "Optimization of mobile games in Unity3d and ESC"
Yuriy Sherstobitov "Optimization of mobile games in Unity3d and ESC"
Unreal Engine 4: Best Practices and Recent Showcases by DevGAMM Conference
Unreal Engine 4: Best Practices and Recent ShowcasesUnreal Engine 4: Best Practices and Recent Showcases
Unreal Engine 4: Best Practices and Recent Showcases
DevGAMM Conference1.9K views
Игрушки на вырост. Программируем Lego-роботов by Alexander Kolotov
Игрушки на вырост. Программируем Lego-роботовИгрушки на вырост. Программируем Lego-роботов
Игрушки на вырост. Программируем Lego-роботов
Alexander Kolotov2.4K views
2.5D игры и особенности разработки многопользовательских игр by Gleb Polushkin
2.5D игры и особенности разработки многопользовательских игр2.5D игры и особенности разработки многопользовательских игр
2.5D игры и особенности разработки многопользовательских игр
Gleb Polushkin1.5K views
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group) by Ontico
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Ontico1.7K views
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019 by corehard_by
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
corehard_by307 views
Тестируем игры для мобильных устройств: от прототипа до запуска by SQALab
Тестируем игры для мобильных устройств: от прототипа до запускаТестируем игры для мобильных устройств: от прототипа до запуска
Тестируем игры для мобильных устройств: от прототипа до запуска
SQALab5.3K views

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

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