Что такое меш-шейдеры
И почему они только в Alan Wake 2?
Когда объявили, что для Alan Wake 2 необходима видеокарта, поддерживающая меш-шейдеры, геймеры с AMD RX 5000-серии и Nvidia GTX 10-серии были недовольны. Оказалось, что игра запустится и без них, но низкая производительность показала, что поддержка меш-шейдеров действительно необходима. Так что такое меш-шейдеры и почему они так сильно влияют на частоту кадров?
Если кратко: Меш-шейдеры предоставляют разработчикам игр возможность обрабатывать полигоны с гораздо большей мощью и контролем, чем это делали старые вершинные шейдеры. В ближайшем будущем игры могут выводить на экран миллиарды треугольников, и ваша видеокарта будет справляться с этим без проблем.
Введение
Как известно большинству PC-геймеров, мир 3D-игр начинается с огромного количества треугольников. Первый этап рендеринга заключается в перемещении и масштабировании этих треугольников, прежде чем начнется сложный процесс нанесения текстур и окрашивания пикселей. В графическом API Direct3D блоки кода, используемые для всего этого, называются вершинными шейдерами (вершина — это угол треугольника).
На самом деле их больше, например, шейдеры оболочки, домена и геометрии, хотя их использование не является обязательным. Но с их помощью разработчики могут в полной мере воплотить в жизнь модели и окружение, созданные дизайнерами игры. В большинстве игр, которые мы играем сегодня, этап обработки вершин не представляет особых трудностей.
Это потому, что большинство игр не используют огромное количество треугольников для создания мира. Разработчики не перегружали этот аспект, предпочитая использовать большое количество вычислительных и пиксельных шейдеров для улучшения графики. По крайней мере, в большинстве случаев. Сцены с крупными планами лиц и тел персонажей — исключение, здесь нагрузка на вершины значительно увеличивается.
Однако это все еще не самое слабое звено в производительности рендеринга. Главная нагрузка — на этапе обработки пикселей, как и в большинстве игр. Однако существует предел тому, сколько можно добиться, используя относительно небольшое количество треугольников, и постоянное стремление к лучшей и более реалистичной графике означает только одно: необходимо обрабатывать больше вершин.
Ниже представлен разбор всей обработки GPU, необходимой для вывода одного кадра графики в Cyberpunk 2077. С точки зрения графических настроек, используется все, включая трассировку пути и масштабирование.
Основное внимание следует уделить части, помеченной как Vertex/Tess/Geometry Warps, и вы можете видеть (или, возможно, не видеть, так как это очень маленький участок), что по сравнению со всем остальным объем работы с вершинами крайне мал.
Так что можно подумать, что в игре могло бы быть гораздо больше треугольников повсюду, и она все равно работала бы с высокой частотой. Однако речь идет не только о количестве треугольников, но и о том, насколько легко управлять ими.
Здесь традиционный этап обработки вершин в Direct3D сталкивается с проблемой. По своему дизайну он очень жесткий, и разработчикам необходимо обработать каждый треугольник, прежде чем заниматься чем-то еще. Это особенно ограничивает, если известно, что большое количество этих объектов просто не будет видно.
Если хочется избавиться от них (так называемое вырезание или отсечение), либо придется сделать это до того, как переданы команды GPU, либо отбросить их после того, как все треугольники будут обработаны с использованием вершинных шейдеров. Это не очень эффективно, и если разработчик хочет сделать что-то более сложное в привычном пайплайне вершин Direct3D, возникнет много работы.
Именно поэтому игры не имеют такой большой нагрузки на вершины. В основном вершинные шейдеры просто мешают.
Чтобы решить эту проблему, Microsoft представила меш-шейдеры в бета-версии еще в 2019 году, прежде чем выпустить их в Direct3D в 2020 году (все это называлось DirectX 12 Ultimate). А Nvidia рекламировала меш-шейдеры задолго до того, как они стали частью Direct3D, демонстрируя возможности с ее архитектурой GPU Turing 2018 года и интересным демо с астероидами:
Так что можно было бы подумать, что многие разработчики начали использовать их в своих процессах. Но только в 2021 году UL Solutions объявила о тестовом режиме меш-шейдеров для 3DMark, и лишь спустя год появились индивидуальные демонстрации от разработчиков. Но до Alan Wake 2 с этой технологией практически ничего не делали.
Что такое меш-шейдеры?
Лучший способ понять, что такое меш-шейдеры — представить их как вычислительные шейдеры для треугольников. Они предлагают гораздо больше возможностей в обработке больших групп треугольников, называемых мешами. Например, можно разделить большой меш на множество меньших групп треугольников (которые Microsoft называет "meshlets") и затем распределить их обработку между несколькими потоками.
Поскольку меш-шейдеры были разработаны так, чтобы быть очень похожими на вычислительные шейдеры, они используют тот факт, что современные GPU уже много лет очень хорошо справляются с массивной параллельной вычислительной работой. Вместе с сопутствующим амлификационным шейдером разработчики игр получили гораздо больше контроля над обработкой треугольников, особенно в отношении того, как и когда их отсекать. Все это означает, что игра может использовать еще более детализированные модели, наполненные до предела полигонами.
Но если меш-шейдеры так потрясающе хороши, почему они так долго не появлялись в реальных играх? Ведь тест функций в 3DMark показывает, что потенциальное увеличение производительности значительное. На это есть несколько причин.
Первая из которых заключается в том, что железо, на котором работает игра, должно активно поддерживать меш-шейдеры. В случае с GPU от AMD потребуется модель видеокарты на основе RDNA 2 или новее, а для Nvidia нужен GPU Turing, Ampere или Ada Lovelace.
Когда вышло железо для трассировки лучей, игры, использующие эту технологию, появились почти сразу, так почему они не сделали того же для меш-шейдеров? Нельзя игнорировать влияние, которое консоли оказывают на все это, и первой, у которой были меш-шейдеры, была Xbox Series X/S. В теории, чип PS5 может их поддерживать, но так как Sony использует свой графический API, разработчики не могут просто использовать один подход к обработке вершин на всех платформах.
Unreal Engine 5 использует меш-шейдеры в качестве части своей функции Nanite, но в дополнение к системе, а не вместо нее. Сколько игр на UE5 сейчас доступно, которые активно используют Nanite? Их можно посчитать на пальцах одной руки.
Мы только начинаем видеть, как разработчики используют полный набор функций консолей и последних движков, почти через три года после официального запуска Microsoft DirectX 12 Ultimate. Это говорит вам обо всем, что нужно знать о том, сколько времени требуется, чтобы действительно разобраться в новой технологии и качественно внедрить ее в игру.
Возьмите, например, DirectStorage, который Microsoft выпустила в прошлом году. Это была еще одна функция, добавленная в DirectX 12 Ultimate, и это еще одна система, которая устраняет узкие места в производительности, вызванные старыми алгоритмами. Без нее играм приходится копировать каждую модель и текстуру в системную память, прежде чем передавать ее в VRAM графической карты.
DirectStorage позволяет GPU напрямую брать данные прямо с накопителя и управлять декомпрессией файлов. С включением этого API игры, которые используют множество ассетов, могут обойти CPU и системную RAM, устраняя потенциальное узкое место в производительности.
Однако на текущий момент только одна PC игра использует его, и это Forspoken, которая, к сожалению, не была лучшей из игр для демонстрации применения. Конечно, появятся и другие игры, но потребуется время, чтобы действительно извлечь из технологии максимум, и модернизация старых игр не поможет, потому что они не были разработаны для суперстриминга данных, в отличие от последних консолей.
Точно так же нет смысла добавлять конвейер меш-шейдеров в старую игру, так как они не ограничены производительностью на этапе обработки вершин, тогда как добавление трассировки лучей сразу создает вау-эффект.
Чтобы действительно извлечь максимум из меш-шейдеров, разработчикам нужно создать целый ряд моделей и миров, богатых полигонами, а затем убедиться, что есть достаточно большая база пользователей с нужным железом, чтобы гарантировать, что продажи игры будут достаточно хорошими, чтобы оправдать время, на работу с меш-шейдерами.
Это и сделала Remedy с Alan Wake 2. Если у вас есть соответствующее железо, игра выглядит потрясающе и работает действительно хорошо — даже не требуется особо мощная графическая карта (хотя это, безусловно, помогает) для наслаждения картинкой.
Так что, хотя потребовалось немало лет, чтобы меш-шейдеры действительно заявили о себе, нет сомнений, что разработчики последуют примеру Remedy и в полной мере используют их в предстоящих релизах. Если 2023 год может быть назван годом, когда трассировка лучей действительно начала проявлять свой потенциал, то 2024 год, возможно, станет годом меш-шейдеров.
Это перевод статьи с PC Gamer.
- Слух: NVIDIA GeForce RTX 5090 попала в кадр с фабрики ZOTAC — она гигантская!
- Слух: Nvidia планирует ранний выпуск RTX 5060 в марте 2025 года
- AMD представила ИИ-чип для конкуренции с Nvidia Blackwell