Коротко
- RVT создаёт текстуры на GPU во время работы и подходит для процедурных материалов и материалов со слоями.
- SVT загружает в память GPU только видимые на экране части текстур с диска — в виде тайлов.
- В материалах с текстурами SVT узлы Texture Sample должны использовать подходящий тип Virtual sampler.
- Затраты на виртуальное текстурирование можно оценить с помощью команд `stat virtualtexturing` и `stat virtualtexturememory`.
В официальной документации Epic Games по Unreal Engine виртуальное текстурирование описывается как способ работать с большими текстурами, снижая и стабилизируя расход памяти во время работы. Система включает два метода: Runtime Virtual Texturing (RVT) и Streaming Virtual Texturing (SVT). В этом руководстве рассказывается, где применять каждый из них в архитектурной визуализации и сценах реального времени, как подключать текстуры SVT к материалам и как проверять производительность. В исходной документации не указана конкретная версия Unreal Engine, к которой относятся эти сведения.
1. RVT или SVT: выбор подхода под задачу
В RVT данные текстур создаются на GPU во время работы. В документации Epic этот метод рекомендован для процедурных текстур, материалов со слоями и сложных материалов ландшафта. Среди других подходящих задач — рабочие процессы с Landscape Spline, использование decal для мешей и общее смешивание ландшафта с объектами. Это описание не означает, что decal напрямую смешиваются с ландшафтом или объектами.
SVT использует текстуры, подготовленные на диске. Система делит mip-уровни текстуры на тайлы фиксированного размера; GPU определяет, какие фрагменты нужны для видимых на экране пикселей, а затем загружает эти тайлы в кэш памяти GPU. Так при работе с текстурами высокого разрешения используются необходимые области, а не вся текстура целиком, включая невидимые части. SVT подходит для данных, подготовка которых занимает много времени, например lightmap и крупных текстур, созданных художниками.
| Метод | Поток данных | Сценарии использования, указанные в документации |
|---|---|---|
| RVT | Данные текстуры создаются на GPU во время работы. | Процедурные материалы и материалы со слоями, сложные материалы ландшафта |
| SVT | Данные текстуры загружаются с диска; необходимые тайлы помещаются в память. | Lightmap и крупные детализированные текстуры |
2. Преобразование текстур SVT и материалов
Чтобы использовать SVT, на Texture Asset должен быть включён параметр Virtual Texture Streaming. Кроме того, узлы Texture Sample в материалах, которые обращаются к этой текстуре, должны использовать подходящий тип Virtual sampler. Команда преобразования в Content Browser может включить в список не только выбранные текстуры, но и ссылающиеся на них материалы.
Выберите в Content Browser Texture Asset, который нужно преобразовать в SVT.
Щёлкните по нему правой кнопкой мыши и выберите
Convert to Virtual Texture.В окне преобразования проверьте список текстур и ссылающихся на них материалов.
Нажмите
Ok, чтобы начать преобразование.Затем убедитесь, что узлы Texture Sample в соответствующих материалах используют правильный тип Virtual sampler.
Текстуры можно преобразовать и вручную. Откройте Texture Asset и включите Virtual Texture Streaming в разделе Texture на панели Details. После этого существующие материалы, использующие эту текстуру, могут стать недействительными. В таких материалах нужно переключить узел Texture Sample на подходящий тип Virtual sampler. В примере из документации для виртуальной цветовой текстуры используется Virtual Color; тип sampler Color не подходит.
Когда виртуальная текстура добавляется в граф материала, Unreal Engine автоматически назначает подходящий тип Virtual sampler. Однако при создании Texture Sample Parameter для использования в Material Instance важен тип sampler в базовом материале: дочерние экземпляры используют тип, заданный в базовом материале. В слот параметра базового материала, у которого не выбран тип Virtual, нельзя назначить виртуальную текстуру.
3. UDIM и виртуальные текстуры lightmap
Unreal Engine может импортировать изображения с именами в формате UDIM как один Virtual Texture Asset. У файлов должны совпадать базовое имя и четырёхзначный номер координаты. В документации указан следующий формат:
BaseName.####.[Support Image Format]Например, файл MyTexture.1001.png также запускает поиск изображений с тем же базовым именем, но другими номерами координат. Разрешение изображений UDIM может различаться. В примере из источника два изображения размером 2048x2048 и два размером 128x128 расположены в сетке 2x2 и сэмплируются как одна виртуальная текстура. Согласно документации, то, что в этой сетке небольшие изображения занимают большую область, не увеличивает расход памяти на диске или во время работы.
Чтобы включить виртуальные текстуры lightmap, откройте в Project Settings раздел Engine › Rendering и активируйте Enable virtual texture lightmaps. Epic отмечает, что эта функция может повысить качество генерации lightmap и производительность потоковой загрузки. В документации также описаны консольные переменные r.IncludeNonVirtualTexturedLightmaps и r.VT.EnableLossyCompressLightmaps. Вторая включает сжатие с потерями для виртуальных текстур lightmap; отмечается, что это может снизить качество текстур lightmap.
4. Проверка производительности и распространённые ошибки
Сэмплирование виртуальных текстур обходится дороже, чем сэмплирование обычных текстур. Каждый экземпляр Virtual Texture в графе материала создаёт lookup. Стек можно объединить для экземпляров с одинаковыми UV и Sampler Source; до 8 экземпляров с общими параметрами могут составить один стек. Если UV различаются, стеки могут остаться отдельными, что приведёт к дополнительным обращениям к текстурам.
Чтобы проверить затраты в сцене, откройте консоль и выполните команду:
stat virtualtexturingКоманда показывает стоимость виртуального текстурирования в сцене в миллисекундах и счётчики, связанные с таблицами страниц. Чтобы посмотреть счётчики памяти, выполните:
stat virtualtexturememoryЧтобы включить сетку отображения mip-уровней в материалах с SVT, выполните:
r.VT.Borders 1После проверки отключите сетку:
r.VT.Borders 0Распространённые ошибки
Не исправить тип sampler: ручное преобразование может сделать материалы недействительными. Проверьте, что для узлов Texture Sample выбран подходящий тип Virtual.
Считать виртуальные текстуры бесплатными: экономия памяти не отменяет затрат на сэмплирование. Измеряйте производительность сцены с помощью команд статистики.
Не учитывать различия в использовании UV: стеки экземпляров с разными UV могут не объединиться, увеличивая стоимость материала.
Не учитывать артефакты изображения: на шумных или очень детализированных текстурах ограничение разрешения mip-уровней может вызвать aliasing или эффект муара. Реактивная загрузка SVT также может приводить к тому, что при движении камеры некоторые тайлы загружаются с задержкой и становятся видны внезапно.
В архитектурных проектах, интерьерах и archviz RVT может подойти командам, работающим с процедурными ландшафтами, поверхностями со слоями и переходами между объектами и ландшафтом. SVT может помочь управлять использованием памяти в сценах с крупными текстурами, наборами UDIM или lightmap. Перед внедрением в рабочий процесс проверьте совместимость материалов, нагрузку на GPU и загрузку тайлов при движении камеры. Поскольку в документации не указана версия, результаты также нужно проверить в используемой версии Unreal Engine.
Источники
Источников: 2Тексты источников не перепечатываются; короткие цитаты отмечены, остальное — наш пересказ и комментарий.
Для архитектурных и визуализационных бюро в Турции виртуальное текстурирование может помочь управлять памятью в сценах с крупными наборами текстур и обширными ландшафтами. Однако это не означает, что в каждом проекте автоматически ускорится рендер: необходимо учитывать дополнительные затраты на сэмплирование виртуальных текстур и влияние разных UV.
Самый надёжный подход — сначала протестировать метод на репрезентативной сцене, а не сразу применять его во всём проекте. После преобразования следует проверить совместимость материалов, счётчики памяти GPU, качество изображения с мелкими деталями и загрузку тайлов при движении камеры. Командам также стоит включить в контрольный список проверку поведения в используемой версии Unreal Engine.
Частые вопросы
Чем отличаются RVT и SVT в Unreal Engine?
RVT создаёт данные текстур на GPU во время работы. SVT загружает только видимые части текстур с диска, разбивая их на тайлы.
Как использовать текстуры SVT в материалах?
Для текстуры должен быть включён параметр Virtual Texture Streaming, а узлы Texture Sample в материале должны использовать подходящий тип Virtual sampler. В меню преобразования перечисляются и текстуры, и ссылающиеся на них материалы.
Как измерить производительность виртуальных текстур в Unreal Engine?
`stat virtualtexturing` показывает затраты сцены и счётчики, связанные с таблицами страниц. `stat virtualtexturememory` отображает счётчики памяти виртуальных текстур в сцене.



