Как мы портировали AAA-игру Divinity: Original Sin 2 на Mac

Технический директор петербургской компании Elverils Платон Фомичев — о международных проектах, цели разработать собственную игру и о том, почему студии, портирующие игры, не указывают даже в титрах.

Как мы портировали AAA-игру Divinity: Original Sin 2 на Mac

Мы не планировали заниматься играми

Наш компания основана в 2007 году Станиславом Тихоходом и мною. Изначально мы занимались проектами, связанными с системами безопасности. Среди самых интересных можно назвать систему удалённого контроля нью-йоркского транспорта и виртуальные трёхмерные миры для удалённых тренингов, конференций и встреч.

Крупные медицинские корпорации, в которых работают тысячи человек, могли организовывать семинары, где в трёхмерном пространстве демонстрировались модели клеток, молекул, вирусов. Докладчик при помощи анимации фокусировал внимание огромной аудитории на отдельных частях 3D-модели.

Каждый человек был представлен в виртуальной сфере как аватар и мог использовать ряд эмоций и жестов: смех, дружеское похлопывание, негодование и прочее. В кулуарах выделили зоны для приватного общения. На виртуальных стенах демонстрировали интерактивные ролики.

Добавьте к этому тёплый свет камина, управляемую погоду за окном и огромный набор локаций (небоскрёб, джунгли, рыцарский зал, хай-тек).

Кроме того, Elverils уже тогда занимались портированием этой системы на несколько платформ.

Как мы портировали AAA-игру Divinity: Original Sin 2 на Mac

Работа над проектом полностью изменила наше представление о том, чем мы хотели бы заниматься. И это были не системы безопасности. Мы решили полностью посвятить себя играм и игровой индустрии.

Это направление не было для нас полностью незнакомым: мы неплохо разбирались в компьютерных ролевых играх, ещё со студенческих лет внимательно присматривались и изучали игровой мир, следили за новинками, достижениями в трёхмерной графике и в общем подходе к дизайну игровых миров.

Решили попробовать

В качестве входной точки компания решила воспользоваться тем, что мы умели лучше всего, — портированием игр с платформы Windows на альтернативные платформы: Mac и Linux.

В 2010-х годах идея краудфандинга ещё только зарождалась, и многие студии пытались ей воспользоваться. Очень часто они вносили поддержку Mac и Linux как дополнительную цель для финансирования, и почти всегда аудитория голосовала рублем.

Мы полагали, что консультируя или полностью портируя игры таких студий, мы сможем сделать себе имя в игровой индустрии на начальных этапах.

Бизнес-отдел Elverils рассылал десятки писем с предложениями о сотрудничестве. Очевидно, рано или поздно нам должен был попасться крупный проект.

Так и случилось.

Как мы портировали AAA-игру Divinity: Original Sin 2 на Mac

Начиная с 2014 года, мы стали сотрудничать с известной на весь мир бельгийской студией Larian. Они хотели Mac- и Linux-порты. Они их и получили. Уважение к системам, на которые мы переносили игру, учёт их особенностей и специфики позволили создать полноценные высокопроизводительные игры, качество которых было отмечено игроками и специализированными сайтами.

Довольно часто на форумах или от знакомых мы слышим фразы: «А что вы вообще делаете с кодом для Mac и Linux, это же одна архитектура x86, какие тут вообще могут быть проблемы?». Кратко пробежимся по возможным проблемам.

  • Компилятор — большинство проектов разрабатываются в Visual Studio и заточены на компилятор CL от Microsoft. Mac и Linux используют компиляторы Clang и GCC. Сложный код на С++ традиционно вызывает негодование компиляторов и должен быть подвергнут перерассмотрению, а иногда и переписыванию, чтобы правильно собираться на всех платформах. Как результат, мы использовали компилятор Clang на всех платформах, чтобы избежать проблем с совместимостью кода.
  • Работа с файлами, асинхронные ввод и вывод — традиционно такие куски всегда переписываются под конкретную платформу. У таких компаний, как наша, уже есть стандартные наработки для таких случаев.
  • Работа с памятью.
  • Ассемблерные куски кода, которые нужно переписать под другой стандарт ассемблера.
  • Работа с потоками и объекты синхронизации.
  • Работа с Unicode — почти всегда требует переписывания с использованием платформо-специфического кода.
  • Сетевой код.
  • Ввод и вывод — мышь, клавиатура, контроллеры.
  • Оконная среда и специфичные для неё трюки — иконка программы, реакция на максимизацию или минимизацию окна и так далее.

И это только примерно половина списка. И, конечно, нужно понимать, что все современные игры примерно на половину состоят из стандартных коммерческих библиотек. Такая библиотека есть под портируемую платформу? Ну тогда повезло, в противном случае, её приходится портировать самим.

Некоторые системы требуют перекодирования входных графических файлов в свой специальный формат — это гигабайты данных и уйма времени. И это наша задача, заказчик лишь предоставляет материалы, которые работают в Windows.

Вот сколько всего приходится делать для создания порта. Но потраченные усилия при дружной команде почти всегда возвращаются сторицей. Не обошлось даже без наград. Бельгийские коллеги были очень довольны нашей вовлечённостью в общее дело и предложили нам портировать игры на Playstation 4 и Xbox — совершенно новые для нас системы, рассказывать про особенности разработки для них можно очень долго — это огромная отдельная тема.

Как мы портировали AAA-игру Divinity: Original Sin 2 на Mac

Но тут есть одно «но». Большинство разработчиков консолей строго-настрого запрещает нам распространяться о внутреннем содержимом их устройств. Работа с консолями — это целый особенный мир со своими компромиссами и ограничениями. Он очень интересный, но весьма закрытый: там принимают только тех, кто уже прошёл «боевое крещение» и отгрузил как минимум одну игру. Было ли нам сложно попасть в этот мир? Достаточно. Надеюсь, в будущем мы сможем подробнее рассказать об этом.

Вот тут, наверное, и изменилось мировоззрение нашей компании: из обычных изготовителей портов Elverils целенаправленно решила стать совершенно нетипичной ИТ-компанией для России. Мы будем porting house — компанией, которая профессионально переносит игры с PC как на близкие Mac и Linux, так и диаметрально противоположные консоли — Playstation, Xbox, Nintendo Switch.

Как портировать игру

Работы над PS4 и Xbox завершились успехом, и потом наступили обычные будни porting house. В чём же их особенность? Ну как минимум в том, что порты ни одна из студий не делает параллельно с разработкой основной игры. Команда портеров подключается обычно на последних этапах, когда уже основной костяк игры сформирован и код можно начинать портировать.

То есть porting house не может постоянно сотрудничать с какой-либо компанией, он просто будет простаивать большую часть времени. Из этого следует важный вывод — компания, занимающаяся портированием, просто обязана иметь параллельно несколько заказчиков, которые лучше всего не перекрывают друг друга по датам выхода игры и способны загрузить инженеров задачами.

Нас часто спрашивают, как мы делаем порты. В целом почти всегда работа начинается с изучения графической и системной составляющей игры на её родной платформе. Ростислав Михеев, ведущий инженер Elverils, работает в компании более пяти лет. Он держит в уме особенности Vita, PS3, PS4, Xbox, iOS, OpenGL, DX11, Metal, Switch и другие магические термины.

Как мы портировали AAA-игру Divinity: Original Sin 2 на Mac

Именно Ростислав разрабатывает общую стратегию портирования графического движка, основные подходы по формированию трёхмерной картинки на конкретной платформе, учитывая её особенности. Я, как технический директор компании, добавляю к его плану все оставшиеся системные части: звук, ввод, работа с файлами, видео, математика, ускорения, деление по процессорам и другое.

Генеральный директор Станислав оформляет всё это в план работ для заказчика и занимается финансовой стороной проекта. Ну а дальше мы делим весь план на участки и распределяем среди инженеров, разбивая проект на контрольные точки.

Почти всегда ведущие инженеры делают прототип движка на новой платформе в кратчайшие сроки, чтобы выявить потенциально проблемные места порта. Потом подключаем всё больше людей для финализации специфических частей.

Но иногда случаются особые случаи, когда и заказчик, и технологии, и особенности порта ставят нашу компанию на своеобразный пьедестал. Именно это и случилось в этот раз.

Мы вновь работали с нашими старыми друзьями из Бельгии — компанией Larian Studios. В этот раз стояла тяжёлая задача — нужно портировать Divinity: Original Sin 2 на Mac. Было очевидно, что старые технологии в этот раз не удастся использовать: нужно было писать графическую составляющую игры целиком с белого листа.

Делать такое без поддержки и знаний инженеров, которые работают с новыми технологиями графики Apple — Metal, — очень сложное дело, особенно, если что-то пошло не так. Но нам повезло, и одна из крупнейших корпораций планеты пошла навстречу и выделила время своих инженеров специально для помощи нам в разработке. Этот шаг можно понять — технология Metal весьма нова и ещё достаточно плохо изучена среди разработчиков. В любом случае нам повезло.

Как мы портировали AAA-игру Divinity: Original Sin 2 на Mac

Мы давно хотели опробовать Metal API, но долгое время не представлялось такой возможности. Все наши предыдущие проекты под Mac использовали OpenGL для рендеринга.

Я думаю, все в Elverils с почтением относятся к OpenGL, но к сожалению, многие подходы, используемые в нём, устарели, и добиться максимальной производительности с ним становится всё сложнее.

Даже во времена портирования первой версии Divinity: Original Sin под macOS в 2015 году приходилось использовать довольно подозрительные и неочевидные хаки с OpenGL, чтобы, например, ускорить подгрузку текстур во время быстрого вращения камерой.

Нас давно уже не пугает перспектива использовать специфичное графическое API для разных платформ, ведь основная цель — получить наибольшую совместимость и производительность. Да и вряд ли удалось бы получить хороший результат с использованием прослойки наподобие Vulkan → Metal.

Так что это был однозначный выбор в сторону Metal API. Metal позволяет управлять ресурсами ГПУ практически напрямую. С учётом архитектуры современного железа и потребностями разработчиков его можно считать удобным настолько, насколько это вообще возможно.

Также не стоит забывать и про доступные для Metal средства отладки, они значительно упрощают разработку и сохраняют время. Так что когда мы взялись за новый порт, у нас не было никаких сомнений в выборе графического API.

Из-за необходимости поддержки старых версий macOS выбрали более старую версию Metal 1.2. И тут всё не так гладко — это привело к необходимости использовать более медленный код для загрузки графических подпрограмм (шейдеров).

Как итог, результат нас не устроил, старые версии macOS из-за большого количества мелких проблем (ошибки в шейдерах, ошибки в видеодрайверах) получили статус «неподдерживаемые». В будущем мы планируем начать уже как минимум с Metal 2.0.

Основной этап с базовыми вещами удалось сделать в течение трёх недель, дальше всё сводилось к багфиксу, оптимизации и реализации каких-то уж особо специфичных вещей. Конечно, ещё были тысячи шейдеров, часть из которых предстояло переписать вручную. Но основываясь на прошлом опыте, мы делали всё это параллельно — один человек отвечал за шейдеры, другой за шейдеры материалов, ещё один — за базовый рендеринг.

Уже буквально через пару недель мы могли «наслаждаться» немного забагованным главным меню, а дальше уже сосредоточиться на различных эффектах, тенях и постобработке.

Всегда есть возможности для дальнейшей оптимизации. Вопрос лишь в том, насколько это оправданно в масштабах проекта. Все современные работающие под macOS устройства обладают достаточной производительностью, чтобы выдавать хорошую картинку в Divinity: Original Sin 2. Самое интересное, что перенос этого кода на iOS-устройства должен быть интуитивным и безболезненным.

Ростислав Михеев, ведущий инженер по графике

Ещё больше нам повезло, когда Apple показала игру на своей презентации для прессы — большая честь и большой успех как для Larian, так и для нас. После такого мы просто обязаны были держать планку на высоком уровне.

Попасть в Apple Keynote — огромное достижение для любой команды, работающей с технологиями Apple. Мы любим платформу и многое делаем, чтобы люди оценили игровой потенциал Mac-платформы. Именно в такие моменты понимаешь: всё это было не зря, и твоя работа оценена.

Как мы портировали AAA-игру Divinity: Original Sin 2 на Mac

Но мы и тут не собираемся останавливаться. Было бы интересно рассказать всем разработчикам о наших технических достижениях, находках и подходах. И что тут может быть лучше, как не WWDC-сессия?

Каждый порт всегда по-своему уникален. Многое, конечно, зависит от заказчика. Хочется выделить, что Larian позволяет нам создавать полноценные порты, адаптированные под пользователей Mac. Компания позволила (и это значит, профинансировала) создание такого кода, который изначально даже и не планировался к выходу.

Особую ценность портам придают мелкие детали — внимание к пользователю. И вот тут уже наша специализация — показать заказчику, как ещё можно улучшить порт, не потратив на это серьёзные деньги. Рассмотрим на примере Divinity: Original Sin 2 те самые мелкие, но очень важные детали, которые мы смогли добавить в игру:

  • Поддержка мультиплеера с игроками из Windows и Linux (в DOS:EE). Технически это не сложная, но весьма требующая внимания и аккуратности задача.
  • Поддержка совместимости между сохранениями в Windows и Mac. В целом эта задача весьма перекликается с мультиплеером. Опять же — аккуратность и много тестирования.
  • Поддержка жестов Macbook. Много разработчиков используют для работы Macbook-устройства. Им самим было приятно добавить интеграцию.
  • Поддержка Touch Bar. Эту функцию мы и заказчик изначально хотели сделать гораздо более объёмной и впечатляющей — анимации, инвентарь и так далее. Но пилотные тесты показали, что пользователям не нужно столько функциональности, они хотят ясные и простые кнопки на Touch Bar. Так и оставили. Сейчас почти все обзоры игры подчёркивают, что это было правильное решение.
  • Вибрация контроллеров. Ещё одна мелочь, которая добавляет целостность и законченность порту. С технической точки зрения это весьма нетривиально. Мы до сих пор совершенствуем и добавляем новые контроллеры.
  • Поддержка iCloud. Для пользователей, которые купили игру в AppStore, наличие поддержки iCloud — уже золотой стандарт.
  • Поддержка модеров в App Store. App Store-версия использует Sandbox, и установка модов значительно отличается от Steam-версии. Мы хотели упростить пользователям установку модов для этой платформы.
  • Поддержка eGPU. Мы любим технологии, которые расширяют возможности ноутбуков и позволяют им полностью раскрыть свой потенциал. Поддержка eGPU не потребовала много времени и усилий, но добавила пользователям возможности играть в разрешениях более чем 4K на своём ноутбуке.

Изначально все порты создаются в маленьком окне. Всё сводится к необходимости быстро запускать и быстро проверять написанный код. Полноэкранные разрешения отвлекают и мешают на ранних этапах. Потом, когда всё уже работает, игре становится безразлично, в каком разрешении её запускают, главное, чтобы хватило ресурсов.

Как мы портировали AAA-игру Divinity: Original Sin 2 на Mac

Основная разработка в нашей компании в основном ведётся на iMac 4K или iMac 5K, и мы просто не могли не попробовать игру в таких разрешениях. Чем больше в игре разрешение, тем большая нагрузка подаётся как на видеокарту, так и на центральный процессор.

Экономить ресурсы, тщательно измерять производительность — ключ к созданию игр, которые даже в 4K будут работать с высокой частотой кадров. На консолях существуют специальные техники, которые позволяют оптимизировать рендеринг в таких разрешениях. На PC или Mac такие техники тоже могут применяться, но в большинстве случаев запас мощности аппаратных ресурсов достаточно велик, чтобы обойтись и без этого.

Современные графические API в целом достаточно отвязаны от разрешений и перекладывают на разработчика необходимость применять те или иные оптимизации в 4K. Для нас стала приятным сюрпризом производительность eGPU-решений при использовании Metal API. Наш изначальный код рендерера не потребовал почти никаких изменений.

И вот мы здесь — игра отгружена в магазины Mac App Store, Steam и GOG. Тройной одновременный релиз, поддержка игры между Mac и Windows, огромное количество специфичных для Mac особенностей и восторженные отзывы Mac-прессы о качестве порта с упоминанием Elverils как студии-портера — это ли не мечта?

Как мы портировали AAA-игру Divinity: Original Sin 2 на Mac

Но мы хотим большего. Дело в том, что во время работы над текущим проектом между командой Elverils и командой Metal Engineering возникло потрясающее взаимопонимание.

Они помогают нам достичь самой высокой производительности кода, а мы выдаём им самые сложные и разнообразные способы применения их технологий, которые не всегда работают так, как положено.

Также все мы нацелены на улучшение Metal. В России, где Mac достаточно слабо распространён, мы любим софт и железо Apple. В таком тандеме наш porting house собирается поднять планку и попробовать портировать самые современные игры с самой требовательной графикой. Какие? Надеюсь, ещё увидите.

Ещё один вопрос, который часто можно услышать от знакомых коллег: «Какой смысл вообще создавать порт игры после выхода Windows-версии? Все, кто хотел поиграть, давно уже поиграли».

Это вопрос действительно важен. Порты в основном делаются после завершения разработки основной платформы, и тут в большинстве случаев ничего не поделаешь. Но в нашей практике мы постоянно пытаемся донести до заказчика то, что порт под альтернативные платформы надо делать параллельно с разработкой основной.

Усложнит ли это процесс? Безусловно да, но это и позволит избежать ненужных проблем в будущем. В своей практике мы придерживаемся рекомендации: начинать технический анализ и разработку ядра порта за пять-шесть месяцев до предполагаемой даты отгрузки игры.

Шансов, что мы успеем выйти одновременно с основной игрой, весьма мало, но разрыв между выходом версий под разные платформы резко сокращается. Плюс получается выстроить взаимоотношения между нами и разработчиками заказчика, что крайне важно для беспроблемного портирования.

Но как же найти заказчиков? Именно это знание и составляет основу успеха компании. Не раскрывая специфических секретов бизнеса, отмечу краеугольные камни успеха porting house.

  • Имя и репутация. Для работы с играми класса AAA необходимо выполнять свою работу на высшем уровне. Компания обязана иметь контакты как среди разработчиков, так и среди издателей.
  • Участие в выставках и тематических семинарах.
  • Постоянное поддержание технического уровня компании в форме — овладение новыми навыками и технологиями.

Про новую игру

Ложка дёгтя для тех, кто думает, что porting house — это только весело, интересно и увлекательно. Создание портов — сложный технический труд. Часто заказчик изначально среди условий договора указывает такой пункт, как полное нераскрытие договора между ним и студией. Это значит, что никто не узнает, что твоя студия делала порт PS4-версии AAA-игры, о которой говорят на каждом углу. И это нормальная практика. Даже в титрах игры ничего не указывается.

Как мы портировали AAA-игру Divinity: Original Sin 2 на Mac

Но такова уж специфика нашей работы. Почему такое происходит? Довольно часто крупные и известные студии считают, что добавление к игре дополнительных имён может отрицательно сказаться на их имидже и имидже игры. Porting house почти никогда не мелькает в новостях, о нём редко пишут журналисты. Некоторые игроки вообще задают вопрос: «Что они такого сделали-то? Просто перенесли игру с одной платформы на другую».

Обидно? Конечно — но, во-первых, такое надо учитывать в финансовой стороне контракта, а во-вторых, главное, чтобы главный или технический директор заказчика остались довольны настолько, что могли бы порекомендовать вас своим друзьям в приватной беседе.

Многие porting house остаются в тени почти всегда, лишь редко появляясь в СМИ. В России мы, например, не знаем ни одной компании, которая бы профессионально занималась исключительно портированием игр. Приведу несколько имён крупнейших Mac porting house, которых, может, кто-то и узнает. Feral Interactive, Aspyr Media, Virtual Programming.

Многие игровые компании часто вдобавок к игровым проектам делают порты — да, такое не редкость, но как это ни странно, они тоже привлекают нас к своим проектам по портированию. Именно наш опыт работы и огромная разносторонняя база знаний делают нас ценными и исключительными на рынке.

В заключение хочу сказать, что создание портов игровых проектов на альтернативные платформы — потрясающая работа, но для нас как для компании задача создания собственной игры всегда была и будет финальной и главной целью. Нам безумно нравится то, чем мы занимаемся, но мы твёрдо верим, что и у нас есть что сказать в игровом мире. Надеемся, что ещё обязательно скажем.

2727
14 комментариев

Офигенная игра

4
Ответить

Комментарий недоступен

3
Ответить

Это они на жёстких стульях весь день работают ? Проблем со спиной нет ?
У меня поясница дико болеть начинает ,если на жёстком стуле долго сижу.

2
Ответить

Только на время съемок, мягкие были слишком громоздкие и не очень вписывались.

Ответить

один из лучших портов, так держать ребята!

1
Ответить

А я как раз неделю назад в стим зашел и увидел, что моя Дивинити теперь доступна на маке

Спасибо, чуваки =)

1
Ответить

А на Switch Divinity вы портируете?

Ответить