Обсудите термины «Unreal» и «Engine» с любителем компьютерных игр, и он, несомненно, свяжет эти слова с визуально ошеломляющей графикой, продемонстрированной в таких играх, как Black Myth: Wukong, Senua’s Saga: Hellblade II и A Plague Tale: Requiem. Однако, возможно, есть еще одна концепция, тесно связанная с Unreal Engine, которая приходит на ум компьютерным геймерам — задержка частоты кадров. Если вам интересно, что означает этот термин и почему он возникает, создатели UE углубились в детали в недавнем сообщении в блоге и объяснили, как они с этим справляются.
Для начала давайте углубимся в шейдеры — это компактные программные скрипты, которые играют важную роль в графическом рендеринге. Они предназначены для выполнения одной точной функции, будь то перемещение треугольника по экрану или что-то более сложное, например, определение цвета пикселя с учетом нескольких источников света, материалов и спецэффектов.
Unreal Engine служит универсальным программным обеспечением для создания видеоигр, позволяя разработчикам писать код на C++ или через встроенную систему визуального скриптинга, известную как чертежи. Для обеспечения более плавного графического программирования используется интерфейс прикладного программирования (API), такой как Direct3D или Vulkan. С помощью этого API вы можете отправить одну команду, и он автоматически преобразует ее в множество других инструкций для вас, оптимизируя процесс создания графики.
По сути, пока графический процессор вашей видеокарты не понимает вывод API, его драйверы должны преобразовать этот код в формат, который может обработать графический процессор. Этот процесс часто называют компиляцией шейдеров. В сложных 3D-играх могут быть десятки тысяч таких шейдеров, которые необходимо скомпилировать.
Если во время игры вы попытаетесь перекомпилировать шейдеры во время игрового процесса, центральный процессор будет на мгновение занят этой задачей, что приведет к временному снижению частоты кадров игры, что известно как заикание. Проще говоря, это означает, что плавность и скорость игры могут на мгновение отставать, когда движку нужно подготовить определенные визуальные эффекты (шейдеры). Это может часто происходить в играх, созданных с использованием Unreal Engine, как Epic Games объясняет более подробно.
В общем, для визуализации объекта на экране нам нужны несколько типов шейдеров (например, вершинные и пиксельные шейдеры), а также различные настройки для графического процессора (GPU). Эти настройки включают в себя режим отбраковки, режим смешивания, режимы сравнения глубины и трафарета и другие. В совокупности эти компоненты определяют настройку или состояние конвейера рендеринга GPU.
В некоторых сценариях среда влияет на конечный код шейдера, что приводит к случаям, когда драйвер не может начать компиляцию шейдеров, пока не будет выполнена команда отрисовки. Этот процесс может длиться десятки миллисекунд или дольше для одной команды отрисовки, вызывая увеличение продолжительности кадра при первоначальном использовании шейдера — проблема, с которой геймеры часто сталкиваются как с задержкой или прерывистой производительностью, часто называемой заиканием или заиканием.
В современной разработке API программисты должны объединить все свои шейдеры и настройки для запроса на отрисовку в объект состояния конвейера (PSO). Важно то, что эти объекты могут быть собраны в любой момент, что позволяет движкам подготовить все необходимое заранее (например, во время загрузки), гарантируя, что процесс компиляции будет завершен до начала рендеринга.
Первоначально Epic Engine рекомендовал метод под названием «бандлинг», при котором часто используемые PSO группировались в кэш, который создавался при первом запуске игры или при загрузке сохраненной игры или уровня. Однако Epic отмечает, что такой подход может быть весьма ресурсоемким и требует постоянных обновлений в играх с меняющимся контентом.
Предлагаемое исправление
В новых версиях Unreal Engine компания Epic представила технологию, названную ею предварительным кэшированием PSO, в качестве решения упомянутых проблем.
Когда элемент добавляется в систему, она проверяет материал и использует данные из сетки (например, является ли он статичным или анимированным), а также общее состояние системы, например настройки качества видео, чтобы определить список потенциальных параметров рендеринга, которые могут быть применены к объекту.
Как геймер, я нахожу увлекательным, как игры вроде Fortnite Battle Royale сужают свои возможности. В каждом матче они компилируют около 30 000 возможных игровых состояний (PSO), но используют только около 10 000 из них. Это может показаться много, но если учесть общее пространство комбинаций, которое содержит миллионы, это всего лишь крошечная часть. Этот эффективный процесс выбора делает возможным компиляцию и загрузку игры во время игрового процесса.
Во время загрузки карты объекты предварительно кэшируются с данными Precomputed Shading Occlusion (PSO), пока на экране отображается загрузочный экран. Объекты, которые появляются позже во время игры, могут либо отложить рендеринг до тех пор, пока их PSO не будут подготовлены, либо использовать предварительно скомпилированный материал по умолчанию. Обычно это приводит к небольшой задержке потоковой передачи, которая не заметна большинству игроков. Эта система эффективно устраняет заикание из-за компиляции PSO для материалов и работает плавно с пользовательским контентом.
или
Во время загрузки карты объекты подготавливаются путем предварительного кэширования информации Precomputed Shading Occlusion (PSO), пока отображается загрузочный экран. Объекты, которые появляются позже в игре, могут либо ждать готовности своих PSO перед рендерингом, либо использовать ранее скомпилированный материал по умолчанию. В большинстве случаев это приводит лишь к небольшой задержке потоковой передачи, которая обычно не заметна. Эта система эффективно устраняет заикание из-за компиляции PSO для материалов и работает безупречно с пользовательским контентом.
Хотя система эффективна, важно отметить, что есть области, в которых она не дотягивает. В частности, некоторые шейдеры, напрямую не связанные с материалами, известные как глобальные шейдеры (например, те, которые используются для эффектов вроде размытия движения), не могут быть полностью предварительно загружены тем же способом. Epic признала это ограничение, заявив, что, хотя вычислительные шейдеры действительно могут быть предварительно загружены, графические шейдеры в настоящее время исключены из этого процесса. Однако Epic активно работает над улучшением этой ситуации, расширяя покрытие предварительного кэширования, стремясь свести к минимуму любые одноразовые сбои, которые могут возникнуть при первом использовании этих типов шейдеров.
Как фанат, я заметил, что ваши драйверы GPU хранят скомпилированные PSO (Pixel Shader Output) либо на вашем SSD, либо на жестком диске для быстрого доступа. Однако они также могут находиться в системной памяти. Недостатком является то, что кэш PSO может стать довольно большим, и Epic Games активно работает над решением этой проблемы, находя способы уменьшения воздействия на память и разумно определяя, когда предварительно кэшированные PSO должны оставаться активными.
По сути, Epic признает, что заикание компиляции шейдеров является распространенной проблемой в играх, созданных на Unreal Engine, но они активно работают над ее полным решением. Для тех, кто играет, а не разрабатывает игры, это может показаться обнадеживающим, но не имеет прямого влияния, поскольку нет способа предотвратить компиляцию шейдеров на уровне игрока.
Подводя итог, Epic предлагает разработчикам несколько практических советов по более эффективному решению проблемы заикания. Например, рекомендуется использовать последнюю версию UE и часто отслеживать заикания PSO во время разработки. Однако разработчикам следует помнить, что к заиканию могут приводить и другие факторы. Хотя геймеры могут не различать, связана ли проблема с компиляцией шейдеров или нет, они, скорее всего, все равно возложат вину на нее.
Разработчикам предлагается избегать использования DirectX 11, поскольку он все еще испытывает задержку компиляции шейдеров, и есть ограниченные возможности решения этой проблемы с помощью старых технологий. Как объясняет Epic Games, решение заключается скорее в принятии будущего, чем в опоре на прошлое: «Сейчас мы находимся на этапе, когда у нас есть практическое решение, и есть также многообещающие инициативы по преодолению ограничений API, такие как расширение Vulkan для библиотек графического конвейера.
Похвально, что Epic признает заикание компиляции PSO как существенную проблему, заслуживающую столь обширного поста в блоге. Однако я не могу не чувствовать задержку, учитывая количество игр UE, которые уже некоторое время испытывают эту проблему. По сути, вред уже нанесен.
Если будущие высокобюджетные фильмы смогут выпускаться без технических сбоев, то у нас будет на одну проблему меньше. Тогда проблемы Star Wars Jedi: Survivor могут уйти в прошлое.
Смотрите также
- Первый взгляд на 3-й сезон «Игры кальмаров» раскрывает судьбу Ги-хуна, возвращение Фронтмена и подтверждает дату выхода
- Вышла 4-я глава Poppy Playtime, так что приготовьтесь встретиться с «Доуи-Печенькой» и узнать, действительно ли он «веселый до самой смерти»
- Консольные команды Сталкера 2 и чит-моды
- Лучшие слайдеры NHL 25 и как их использовать
- Кому показать КПК в СТАЛКЕР 2?
- Обзор игрового Wi-Fi Asus ROG Strix B850-F
- Новейший драйвер Nvidia 572.16 предназначен не только для серии RTX 50, но и для карт серий 20, 30 и 40. Значительные обновления также получили
- Где купить Nvidia RTX 5080: обзор сегодня, релиз завтра — вот все объявления о продаже RTX 5080, которые я нашел на данный момент
- Читы Bellwright и консольные команды
- Как пройти испытание «Золото Индианы Джонса»
2025-02-04 20:18