Роль виртуального текстурирования в управлении крупномасштабными 3D-средами

Что такое виртуальное текстурирование?

Виртуальная текстура - это метод управления сценами, первоначально популяризированный в игровых движках, таких как id Tech 5 (используемый в Rage), а затем широко принятый в рендеринге в реальном времени. По своей сути, виртуальная текстура отделяет логическое текстовое адресное пространство от физической памяти GPU, позволяя создавать массивные атласы текстур - иногда называемые мегатекстурами - которые могут покрывать целые игровые миры с уникальными, не повторяющимися деталями. Вместо того, чтобы заставлять GPU удерживать весь набор текстур в VRAM, только плитки (или страницы) текстуры, которые фактически видны на экране, являются резидентными в памяти в любой момент времени. Эта система потоковой передачи на основе страницы управляется механизмом обратной связи виртуальной текстурировки: GPU сообщает, какие плитки необходимы для текущего кадра, и CPU запланирует соответствующие данные, которые будут передаваться с диска или из пула сжатых текстур.

Методика была первоначально разработана, чтобы обойти традиционный компромисс между бюджетом текстурной памяти и разнообразием поверхности. При обычном микросхемировании разработчикам приходилось выбирать между повторением небольших текстур (которые выглядят черепичными и искусственными) или использованием нескольких больших уникальных текстур, которые быстро истощают VRAM. Виртуальная текстура обеспечивает промежуточную основу: она рассматривает всю среду как одну гигантскую текстуру, потоковая передача только интересующей области на соответствующем уровне микросхем. Это позволяет назначать каждому квадратному метру ландшафта свой собственный уникальный внешний вид - каждый камень, участок травы и грязь могут быть различны без отдельных назначений текстуры на объект.

Как работает виртуальная текстура

Страницы Таблицы и Tile Streaming

Сердцем любой системы виртуального текстурирования является таблица страниц — аппаратно управляемая структура перевода, которая отображает координаты виртуальной текстуры в физические местоположения памяти. GPU использует таблицу страниц для вычисления, какие 128×128 или 256×256 пикселей текстуры находятся в памяти GPU и которые отсутствуют. Буфер обратной связи затем записывает координаты любых плиток, на которые ссылаются, но не являются резидентами, и эта информация отправляется обратно в CPU. CPU, в свою очередь, задает потоковые запросы, иногда из высокоприоритетного кэша, для загрузки отсутствующих плиток из массивно сжатого файла текстуры, хранящегося на диске.

Обратная связь и потоковая гранулярность

Современные двигатели обычно реализуют трехступенчатый потоковый конвейер: (1) GPU визуализирует версию изображения с низким разрешением при одновременной регистрации промахов кэша; (2) CPU считывает буфер обратной связи, прогнозирует будущее движение камеры и выдает запросы на нагрузку; (3) система ввода-вывода декодирует сжатые плитки и передает их в память GPU. Гранулярность размера плитки напрямую влияет на производительность: большие плитки уменьшают накладные расходы на таблицу страниц, но увеличивают вероятность загрузки данных, которые не будут использоваться, в то время как меньшие плитки предлагают более тонкое управление, но требуют больше циклов CPU для управления таблицей страниц. Многие реализации компромиссируют, используя размер плитки 128-256 пикселей и принимая разрешение виртуальной текстуры, которое может достигать 128k×128k пикселей или выше.

Обработка микроцепей

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

Преимущества в крупномасштабных средах

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

Реализация в современных игровых движках

Unreal Engine 4/5 — виртуальная система текстур

Epic Games представила Runtime Virtual Texturing (RVT) в Unreal Engine 4 и значительно расширила его в UE5. RVT позволяет в реальном времени запекать ландшафтные и статические сетчатые материалы в виртуальный слой текстуры, который затем можно пробовать. Это устраняет необходимость смешивать несколько входов материала на пиксель во время рендеринга, значительно снижая сложность шейдера. Система потоковой передачи в UE5 поддерживает до 16 виртуальных слоев текстуры с размерами страниц от 128 до 1024 пикселей и общим разрешением до 16384×16384 пикселей на слой. Разработчики также могут использовать систему Virtual Heightfield Mesh в сочетании с RVT для достижения высоко детализированной местности без традиционных ограничений треугольника-бюджета. Для более подробной информации см. официальная документация Unreal Engine RVT .

Усовершенствованная потоковая текстура Unity

Unity использует другой подход, называемый Texture Streaming (часть Настройки качества), который использует потоковую передачу по микрокарте, а не полную виртуальную текстурирование. Тем не менее, экспериментальная функция Unity High Definition Render Pipeline (HDRP) включает в себя экспериментальную функцию Virtual Texturing, которая работает как система обратной связи на основе плитки, аналогичная традиционным мегатекстурам. В магазине активов также предусмотрены сторонние плагины, такие как Texture Atlas Creator и Virtual Texturing для Shader Graph, которые реализуют технику таблицы страниц. Будущая дорожная карта Unity указывает на более тесную интеграцию потоковой передачи на основе плитки, особенно для мобильных и AR/VR платформ, где бюджеты памяти ограничены. Вы можете прочитать больше о потоковой передаче текстуры Unity в руководстве по потоковой передаче Unity Texture Streaming.

id Tech и Megatextures

Первоначальная концепция мегатекстуры была впервые предложена Джоном Кармаком и id Software в Quake Wars: Enemy Territory (2007) и усовершенствована в Rage (2010). Двигатель id Tech 5 использовал единую гигантскую текстуру (до 128k×128k) для всего игрового мира, с таблицей страниц аппаратного обеспечения, обновления которой были обусловлены обратной связью GPU. Практические ограничения — особенно высокая пропускная способность, необходимая для потоковой передачи жесткого диска на консольном оборудовании — были частично устранены в более поздних итерациях за счет снижения разрешения текстуры мира и использования более агрессивного сжатия. id Tech 6 (]Doom 2016) сохранил концепцию, но применил ее более избирательно, используя потоковую передачу ресурсов на основе плитки только для больших статических поверхностей, а не для всей сцены. Эта эволюция демонстрирует, что виртуальная текстура не является универсальным решением;

Проблемы и решения

Потоковые артефакты и Pop-In

Наиболее заметной проблемой с виртуальной текстурированием является появление плиток с низким разрешением, в то время как загружаются версии с высоким уровнем детализации. Это «всплывающее окно» может быть резким, если потоковая система не может идти в ногу с движением камеры. Решение включает в себя тщательные алгоритмы предварительной обработки, которые предвосхищают траекторию камеры и нагрузочные плитки задолго до того, как они станут видимыми. Многие двигатели также используют технику «размытия» или «угасания», где входящая плитка с высоким разрешением смешивается с существующей плиткой с низким разрешением на одном или двух кадрах, устраняя жесткий переход. Кроме того, небольшой набор консервативных уровней микросхем может быть постоянно постоянным для каждой плитки, чтобы гарантировать, что всегда есть обратная текстура, даже в худшем сценарии потоковой передачи.

Пропускная способность и хранение

Поскольку виртуальные текстуры огромны (часто сотни гигабайт на диске), они требуют агрессивного сжатия с потерями и эффективной компоновки на диске. Большинство реализаций используют BCn (блоковое сжатие) для данных времени выполнения и более высокую схему сжатия (например, LZ4 или Kraken) для архивного файла. Плотность сжатия должна балансировать с необходимостью высокоскоростного случайного доступа на уровне плитки. Один из подходов заключается в хранении плиток в файловой системе, которая использует пространственный хеш для размещения соседних плиток в мировом пространстве близко друг к другу на диске, сводя к минимуму поиск во время потоковой передачи. Это важно для систем на основе HDD, но даже с дисками NVMe скорость извлечения плитки может стать узким местом, если количество видимых плиток растет слишком быстро.

Память наверху таблицы страниц

Сама таблица страниц потребляет VRAM. Для виртуальной текстуры с размером 128k×128k и 128×128 плитки существует 1024×1024 плитки, что составляет около 4 миллионов записей таблицы страниц. Если каждая запись составляет 4 байта (физический адрес), таблица использует 16 МБ памяти графического процессора. Это обычно приемлемо, но если движок поддерживает несколько виртуальных текстур (например, отдельные диффузные, нормальные и шероховатые текстуры), память таблицы страниц умножается. Некоторые двигатели смягчают это, используя многоуровневую таблицу страниц (аналог виртуальной памяти ОС), которая уменьшает общее количество записей резидентов, или путем совместного использования одной таблицы страниц по нескольким каналам текстуры, объединенным в плитку RGBA.

Интеграция с отложенным рендерингом

Отложенные рендереры требуют нескольких текстур (GBuffer) на пиксель. Виртуальная текстура должна применяться к каждой из этих текстур индивидуально, что умножает количество потоковых каналов. Альтернативой является хранение идентификатора материала в одной виртуальной текстуре, а затем выборка свойств материала из отдельного набора плитки. Это отделяет сложность и позволяет потоковой системе сосредоточиться на наиболее чувствительных к полосе пропускания каналах. RVT Unreal Engine делает именно это: первый слой виртуальной текстуры удерживает базовый цвет и нормальный, в то время как дополнительные слои содержат шероховатость, металлические и недра данные по мере необходимости.

Поддержка виртуального текстурирования

Современные графические процессоры от NVIDIA (начиная с 9-й серии и особенно архитектуры Тьюринга) включают аппаратную поддержку таблиц страниц и виртуальную текстурирование на основе плитки через блок управления виртуальной памятью . GPU теперь может обрабатывать промахи страницы напрямую, отправляя неисправность в драйвер, вместо того, чтобы требовать от процессора опроса буфера обратной связи. Это уменьшает задержку и выгружает работу от процессора. Архитектура RDNA AMD также поддерживает аналогичные функции через свой движок DMA и Многоуровневая таблица страниц . Игровые движки могут использовать эти аппаратные функции, используя NVIDIA Virtual Texturing SDK или путем написания пользовательских обработчиков ошибок страницы, которые интегрируются с списком резидентных страниц GPU.

Виртуальный текстинг за пределами игр

Принципы виртуальной текстуры все чаще применяются вне развлечений в реальном времени. В архитектурной визуализации виртуальная текстура позволяет проходить через модели городского масштаба, где каждый фасад здания имеет свою фотографию с высоким разрешением. В тренажерах полета, таких как Microsoft Flight Simulator 2020, потоковая система фактически представляет собой массивную виртуальную текстуру спутниковых изображений и данных о высоте. Хотя она не идентична классической технике мегатекстуры (симулятор передает целые геометрические плитки асинхронно), она разделяет одну и ту же основную идею: только интересующая область загружается с полным разрешением, а остальная часть остается в виде данных с низким уровнем детализации.

В киноиндустрии виртуальная текстура используется в инструментах предварительной визуализации в реальном времени (previz) и на этапах виртуального производства (например, том, используемый в Мандалорский ]. Светодиодные стены отображают огромные среды, которые фактически визуализируются в реальном времени на игровых движках; детали текстуры управляются через потоковую передачу плитки для поддержания частоты кадров. Без виртуальной текстуры требования к памяти панорамы с чрезвычайно высоким разрешением, отображаемой на сотнях светодиодных панелей, были бы неосуществимы.

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

Будущее виртуального текстурирования

AI-Driven Texture Generation и потоковая передача

Одним из наиболее интересных разработок является использование моделей машинного обучения (таких как модели сверхразрешения или диффузии) для генерации или высококлассных текстурных плиток на лету. Вместо потоковой передачи плиток с высоким разрешением с диска, двигатель может передавать потоковое сжатое скрытое представление, а затем запускать эффективную нейронную сеть на GPU для реконструкции текстуры с полным разрешением. Это резко снизит требования к хранению и пропускной способности. Такие компании, как NVIDIA, уже изучают такие «нейронные текстуры» и их применение в рендеринге в режиме реального времени. Задача состоит в достижении скорости вывода в реальном времени с низким энергопотреблением, которая становится более жизнеспособной по мере созревания специализированного аппаратного обеспечения ИИ.

Полностью виртуальные материальные системы

Линия между виртуальной текстурой и виртуальным затенением размыта. Та же концепция таблицы страниц может быть расширена для хранения не только цветных текстур, но и графиков материалов, полезных нагрузок шейдеров и даже геометрических плиток (через виртуальную геометрию). Нанит Unreal Engine является прямым примером виртуальной геометрии с аналогичной организацией таблицы страниц. В будущем целые описания сцен - геометрия, материалы, текстуры и освещение - могут управляться как единый поток виртуальных ресурсов, где графический процессор запрашивает именно те данные, которые ему нужны в текущей точке зрения, и система автоматически регулирует уровни детализации во всех измерениях.

Аппаратные достижения и стандартизация

По мере того, как виртуальная текстурировка становится все более распространенной, производители аппаратного обеспечения GPU, вероятно, стандартизируют интерфейс таблицы страниц. В настоящее время каждый движок реализует виртуальную текстурирование немного по-разному, что затрудняет портирование и оптимизацию. Direct3D 12 и Vulkan имеют расширения (например, VK EXT texture compression astc hdr или D3D12 GPU VIRTUAL ADDRESS), которые могут использоваться для создания пользовательских систем виртуальной текстуры, но унифицированный стандарт позволит использовать готовое промежуточное ПО и упрощает потоковую передачу данных. API Microsoft DirectStorage в сочетании с декомпрессией GPU уже делает потоковую передачу с высокой пропускной способностью, которая требует виртуальной текстурировки гораздо более эффективной на Windows и Xbox.

Усыновление в Mobile и XR

Мобильные графические процессоры имеют ограниченные бюджеты памяти (3-6 ГБ общей системной ОЗУ) и ограниченную пропускную способность памяти. Виртуальная текстурировка может изменить здесь правила игры, позволяя мобильным играм отображать сложные среды без превышения ограничений памяти. Металлическая структура Apple включает поддержку отложенного рендеринга на основе плитки и может быть адаптирована для виртуальной текстурирования через обратную связь на уровне шейдера. Рост дополненной реальности (AR) на мобильных телефонах, где устройство должно отображать высокодетальные цифровые объекты в реальном мире, вероятно, будет способствовать дальнейшему принятию систем потоковой текстуры. То же самое относится к гарнитурам VR, которые требуют высокого разрешения с высокой частотой обновления и не могут позволить себе всплывающие текстуры; способность виртуальной текстуры предварительно приносить плитки на основе отслеживания взгляда может стать ключевым фактором комфортного VR-опыта.

Заключение

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