Как стать автором
Обновить

Игроки раскритиковали версию ремейка The Last of Us для ПК, разработчики из Naughty Dog пообещали исправить проблемы

Время на прочтение1 мин
Количество просмотров3.5K
Всего голосов 3: ↑2 и ↓1+3
Комментарии13

Комментарии 13

Тяжело отрицать факт проблемы, исходя из отзывов в Steam… Но сегодня лично провел порядка 6 часов в игре — ни одного вылета и прочих проблем с картинкой, кат сценами или еще с чем либо. Да, шейдеры компилировались порядка двух часов. Для меня лично не является трагедией — запустил, пусть работает, занимаюсь своими делами. Хотя изначально не мог ждать (хотелось уже быстрее посмотреть на нее) — запустил не дожидаясь окончания компиляции — все играбельно, без ошибок и вылетов, хоть fps и проседает, это естественно. Немного посмотрел на картинку, погрузился в ностальгию и вышел в меню, оставил компилироваться шейдеры. К слову, играю на конфиге R3600 + RX5700XT в 2K. Почему я не столкнулся с проблемами — не понятно) просто получаю удовольствие, хоть это и далеко не первое ее прохождение. Всем добра.


UPD. Минусы этому комментарию ставят теже самые люди, которые пишут в Стиме, что на их 4090 игра крашится?)

Да, шейдеры компилировались порядка двух часов.

Иронично, что это максимальное время для рефанда в стиме. То есть к моменту получения десятка крашей, на которые все жалуются, вернуть деньги одной кнопкой не получится.

Можно не дожидаться — играть при компилировании. Могу предположить, что из-за этого в том числе игра и крашилась. Загрузка RX5700XT при компилировании (находился в главном меню игры) была не ниже 60% и ЦП — не ниже 50%. Если ещё при всем этом и играть… Хотя вспоминая Uncharted, играл именно в таком варианте, шейдеры компилировались в процессе. На релизе анчартеда тоже плевались многие...

Неа, я дождался компилляции и тем не менее получаю краш с последующим возможным зависанием пк при каждой смене локации. Плюс фпс забавно может с 50-55 просесть до 20, при этом сильно растет потребление оперативки и видеопамяти. Помогает понижение качества текстур, но ненадолго. Подозреваю, что источник утечек памяти не только в упомянутой библиотеке, так как 8 гигов видеопамяти и 32 гига оперативы съедаются очень быстро

Да, шейдеры компилировались порядка двух часов.

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

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

Да, шейдеры компилировались порядка двух часов

У меня странное чувство, что я что-то упустил за последние пару лет.

Для меня "компиляция шейдеров" - это что-то из области эмуляции консолей Nintendo, где шейдеры действительно приходится коллекционировать на ходу из-за использования в консолях Texture Environment Unit, который вызывался играми на лету и не подразумевал предварительной подготовки.

Но я не помню, чтоб эта проблема когда-то возникала в играх на ПК, и я точно не помню чтобы, скажем, пять лет назад Steam догружал мне сотни мегабайт пре-компилированных шейдеров после установки игры (как это происходит сейчас на Steam Deck почти каждый день).

Почему до недавнего времени в этом не было нужды?

Во первых шейдеры были сильно сильно проще, раньше и шейдеры были в сотню строк, теперь они могут быть длиной в десятки тысяч строк. Раньше шейдеры в оффлайн компилировали в IL и в рантайме драйвер патчил этот IL под конкретный байткод видеокарты. Со временем шейдеры стали сложнее и этот патчинг уже стал заметен и у игр появились фризы при запуске и разработчики GAPI сказали, дорогие разработчики, занимайтесь теперь этим сами Вот вам API чтобы вы могли докомплировать шейдеры под конкретный GPU самостоятельно, за одно мы сделаем больше оптимизаций во время докомпиляции, что замедлит время нужное для докомпиляции.

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

Но честно говоря, даже это не объясняет два часа компиляции. Самая времязатратная часть компилирования из исходников в IL происходит в офлайн и я могу представить, что подготовка финального байткода под видеокарту может занять до десяти минут, но несколько часов, звучит просто абсурдно.

Скорее всего проблема в комбинаторном росте, количества необходимых шейдеров. Был такой старый подход с убер шейдерами, когда писался один шейдер, который конфигурировался кучкой флажков, чтобы каждый шейдер не содержал ничего лишнего. Каждый флажок, очевидно давал, рост количества комбинаций шейдеров в 2 раза.

Я про это упоминал, сейчас у некоторых студий распространен подход в виде убершейдера с тысячами комбинаций + к нему добавляют редактор чтобы художники в пару кликов себе создавали ещё тысячи комбинаций шейеров. Отсюда и растут ноги миллионов шейдеров хороший обзор различных вариантов решения этой проблемы https://therealmjp.github.io/posts/shader-permutations-part2/

Для меня "компиляция шейдеров" - это что-то из области эмуляции консолей Nintendo

А компиляция кода для вас это тоже что-то непонятное?

Так вот GPU ничем не отличается от CPU в этом отношении.

Представьте, что бы вы скачивали вместо бинарника исходники и компилировали бы его у себя на машине перед запуском под свой конфиг (а-ля Gentoo).

Именно так и происходит в случае с GPU, потому что под каждый GPU и каждую версию драйвера будет свой код.

я не помню, чтоб эта проблема когда-то возникала в играх на ПК

Это большая головная боль для разрабов.

На DX11 компиляция делалась в процессе и вызывала фреймдропы.

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

На 32-ядерной рабочей станции это занимает условные 15 минут.

У человека с 4-ядерным процессором не первой свежести может уйти и пара часов.

Почему до недавнего времени в этом не было нужды?

Длина шейдеров возрасла в десятки раз, как и количество параметров.

@JKot

в рантайме драйвер патчил этот IL под конкретный байткод видеокарты.

Байткод это везде одинаковый. Драйвер компилирует байткод в GPU ISA.

A trip down the GPU Compiler pipeline (gpuopen.com)

Вообще драйвер делает много вещей для конкретной игры "под покрывалом".

Самая времязатратная часть компилирования из исходников в IL происходит в офлайн

С чего вы взяли? Это занимает в несколько раз меньше времени чем оптимизация под конкретный GPU и генерация кода.

но несколько часов, звучит просто абсурдно.

С современным пайплайном разработки (автоматически генерёные шейдеры) вполне обыденно.

С чего вы взяли? Это занимает в несколько раз меньше времени чем оптимизация под конкретный GPU и генерация кода.

Опыт. Общая кодовая база шейдеров 40k строк исходников, офлайн генерация из этого всего IL порядка 20 минут на современном i9, та самая генерация GPU ISA в рантайме это секунды на этом проекте.

С современным пайплайном разработки (автоматически генерёные шейдеры) вполне обыденно.

Если бы это было обыденно, этой новости бы не существовало, суть в новости как раз в том что это не прилично много как не крути.

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

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

Сейчас в игре все также плохо с оптимизацией?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Другие новости