Часто вижу ехидные смешки про оптимизацию и техническое состояние Halo Infinite. Всем советую посмотреть недавнее видео с GDC от разработчиков. Набросал небольшую заметку по ключевым моментам. А ещё можно подписаться в Твиттере на одного замечательного автора (¬‿¬ )Всё дело в том, что при разработке Halo 5 движок был заточен под Xbox One с их 8 ядрами и фиксированным фпс.Для Infinite нужно было переделать движок, чтобы он работал под кучей разного железа (особенно на ПК) с варьирующимся фреймрейтом при этом.Раньше они задачи раскидывали ручками на конкретные ядра. Приходилось в голове держать очень много информации о системе в целом.Большая проблема при онбординге новых сотрудников. Даже если человек пишет абсолютно новую подсистему, то ему нужно разобраться, что за работа в основном потоке и что во вспомогательных.В итоге переписали движок, разделив часть по использованию времени CPU на 2 части: Fixed updateVariable updateДальше очевидным решением было завести систему рабочих потоков. При этом, старое легаси говно никуда не делось.Пришлось добавить синкПоинты, когда основной поток ожидал, пока выполнятся jobs'ы. Хотя сами воркеры и очень помогали, но вот эти точки ожидания очень мешали.Система рабочих потоков помогла: Нормально зависимости задать. Выделить части систем, чтоб они работали чисто на джобсах. Весь рендер в итоге на них стал крутиться.Новичкам было проще погрузиться, т. к. они могли посмотреть хайлевел представление системы.Из забавного (для нынешних разрабов, которые с лоулевелом не работают, не очевидное): лучше подождать 0.2мс после запуска джобсов, чем просрать ресурсы на sleep/awake и переключение контекста 😅С ПК всё очевидно, думаю.Куча разного железа.Система в любой момент может отжать ресурсы.В системе одновременно может работать несколько тяжёлых процессов, что в принципе на консолях не бывает.Опять же, из забавного: на ПК не более 9 воркеров создают, даже если у вас на машине 20+ ядер.Опытным путём команда выяснила, что нет смысла больше воркеров создавать, польза от них после 9 отрицательная.В целом решение оказалось норм. Но из больших проблем, например, отсутствие нормальной настройки зависимостей между данными и воркерами. Особенно если используются общие ресурсы.#gamedev #suvitruf_gamedev #halo #haloinfinite
Вы жулик и вор, Андрей. Я видел этот пост в паблике Gamedev Suvffering в ВК.
Враньё. Я украл из Твиттера (¬‿¬ )
Набросал небольшую заметку по ключевым моментам.Вау, он наконец прислушался к людям!
Какие люди? Я здесь один.
Если кратко, это это все пк виноват
Одно из лучших технически-ориентированных выступлений за этот год на GDC, серьёзно.
Одна из самых неоптимизированных игр последних лет.