22.09.2020 в 22:42
На PlayStation удобнее: как делали порт Detroit Become Human
Полноценно оптимизировать генерацию шейдеров разработчики так и не смогли.
Кстати, на сайте читать удобнее
В самом конце 2019 года студия Quantic Dream выпустила на PC Detroit Become Human, бывший эксклюзив для PlayStation 4. Спустя 9 месяцев после релиза разработчики из Quantic Dream поговорили о том, как создавался порт для PC.
Портирование Detroit Become Human далось непросто: почти все технологии, использованные в игре, Quantic Dream разрабатывала самостоятельно. Адаптировать их под новую платформу тоже пришлось самим. Мы выбрали самые любопытные моменты из рассказа разработчиков.
Про начало разработки
- Портирование заняло больше года: перенос игры начали в июле 2018 года, через два месяца после выхода на консоли.
- Движок с самого начала создавался под PlayStation 4, разработчики никогда не думали, что когда-нибудь его придется перенести на другую платформу.
- Для PC-версии игры потребовалось создать новый рендер. Это была самая непростая часть работы.
Про проблемы с рендером
- В инструментах студии использовался OpenGL — API, который может работать на PC. Адаптировать его под PC и выпустить игру в таком виде было нельзя: были сложности с производительностью и поддержкой GPU разных производителей.
- Использовать DirectX 11 тоже не вариант: в Detroit используется масса ресурсов без биндинга, на DirectX 11 это привело бы к масштабной переделке шейдеров и падению производительности.
- Разработчикам пришлось выбирать между DirectX 12 и Vulkan. Они похожие, но Vulkan на тот момент поддерживал Windows 7 и 8, а студия хотела, чтобы порт был доступен максимальному числу игроков.
- В конце концов выбрали Vulkan, но за время разработки порта Windows 10, поддерживающая DirectX 12, очень сильно распространилась: можно было остановиться и на этом API.
Про разницу между PC и PlayStation 4
- Процессор PlayStation 4 медленнее современных PC, но у консоли есть существенное преимущество: минимальные накладные расходы на работу с API и очень быстрый доступ к железу.
- При работе с Vulkan разработчики придерживались подхода, напоминающего PlayStation 4: старались контролировать как можно больше и отдавать на откуп драйверу минимум работы.
- По оценке Quantic Dream, графический API консоли гораздо эффективнее, чем любой из API, существующих на PC. В частности, на консоли можно отправлять очень много вызовов отрисовки за один кадр; на низкопроизводительных PC это могло привести к проблемам.
Про шейдеры
- На PlayStation 4 они компилируются в автономном режиме и грузятся мгновенно. На PC драйвер компилирует шейдеры во время загрузки, приходится поддерживать много разных GPU и процесс занимает кучу времени.
- В случае с Detroit ситуация усложняется тем, что в игре очень много шейдеров: художники могли создавать огромное количество шейдеров, тонко настраивая материалы.
- Во время тестов с OpenGL генерирование кэша шейдеров занимало всю ночь, и на старте игра все равно подвисала.
- С Vulkan все было не так страшно. Сперва подготовка шейдеров тоже занимала очень много времени, но затем разработчики оптимизировали промежуточные файлы шейдеров и сделали так, чтобы их генерацией занимались все процессорные ядра.
- Это сильно ускорило процесс, но был нюанс: привязка к числу ядер. На Threadripper процесс завершался за пару минут, на слабом PC он мог занимать больше 20 минут.
- Единственный способ, позволяющий полностью устранить проблему, это уменьшение числа шейдеров. В случае с Detroit это невозможно — потребовалась бы переделка всех материалов, — но в будущем разработчики учтут этот момент.
Про оптимизацию отрисовки
- В одном кадре Detroit Become Human может использоваться больше 4 тысяч разных текстур — это очень много.
- Для оптимизации процесса разработчики используют несколько массивов с дескрипторами текстур: для 2D-текстур, для 3D-текстур, для буфера материалов, для кубических текстур.
- Чтобы быстро определять видимость ассета в кадре, разработчики не считают пересечения, а сравнивают списки дескрипторов, сгенерированные для нынешнего и предыдущих кадров.
- Одна только эта оптимизация позволила на один или два порядка увеличить скорость обновления списков дескрипторов.
- Благодаря индексации дескрипторов игра может отрисовывать множество примитивов за один вызов — при условии, что используется один и тот же набор дескрипторов, шейдерный пайплайн и вертексный буфер.
- Благодаря этому удалось на 60% снизить число вызовов отрисовки и увеличить производительность на слабых PC.
Читать далее
- Больше, чем просто развлечение: почему игры можно считать искусством
- Почему сложно портировать игры с PlayStation 4 на PC: рассказывает команда Detroit Become Human
- Три части Metal Gear для PC получили возрастной рейтинг на Тайване
- Аналитик Майкл Пактер почти всегда ошибается — зато он смог предсказать продажу Bethesda
- The Last of Us 2 проходят до конца чаще других игр для PlayStation 4
- Кандидаты на порт: как быстро продаются эксклюзивы PlayStation 4