SlideShare a Scribd company logo
Как отрисовать
12000 спрайтов на
мобилах и быстро!
Мы из i-Free / Zillion Whales
Александр Феер
Unity tech lead с версии Unity 2.0
Андрей Коротков
Game producer
ex. C++ 3D engine developer
Задача
Нужно срендерить 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

More Related Content

Viewers also liked

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!"
Unity3D Tips and Tricks or "You are doing it wrong!"
Taras Leskiv
 
Optimizing Large Scenes in Unity
Optimizing Large Scenes in UnityOptimizing Large Scenes in Unity
Optimizing Large Scenes in Unity
Noam Gat
 
EA: Optimization of mobile Unity application
EA: Optimization of mobile Unity applicationEA: Optimization of mobile Unity application
EA: Optimization of mobile Unity application
DevGAMM Conference
 
Unity Optimization Tips, Tricks and Tools
Unity Optimization Tips, Tricks and ToolsUnity Optimization Tips, Tricks and Tools
Unity Optimization Tips, Tricks and Tools
Intel® Software
 
Unity Internals: Memory and Performance
Unity Internals: Memory and PerformanceUnity Internals: Memory and Performance
Unity Internals: Memory and Performance
DevGAMM Conference
 
Practical Guide for Optimizing Unity on Mobiles
Practical Guide for Optimizing Unity on MobilesPractical Guide for Optimizing Unity on Mobiles
Practical Guide for Optimizing Unity on Mobiles
Valentin Simonov
 
Portafolio
PortafolioPortafolio
Portafolio
nochipatzin
 
Сибирская кухня. блюда из дичи
Сибирская кухня. блюда из дичиСибирская кухня. блюда из дичи
Сибирская кухня. блюда из дичи
Montikmur24
 
Present rec 04_tor
Present rec 04_torPresent rec 04_tor
Present rec 04_tor
chibook
 
Employment status key points
Employment status key pointsEmployment status key points
Employment status key points
eleanordeem
 
магнитное поле
магнитное полемагнитное поле
магнитное полеLevan Anchabadze
 
A Nonlinear Integrated Model for Operational Planning of Multi-Site Refineries
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 Vazacopoulos
 
Last
LastLast
My Certificates, Volume 2
My Certificates, Volume 2My Certificates, Volume 2
My Certificates, Volume 2
Tony Campanale
 
Ph detailed dry district maps
Ph detailed dry district mapsPh detailed dry district maps
Ph detailed dry district maps
Park Hill Neighborhood Association
 
Barr cc slides
Barr cc slidesBarr cc slides
Barr cc slides
stephenjbarr
 
Guilcapi mis imagenes
Guilcapi mis imagenesGuilcapi mis imagenes
Guilcapi mis imagenes
Luis guilcapi
 
Bảng báo giá hình tool
Bảng báo giá hình toolBảng báo giá hình tool
Bảng báo giá hình toolsy_thanh2001
 
Cfo act of 1990 driving the transformation of federal financial management
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
xiguaatsumi
 

Viewers also liked (20)

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!"
Unity3D Tips and Tricks or "You are doing it wrong!"
 
Optimizing Large Scenes in Unity
Optimizing Large Scenes in UnityOptimizing Large Scenes in Unity
Optimizing Large Scenes in Unity
 
EA: Optimization of mobile Unity application
EA: Optimization of mobile Unity applicationEA: Optimization of mobile Unity application
EA: Optimization of mobile Unity application
 
Unity Optimization Tips, Tricks and Tools
Unity Optimization Tips, Tricks and ToolsUnity Optimization Tips, Tricks and Tools
Unity Optimization Tips, Tricks and Tools
 
Unity Internals: Memory and Performance
Unity Internals: Memory and PerformanceUnity Internals: Memory and Performance
Unity Internals: Memory and Performance
 
Practical Guide for Optimizing Unity on Mobiles
Practical Guide for Optimizing Unity on MobilesPractical Guide for Optimizing Unity on Mobiles
Practical Guide for Optimizing Unity on Mobiles
 
Portafolio
PortafolioPortafolio
Portafolio
 
Сибирская кухня. блюда из дичи
Сибирская кухня. блюда из дичиСибирская кухня. блюда из дичи
Сибирская кухня. блюда из дичи
 
Present rec 04_tor
Present rec 04_torPresent rec 04_tor
Present rec 04_tor
 
Employment status key points
Employment status key pointsEmployment status key points
Employment status key points
 
магнитное поле
магнитное полемагнитное поле
магнитное поле
 
H23試験ア
H23試験アH23試験ア
H23試験ア
 
A Nonlinear Integrated Model for Operational Planning of Multi-Site Refineries
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
 
Last
LastLast
Last
 
My Certificates, Volume 2
My Certificates, Volume 2My Certificates, Volume 2
My Certificates, Volume 2
 
Ph detailed dry district maps
Ph detailed dry district mapsPh detailed dry district maps
Ph detailed dry district maps
 
Barr cc slides
Barr cc slidesBarr cc slides
Barr cc slides
 
Guilcapi mis imagenes
Guilcapi mis imagenesGuilcapi mis imagenes
Guilcapi mis imagenes
 
Bảng báo giá hình tool
Bảng báo giá hình toolBảng báo giá hình tool
Bảng báo giá hình tool
 
Cfo act of 1990 driving the transformation of federal financial management
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
 

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

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)
Character creation pipeline for Age of Magic (3D mobile)
DevGAMM Conference
 
Rendering and synchronization of 4000 units in Mushroom Wars 2
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 Conference
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON
 
Портирование игр на мобильные платформы
Портирование игр на мобильные платформыПортирование игр на мобильные платформы
Портирование игр на мобильные платформыStanislav Krasnoyarov
 
Tanki Online — multiplayer 3D-action in browser
Tanki Online — multiplayer 3D-action in browserTanki Online — multiplayer 3D-action in browser
Tanki Online — multiplayer 3D-action in browserAnton Volkov
 
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
SECON'2014 - Сергей Шпадырев -  Разработка 3D-игры на Flash: едем с костылями...SECON'2014 - Сергей Шпадырев -  Разработка 3D-игры на Flash: едем с костылями...
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
Конференция разработчиков программного обеспечения SECON'2014
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - Graphics
Noveo
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)
Noveo
 
Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движок
Roman_Lut
 
Unity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложениюUnity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложениюYandex
 
Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м...
Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м...Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м...
Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м...
DevGAMM Conference
 
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игрCodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игрCodeFest
 
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"
Yuriy Sherstobitov "Optimization of mobile games in Unity3d and ESC"
Lviv Startup Club
 
Unreal Engine 4: Best Practices and Recent Showcases
Unreal Engine 4: Best Practices and Recent ShowcasesUnreal Engine 4: Best Practices and Recent Showcases
Unreal Engine 4: Best Practices and Recent Showcases
DevGAMM Conference
 
Игрушки на вырост. Программируем Lego-роботов
Игрушки на вырост. Программируем Lego-роботовИгрушки на вырост. Программируем Lego-роботов
Игрушки на вырост. Программируем Lego-роботов
Alexander Kolotov
 
2.5D игры и особенности разработки многопользовательских игр
2.5D игры и особенности разработки многопользовательских игр2.5D игры и особенности разработки многопользовательских игр
2.5D игры и особенности разработки многопользовательских игрGleb Polushkin
 
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Ontico
 
Artisto App, Highload 2016
Artisto App, Highload 2016Artisto App, Highload 2016
Artisto App, Highload 2016
Eduard Tyantov
 
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
corehard_by
 
Тестируем игры для мобильных устройств: от прототипа до запуска
Тестируем игры для мобильных устройств: от прототипа до запускаТестируем игры для мобильных устройств: от прототипа до запуска
Тестируем игры для мобильных устройств: от прототипа до запуска
SQALab
 

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

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)
Character creation pipeline for Age of Magic (3D mobile)
 
Rendering and synchronization of 4000 units in Mushroom Wars 2
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
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
Портирование игр на мобильные платформы
Портирование игр на мобильные платформыПортирование игр на мобильные платформы
Портирование игр на мобильные платформы
 
Tanki Online — multiplayer 3D-action in browser
Tanki Online — multiplayer 3D-action in browserTanki Online — multiplayer 3D-action in browser
Tanki Online — multiplayer 3D-action in browser
 
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
SECON'2014 - Сергей Шпадырев -  Разработка 3D-игры на Flash: едем с костылями...SECON'2014 - Сергей Шпадырев -  Разработка 3D-игры на Flash: едем с костылями...
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - Graphics
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)
 
Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движок
 
Unity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложениюUnity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложению
 
Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м...
Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м...Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м...
Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на м...
 
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игрCodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
 
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"
Yuriy Sherstobitov "Optimization of mobile games in Unity3d and ESC"
 
Unreal Engine 4: Best Practices and Recent Showcases
Unreal Engine 4: Best Practices and Recent ShowcasesUnreal Engine 4: Best Practices and Recent Showcases
Unreal Engine 4: Best Practices and Recent Showcases
 
Игрушки на вырост. Программируем Lego-роботов
Игрушки на вырост. Программируем Lego-роботовИгрушки на вырост. Программируем Lego-роботов
Игрушки на вырост. Программируем Lego-роботов
 
2.5D игры и особенности разработки многопользовательских игр
2.5D игры и особенности разработки многопользовательских игр2.5D игры и особенности разработки многопользовательских игр
2.5D игры и особенности разработки многопользовательских игр
 
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
 
Artisto App, Highload 2016
Artisto App, Highload 2016Artisto App, Highload 2016
Artisto App, Highload 2016
 
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
 
Тестируем игры для мобильных устройств: от прототипа до запуска
Тестируем игры для мобильных устройств: от прототипа до запускаТестируем игры для мобильных устройств: от прототипа до запуска
Тестируем игры для мобильных устройств: от прототипа до запуска
 

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
  • 3.
  • 4.
  • 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!