Построение данных потоковой передачи Текстуры в Unreal Engine 4

0
6
Построение данных потоковой передачи Текстуры в Unreal Engine 4

Начиная с 4.15, каждый раз, когда экземпляр материала или Материал изменяется и заново сохраняется, он перекомпонует данные потоковой передачи текстур, относящиеся к каждой используемой текстуре. Данные по текстуре включают в себя индекс и масштаб UV-канала, где индекс UV-канала используется для выборки текстуры, а шкала – коэффициент умножения, применяемый к каналу до того, как он будет отбираться.

Это, однако, не распространяется на все случаи, поскольку выборка может основываться на мировом положении, цвете вершин меши или любой комбинации UV-каналов. Это заставит анализ не найти соответствующие данные, и движок будет зависеть от UV-канала 0 и шкалы 1.

Анализ выполняется на разных этапах, в зависимости от того, что редактируется:

  1. Материал: Выполняется, когда пользователь применяет или сохраняет изменения.
  2. Экземпляр Материала: Выполняется, когда Редактор Экземпляра Материала закрыт или когда пакет, содержащий Экземпляр Материала, сохраняется.
  3. Уровень: Выполняется для каждого используемого Материала, когда пользователь запускает “Build Texture Streaming” (Построение текстурной потоковой передачи). Это необходимо для того, чтобы каждый материал обновлялся. Причина отсутствия актуальных материалов:
    • Материалы до 4.15, не содержащие данных.
    • Материал Родитель изменился, и данные экземпляра устарели.
    • Были сделаны улучшения после того, как Материал был сохранен в последний раз.
    • Исправлена ​​ошибка.

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

  • Оценки примитива
  • Размер координаты текстуры меши
  • Шкала координат текстуры материала для выборки каждой текстуры

Когда эта информация отсутствует, будут использоваться консервативные эвристики.

Чтобы создать данные Потоковой Передачи Текстур:

  1. Нажмите стрелку вниз рядом с кнопкой Build  на панели инструментов.
  2. Нажмите Build Texture Streaming (Построить текстуру)

Построение Потоковой Передачи Текстур UE4

Это будет генерировать данные компонентов и уровня, которые будут использоваться во время выполнения.

Построение Потоковой Передачи Текстур UE4

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

Во время выполнения, если компонент использует меньше текстур, чем те, которые были использованы в процессе сборки, неиспользуемые будут игнорироваться.

Миграция потоковых данных до 4.15

Поскольку в любых материалах, отредактированных до 4.15, не было данных о потоке текстур, хранящихся в материале, у него не будет никаких данных, пока они не будут изменены и сохранены. Это включает в себя сохранение дочерних экземпляров материала. Чтобы быстро осуществить миграцию данных, вы можете использовать консольную команду BuildMaterialTextureStreamingData.

Это проанализирует все материалы, которые в настоящее время загружаются в память, и сгенерирует любые отсутствующие данные. Обновленные материалы будут отмечены для сохранения.

Изучение данных материала

Встроенные данные могут быть проверены в режиме просмотра Material Texture Scales (масштаб текстуры материала). В этом режиме просмотра будет отображаться только то, что было успешно вычислено, а любые резервные случаи будут отображаться как undefined (неопределенные). Этот режим просмотра показывает точность масштабирования материала и используется для проверки изменений в анализе. Он также определяет возможных виновников, когда есть проблемы с качеством, связанные с потоком текстур.

Чтобы проверить данные потоковой передачи материала, вы можете выбрать материал из Контент браузера или выбрать примитивы в сцене. Вкладка Texture в главном окне просмотра показывает, откуда происходит выбор, добавив «(Выбор сцены)» или «(Контент Браузер)» в конец ярлыка вкладки.

При использовании выбора сцены отдельные материалы не могут быть выбраны, и пользовательский интерфейс будет группировать данные из всех материалов.
Нет Выбора UE4Браузер Контента UE4Выбор Сцены UE4
Ничего не выбраноМатериал, выбранный из Контент браузераАктер, выбранный из сцены

Выбор из сцены

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

Одиночный Выбор UE4множественный выбор UE4
Выбор одного объекта из сценыВыбор нескольких объектов из сцены

Выбор контент браузера

При использовании выбора Content Browser текстуры идентифицируются по индексу текстуры, имени материала (если выбрано несколько Материалов) и имени текстуры. Индекс текстуры является идентификатором в каждом материале. Отображаемая точность вычисляется путем сравнения используемого значения графического процессора со значением, вычисленным в анализе материала.

Выбор CB одиночный UE4Множественный выбор CB UE4
Выбор Контент браузера отдельного МатериалаВыбор Контент браузера нескольких Материалов

Режим Все Текстуры

В режиме All Textures отображаются наихудшие случаи из всех используемых текстур. Если глобальное значение является точным (светло-серый), то все текстуры имеют точные значения. К сожалению, в этом режиме есть ограничение; тогда как если одна и та же текстура отбирается несколько раз с разными масштабами, это обычно проявляется как потоковая передача. Это связано с тем, что используется только масштаб, требующий наибольшего разрешения, а масштаб, требующий меньшего разрешения, игнорируется в анализе. Это ограничение не применяется в представлении каждой текстуры отдельно.

Точность сборки

Точность данных, вычисленных во время сборки потока текстур, может быть проверена путем просмотра режимов просмотра потоковой передачи текстуры:

Показать Точность Потоковой Передачи Текстур UE4

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

Оригинальная Текстура Сцены UE4

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

  • Красный: 2X + mips отсутствуют
  • Желтый: 1 минута отсутствует
  • Белый: хорошие данные
  • Cyan: 1 дополнительный mip
  • Зеленый: 2X + дополнительные mips

Примитивная дистанционная точность

Это показывает точность расстояния между мешью просмотра, вычисляемой стримером, по сравнению с реальным расстоянием GPU. Стример вычисляет расстояние от точки обзора до граничного прямоугольника с выравниванием по оси текстуры (AABB). Этот ограничивающий блок вычисляется в процессе сборки путем суммирования компонентных блоков AABB компонента LOD, которые используют текстуру.

Когда точка обзора приближается к AABB или входит в нее, этот режим всегда будет отображаться как 2X +, если геометрия не подходит к AABB. Это связано с тем, что вычисленное расстояние по стримеру становится нулевым, а расстояние GPU обычно отличное от нуля. Таким образом, соотношение между расчетным расстоянием стримера и расстоянием GPU становится очень большим. Это не ошибка, и в то же время нет необходимости исправлять ее.

Примитивная Точность Расстояния UE4

Отображаемое здесь значение можно отрегулировать, изменив Streaming Distance Multiplier (множитель расстояния потоковой передачи) компонента меши.

Множитель Расстояния Потоковой Передачи UE4

Точность UV-Плотности Меши

В этом режиме просмотра отображается точность размера координаты текстуры меши (texcoord), используемого стримером, сравнивается с реальным значением графического процессора. Этот размер связывает изменение texcoords единицей мирового пространства. Он используется стримером для оценки воздействия texcoord на выборку текстуры.

UV плотности UE4

Этот режим просмотра является относительно неопределенным, а когда меш имеет плохие значения, они обычно не связаны сценой, а скорее связаны мешью. Это означает, что если какая-либо меш имеет неправильные данные, то любой компонент, использующий эту меш, вероятно, также будет неправильным. Это значение можно изменить в Редакторах Статик Меши или Скелетной Меши, настроив Streaming Distance Multiplier, пока меш не окажется в диапазоне Good (хорошо).

Точность масштаба текстуры материала

Большинство текстур, используемых в материале, отбираются с использованием масштабированного значения одной из UV-плотности меши. Строка потоковой текстуры пытается вычислить, какая текстурная координата используется и какой масштаб применяется к каждой выборочной текстуре. Это может потерпеть неудачу по многим причинам, и в этом случае стример предполагает, что текстуру отбирали с помощью texcoord 0 и шкалой 1.

Материальная Текстура UE4

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

Отдельные ошибки для текстуры можно исследовать с помощью команды консоли r.Streaming.AnalysisIndex X, где X – значение от 0 до 31.

Требуемое Разрешение Текстуры

В этом режиме просмотра можно показать связь между текущим потоковым разрешением текстуры и требуемым разрешением текстуры.

Требуемое Разрешение ТекстурыUE4

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

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

Из-за всего этого данный режим просмотра лучше всего использовать для исследования поведения стримера текстуры в контролируемых средах. Полезной настройкой для этого является установка:

r.Streaming.DropMips 2

Это говорит о том, что стример поддерживает только видимые mips, поэтому отключает кеширование и предварительную выборку. Перемещая камеру вокруг, вы увидите, что стример загружает / выгружает правильные мипы в нужное время.

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

Необходимый Выбор Текстуры Res UE4

Ограничения и известные проблемы

  • Анализ поддерживает не все Материалы. В настоящее время материалы Decal (декаль) и Landscape (ландшафт) не поддерживаются. Существуют также случаи, когда движок не может сгенерировать шейдер, который используется для анализа. В этом случае примитивы будут видны с однородным темно-серым цветом. Подробные журналы всех проблем можно включить с помощью команды консоли: log TextureStreamingBuild level all.
  • Экземпляры материалов могут иметь устаревшие данные, если их родители были изменены и сохранены, а дочерние экземпляры не были сохранены. Это связано с тем, что данные потоковой передачи текстур хранятся в материалах, а изменение родительских материалов не вызывает повторное сохранение экземпляров дочерних материалов.
  • Во время выполнения движок использует имена текстур для доступа к потоковым данным материала. Это делается для предотвращения ссылок на активы во время выполнения, при этом обеспечивая хорошую производительность. Это означает, что если в материале используются несколько текстур с одинаковыми именами, требуемое разрешение, исходящее из обоих данных, будет применяться к обеим текстурам.
  • Шейдеры, используемые в режиме просмотра Масштабирования Текстур Материала, не являются постоянными и могут отсутствовать или удаляться, если выполняются определенные виды операций, такие как компиляция шейдеров или загрузка карт. Выбор режима просмотра снова приведет к восстановлению отсутствующих шейдеров.