oil rush глазами программистов — devday, 06.06.2012
DESCRIPTION
TRANSCRIPT
![Page 1: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/1.jpg)
Oil Rushглазами программиста
![Page 2: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/2.jpg)
Кто такой?● В геймдеве больше трёх лет● Две выпущенных коммерческих игры
○ Alien Hallway○ Oil Rush
● Принимаю активное участие в ЛШЮП● Программировал ещё в детстве● Активно играю в игры (инди и с графоном)● Море позитива, дома два кота
![Page 3: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/3.jpg)
Об игре
![Page 4: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/4.jpg)
Об игре
![Page 5: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/5.jpg)
Об игре
![Page 6: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/6.jpg)
Oil RushСтруктура проекта
![Page 7: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/7.jpg)
Цифры● 2.5 года разработки● 2 — 5 программистов full time● 135 kloc, 0 строк кода на С++● Вся игра на UnigineScript● Движок в качестве технологии● Платформы:
WindowsLinuxMacPlaystation 3 (в разработке)Мобильная версия (в разработке)
![Page 8: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/8.jpg)
UnigineScript● Кроссплатформенность● Быстрые итерации над кодом● Синтаксис похож на С++● Удобное API движка (~4000 функций)● Toolset● Быстрая 3D математика
![Page 9: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/9.jpg)
UnigineScript
![Page 10: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/10.jpg)
UnigineScript
![Page 11: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/11.jpg)
Структура репозитория
Oil Rush/assets/branches/build/retail/tags/trunk
Unigine
Enginebinaries & plugins
![Page 12: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/12.jpg)
Структура репозитория● Исходники движка в другом репозитории● Отдельное место для финальных билдов● Размер всего репозитория: 353 GB● Размер рабочей копии: 10 GB● Художники не дружат с Source Control
![Page 13: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/13.jpg)
Content Pipeline
Textures(.psd)
Models & Animations
Skinned meshes(.smesh)
Meshes(.mesh)
Animations(.sanim)
Textures(.tga, .png)
DCC Exporter
Uncompressed
Textures(.dds)
Compressed by engine
![Page 14: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/14.jpg)
Content Pipeline
Music(.oga)
Sounds(.oga)
Video(.ogv)
OGG/Vorbis & OGG/Theora
Music(.wav)
Sounds(.wav)
Video(.avi)
![Page 15: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/15.jpg)
Content Pipeline
![Page 16: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/16.jpg)
Локализация● Языки
АнглийскийРусскийНемецкийЯпонский (не осилили)
● Локализуемые ресурсы○ Тексты (~1400 строк)○ Текстуры (~120 файлов)○ Озвучка (~400 файлов)○ Субтитры к видео (10 файлов)
![Page 17: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/17.jpg)
Локализация● Отдельная большая база данных для
локализации (.xml)● Конвертация базы данных в различные
форматы● Самописный тул для генерации
локализованных картинок● XSLT + Python● Верификация
![Page 18: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/18.jpg)
Локализация● Большая куча одинаковых ресурсов, как
следствие ветвление в коде
● Победили модификаторами на файлы:some_texture.ddssome_texture.ru.ddssome_texture.de.dds
● Файловая система автоматически загружает нужные ресурсы
![Page 19: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/19.jpg)
Локализация
![Page 20: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/20.jpg)
Локализация
![Page 21: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/21.jpg)
Выводы● Быстрые итерации над кодом упрощают
жизнь и сильно ускоряют работу
● Задумывайтесь о локализации заранее
● Облегчайте жизнь художникам
![Page 22: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/22.jpg)
Oil RushОптимизация
![Page 23: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/23.jpg)
Источники проблем● Большие бои с кучей юнитов
○ Бои 100 на 100○ У юнитов может быть несколько орудий○ Много разных типов юнитов
● Много подсистем○ AI○ UI○ Unit Manager○ Collision Manager
● Много аллокаций памяти● Долгая загрузка
![Page 24: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/24.jpg)
Правильная линейкаЭто залог успеха!
![Page 25: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/25.jpg)
Правильная линейка● Top 10 script functions
● Top 10 engine functions
![Page 26: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/26.jpg)
Правильная линейка● Железо
○ CPU AMD Athlon II X2 240 2.8 Ghz○ 4 GB RAM○ NVIDIA GeForce GTX 460
● Производительность○ Общая ~20-40 ms○ Игровая логика ~10-17ms○ Рендеринг ~12-23ms○ 5000 DIPS, 1.5m tris
● Память○ ~235 MB Heap○ ~150 MB Video memory
![Page 27: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/27.jpg)
Правильная линейка● Выявление проблемных мест на
реальных картах● Профилирование подсистем скрипта● Мета-описание для тестовых сцен (.xml)● Все замеры на тестовых сценах, без
влияния внешней среды● Сложно измерять спайки
![Page 28: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/28.jpg)
Производительность● Общая оптимизация
○ Игровая логика с фиксированным fps○ Обновление визуальной части отдельно от
игровой логики в другом потоке○ Лимиты на количество
эффектов/платформ/юнитов
● Логика юнита○ Не считали орудия, если рядом никого нет○ Размазали логику юнита на несколько игровых
тактов○ Вынесли прицеливание в отдельную подсистему
![Page 29: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/29.jpg)
Производительность● Низкий уровень
○ Уменьшили количество jmp в критичных местах○ Склеивали несколько asm команд в одну,
улучшили кодогенератор скрипта○ Выносили инварианты из циклов
![Page 30: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/30.jpg)
Производительность
![Page 31: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/31.jpg)
Производительность● Интерфейс
○ Кешировали внутреннее состояние и обновляли по необходимости
○ Размазали обновление○ Сократили с 6ms до 0.5ms
● Управление○ Кешировали состояние устройств ввода○ Размазали время создания кеша команд○ Создание кеша сократилось со 170ms до 1ms на
такт игровой логики
![Page 32: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/32.jpg)
Производительность● Скорость загрузки
○ Все библиотеки материалов загружаются один раз на старте
○ Создание скомпилированного варианта скрипта○ Умный менеджмент ресурсов в движке
![Page 33: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/33.jpg)
Память● Много аллокаций во время боёв
○ Ограничили количество создаваемых эффектов○ Переиспользование объектов вместо удаления○ Свой memory manager в движке○ Сократили с 2000 до 300-500 аллокаций в пике
![Page 34: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/34.jpg)
Память● Влезаем на Playstation 3
○ Убрали pre-load всех объектов, загружаем только нужное
○ Компрессия текстур для интерфейса○ Убрали информацию о геометрии из системной
памяти, храним только в видеопамяти○ Downscale всех текстур○ Пережатый в худшее качество звук○ Выкинут нулевой LOD у геометрии
![Page 35: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/35.jpg)
Выводы● Всё, что не видно — не считать и не
показывать
● В первую очередь алгоритмическая оптимизация, а потом уже technical tricks
● В большинстве случаев подсистемы можно обновлять не каждый такт
![Page 36: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/36.jpg)
Oil RushСборки
![Page 37: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/37.jpg)
Continuous Integration● Team City● Отдельное место для финальных билдов● Синхронизация с trunk/branch● Сборка под различные платформы
Steam (Windows/Mac)Desura (Windows/Linux)Ubuntu Software Center (Linux)Standalone (Windows/Linux/Mac)Linux Native (DEB/RPM)Retail версия для издателя
![Page 38: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/38.jpg)
Continuous Integration
![Page 39: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/39.jpg)
Continuous Integration● Full build with sync ~ 1h● 3 build agents● Shell/bat/python для сборки Oil Rush● Shell/bat/python + scons для сборки
движка● Локальный Content Server для Steam
![Page 40: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/40.jpg)
QA● Trac в качестве багтрекера● Автоматическое развёртывание сборок
для Steam● Очень сложно отслеживать изменения в
игровой логике● Сложно автоматизировать
![Page 41: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/41.jpg)
Недельные релизы● Ранний выпуск игры в бета-тест● Нужно поддерживать более менее
стабильную версию● Специальный раздел на форуме для
багов● Комьюнити в помощь!
![Page 42: Oil Rush глазами программистов — DevDay, 06.06.2012](https://reader030.vdocuments.net/reader030/viewer/2022020206/5485fbe1b47959ce0c8b4f88/html5/thumbnails/42.jpg)
Выводы● Дружите с continuous integration
● Тестируйте только то, что собираетесь отдавать пользователям
● Старайтесь не допускать unstable коммитов в билд