43
Oil Rush глазами программиста

Oil Rush глазами программистов — DevDay, 06.06.2012

  • Upload
    devday

  • View
    858

  • Download
    3

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Oil Rush глазами программистов — DevDay, 06.06.2012

Oil Rushглазами программиста

Page 2: Oil Rush глазами программистов — DevDay, 06.06.2012

Кто такой?● В геймдеве больше трёх лет● Две выпущенных коммерческих игры

○ Alien Hallway○ Oil Rush

● Принимаю активное участие в ЛШЮП● Программировал ещё в детстве● Активно играю в игры (инди и с графоном)● Море позитива, дома два кота

Page 3: Oil Rush глазами программистов — DevDay, 06.06.2012

Об игре

Page 4: Oil Rush глазами программистов — DevDay, 06.06.2012

Об игре

Page 5: Oil Rush глазами программистов — DevDay, 06.06.2012

Об игре

Page 6: Oil Rush глазами программистов — DevDay, 06.06.2012

Oil RushСтруктура проекта

Page 7: Oil Rush глазами программистов — DevDay, 06.06.2012

Цифры● 2.5 года разработки● 2 — 5 программистов full time● 135 kloc, 0 строк кода на С++● Вся игра на UnigineScript● Движок в качестве технологии● Платформы:

WindowsLinuxMacPlaystation 3 (в разработке)Мобильная версия (в разработке)

Page 8: Oil Rush глазами программистов — DevDay, 06.06.2012

UnigineScript● Кроссплатформенность● Быстрые итерации над кодом● Синтаксис похож на С++● Удобное API движка (~4000 функций)● Toolset● Быстрая 3D математика

Page 9: Oil Rush глазами программистов — DevDay, 06.06.2012

UnigineScript

Page 10: Oil Rush глазами программистов — DevDay, 06.06.2012

UnigineScript

Page 11: Oil Rush глазами программистов — DevDay, 06.06.2012

Структура репозитория

Oil Rush/assets/branches/build/retail/tags/trunk

Unigine

Enginebinaries & plugins

Page 12: Oil Rush глазами программистов — DevDay, 06.06.2012

Структура репозитория● Исходники движка в другом репозитории● Отдельное место для финальных билдов● Размер всего репозитория: 353 GB● Размер рабочей копии: 10 GB● Художники не дружат с Source Control

Page 13: Oil Rush глазами программистов — DevDay, 06.06.2012

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

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

Content Pipeline

Page 16: Oil Rush глазами программистов — DevDay, 06.06.2012

Локализация● Языки

АнглийскийРусскийНемецкийЯпонский (не осилили)

● Локализуемые ресурсы○ Тексты (~1400 строк)○ Текстуры (~120 файлов)○ Озвучка (~400 файлов)○ Субтитры к видео (10 файлов)

Page 17: Oil Rush глазами программистов — DevDay, 06.06.2012

Локализация● Отдельная большая база данных для

локализации (.xml)● Конвертация базы данных в различные

форматы● Самописный тул для генерации

локализованных картинок● XSLT + Python● Верификация

Page 18: Oil Rush глазами программистов — DevDay, 06.06.2012

Локализация● Большая куча одинаковых ресурсов, как

следствие ветвление в коде

● Победили модификаторами на файлы:some_texture.ddssome_texture.ru.ddssome_texture.de.dds

● Файловая система автоматически загружает нужные ресурсы

Page 19: Oil Rush глазами программистов — DevDay, 06.06.2012

Локализация

Page 20: Oil Rush глазами программистов — DevDay, 06.06.2012

Локализация

Page 21: Oil Rush глазами программистов — DevDay, 06.06.2012

Выводы● Быстрые итерации над кодом упрощают

жизнь и сильно ускоряют работу

● Задумывайтесь о локализации заранее

● Облегчайте жизнь художникам

Page 22: Oil Rush глазами программистов — DevDay, 06.06.2012

Oil RushОптимизация

Page 23: Oil Rush глазами программистов — DevDay, 06.06.2012

Источники проблем● Большие бои с кучей юнитов

○ Бои 100 на 100○ У юнитов может быть несколько орудий○ Много разных типов юнитов

● Много подсистем○ AI○ UI○ Unit Manager○ Collision Manager

● Много аллокаций памяти● Долгая загрузка

Page 24: Oil Rush глазами программистов — DevDay, 06.06.2012

Правильная линейкаЭто залог успеха!

Page 25: Oil Rush глазами программистов — DevDay, 06.06.2012

Правильная линейка● Top 10 script functions

● Top 10 engine functions

Page 26: Oil Rush глазами программистов — DevDay, 06.06.2012

Правильная линейка● Железо

○ 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

Правильная линейка● Выявление проблемных мест на

реальных картах● Профилирование подсистем скрипта● Мета-описание для тестовых сцен (.xml)● Все замеры на тестовых сценах, без

влияния внешней среды● Сложно измерять спайки

Page 28: Oil Rush глазами программистов — DevDay, 06.06.2012

Производительность● Общая оптимизация

○ Игровая логика с фиксированным fps○ Обновление визуальной части отдельно от

игровой логики в другом потоке○ Лимиты на количество

эффектов/платформ/юнитов

● Логика юнита○ Не считали орудия, если рядом никого нет○ Размазали логику юнита на несколько игровых

тактов○ Вынесли прицеливание в отдельную подсистему

Page 29: Oil Rush глазами программистов — DevDay, 06.06.2012

Производительность● Низкий уровень

○ Уменьшили количество jmp в критичных местах○ Склеивали несколько asm команд в одну,

улучшили кодогенератор скрипта○ Выносили инварианты из циклов

Page 30: Oil Rush глазами программистов — DevDay, 06.06.2012

Производительность

Page 31: Oil Rush глазами программистов — DevDay, 06.06.2012

Производительность● Интерфейс

○ Кешировали внутреннее состояние и обновляли по необходимости

○ Размазали обновление○ Сократили с 6ms до 0.5ms

● Управление○ Кешировали состояние устройств ввода○ Размазали время создания кеша команд○ Создание кеша сократилось со 170ms до 1ms на

такт игровой логики

Page 32: Oil Rush глазами программистов — DevDay, 06.06.2012

Производительность● Скорость загрузки

○ Все библиотеки материалов загружаются один раз на старте

○ Создание скомпилированного варианта скрипта○ Умный менеджмент ресурсов в движке

Page 33: Oil Rush глазами программистов — DevDay, 06.06.2012

Память● Много аллокаций во время боёв

○ Ограничили количество создаваемых эффектов○ Переиспользование объектов вместо удаления○ Свой memory manager в движке○ Сократили с 2000 до 300-500 аллокаций в пике

Page 34: Oil Rush глазами программистов — DevDay, 06.06.2012

Память● Влезаем на Playstation 3

○ Убрали pre-load всех объектов, загружаем только нужное

○ Компрессия текстур для интерфейса○ Убрали информацию о геометрии из системной

памяти, храним только в видеопамяти○ Downscale всех текстур○ Пережатый в худшее качество звук○ Выкинут нулевой LOD у геометрии

Page 35: Oil Rush глазами программистов — DevDay, 06.06.2012

Выводы● Всё, что не видно — не считать и не

показывать

● В первую очередь алгоритмическая оптимизация, а потом уже technical tricks

● В большинстве случаев подсистемы можно обновлять не каждый такт

Page 36: Oil Rush глазами программистов — DevDay, 06.06.2012

Oil RushСборки

Page 37: Oil Rush глазами программистов — DevDay, 06.06.2012

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

Continuous Integration

Page 39: Oil Rush глазами программистов — DevDay, 06.06.2012

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

QA● Trac в качестве багтрекера● Автоматическое развёртывание сборок

для Steam● Очень сложно отслеживать изменения в

игровой логике● Сложно автоматизировать

Page 41: Oil Rush глазами программистов — DevDay, 06.06.2012

Недельные релизы● Ранний выпуск игры в бета-тест● Нужно поддерживать более менее

стабильную версию● Специальный раздел на форуме для

багов● Комьюнити в помощь!

Page 42: Oil Rush глазами программистов — DevDay, 06.06.2012

Выводы● Дружите с continuous integration

● Тестируйте только то, что собираетесь отдавать пользователям

● Старайтесь не допускать unstable коммитов в билд

Page 43: Oil Rush глазами программистов — DevDay, 06.06.2012

Вопросы?twitter: @aviktorov mail: [email protected]://oilrush-game.com/