Обзор потоковой передачи Текстур в Unreal Engine 4

0
4
Обзор потоковой передачи Текстур в Unreal Engine 4

Система потоковой передачи текстуры, или другими словами – стример, является частью механизма, ответственного за увеличение и уменьшение разрешения каждой текстуры. Это позволяет вам иметь хорошее визуальное качество при эффективном управлении доступной памятью. Это частично выполняется с помощью Mips или Mipmaps (мипкартами), которые являются предварительно вычисленными последовательностями изображений для ваших разрешений текстуры. Вы можете воспринимать их как LODs для ваших текстур. Для получения дополнительной информации о Mips вы можете прочитать об этом на нашей странице Поддержки и Настройки Текстуры.

У стримера есть своя точка зрения на мир, и его цикл обновления состоит из:

  1. Обновление картины мира
  2. Вычисление, разрешение которого было бы идеальным для каждой текстуры
  3. Выбор того, какое разрешение на самом деле возможно на основе размера пула (общего фонда) потоков
  4. Выбор текстур для обновления
  5. Создание запросов на загрузку / выгрузку

Чтобы достичь этих задач, стример использует рабочий поток async для уменьшения рабочей нагрузки в игровом потоке, так что в цикле обновления игры необходимо выполнить только первую и последнюю задачи. Картина мира состоит из списка всех текстур, используемых каждым примитивным компонентом, и для каждого мирового масштаба и размера мира в texel. Из этой информации и заданной точки зрения можно вычислить, какое разрешение потребуется для получения хорошего коэффициента текселя на пиксель. Затем учитывается дополнительная информация, например, такая как, был ли этот компонент фактически видимым на экране или нет. Это в конечном итоге определяет идеальное разрешение для каждой текстуры. Затем стример вычисляет, достаточно ли пула потоков для хранения этих разрешений. Если нет, стример будет уменьшать запланированное качество для выбранных текстур, отбрасывая один миг за раз, до тех пор, пока планируемое решение не попадет в бюджет.

Порядок обработки текстур при отбрасывании mips определяется приоритетом хранения и следует следующим правилам:

  1. Сохранять текстуры ландшафта, текстуры принудительной загрузки и текстуры с уже отсутствующим разрешением
  2. Хранить mips, которые видны на экране
  3. Сохранять характер текстур и текстуры, которые не занимают много памяти
  4. Отбрасывать mips, которые не видны, отбрасывая последние недавно увиденные

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

  1. Сначала загружать видимые mips 
  2. Сначала загружать текстуры принудительной загрузки, текстуры ландшафта и текстуры персонажа
  3. Загружать текстуры, которые далеки от их целевых разрешений в первую очередь
  4. Текстуры, которые не видны, загружаются последними

Последний шаг – это создать пакет запросов обновления, каждый из которых либо увеличивает, либо уменьшает текущее разрешение текстуры. Объем памяти, обновляемый для одной партии, ограничен временным размером пула, чтобы поддерживать минимальное количество запросов в процессе.

Усовершенствования в 4.15

Система Texture Streaming (стриминг текстуры) оптимизирована для уменьшения использования CPU (центрального процессора), использования памяти и времени загрузки при одновременном создании артефактов с низким разрешением и автоматической обработке ограничений различных диапазонов памяти на разных платформах.

  • Улучшения использования памяти Текстуры
  • Улучшение времени загрузки Текстуры
  • Улучшение для времени процессора:
    • Время обновления игрового потока сокращается на 50%
    • Установка обработки текстуры для потоковых уровней снижены до 98%
  • Уменьшение артефактов низкого разрешения
  • Автоматическое бюджетирование памяти
  • Режимы просмотра визуализации отладки потоковой передачи текстуры 
    • Примитивная дистанционная точность
    • Точность UV-плотности меши
    • Точность веса текстуры материала
    • Требуемое разрешение текстуры

Чтобы узнать больше об этих последних усовершенствованиях и методах отладки для ваших игр, ознакомьтесь с нашим следующим разделом Building Texture Streaming Data (Построение данных потоковой передачи текстуры) и Reporting Texture Streaming Metrics.