Не нужно считать полигоны? Что такое Nanite и как ей пользоваться

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

Авторы движка рассказали об этом у себя на канале, а мы перевели.

Embedded Image
Embedded Image

Отображение мешей и превью LOD-кластеров

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

Embedded Image
Embedded Image

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

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

Nanite учитывает разрешение экрана и расстояние до меша. Для сохранения детализации она может создавать треугольники размером с пиксель.

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

Загруженный в UE5 меш можно подключить двумя способами.

Первый:

Найдите меш в Content Browser или дважды щёлкните на него в панели Details

Введите в поиске «Nanite»

Поставьте галочку напротив Enable Nanite Support

Нажмите на кнопку Apply Changes — теперь к мешу подключена Nanite.

Второй вариант: кликните правой кнопкой мыши на меш, откройте пункт Asset Actions и выберите Bulk Edit via Property Matrix.

Настройки импортируемого меша

Импортируемый меш можно подключить только одним способом.

Дождитесь загрузки окна импорта или откройте его вручную из Content Drawer

Поставьте галочку напротив Build Nanite

Снимите галочку с Generate Lightmap UVs, если используете динамическое освещение

В пункте Normal Import Method выберите Import Normals

Выключите Compute Weighted Normals, если не хотите, чтобы они были автоматически сгенерированы

Нажмите Import

Чтобы проверить подключение Nanite, откройте меш и поменяйте View Mode: с Lit на Wireframe. Если меш не рендерится, Nanite подключена.

Embedded Image
Embedded Image

Меш не рендерится, значит Nanite подключена на меш

После подключения Nanite в панели Details вы увидите две новые настройки: Proxy Triangle Percentage и Position Precision.

Настройки Nanite в панели деталей

Proxy Triangle Percentage — процентная доля треугольников в прокси меше, генерируемом Nanite.

Прокси — это отображение исходного меша в низком разрешении. Он встанет вместо хайполи при:

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

Лайтмэппинге. Прокси будет использоваться вместо хайполи при запекании света

Поддержке игровых платформ. Если вы собираетесь выпускать игру на платформах, не поддерживающих Nanite, тогда вам понадобится откат к LOD 0

Для просмотра прокси откройте Show и выберите Nanite Proxy.

Embedded Image
Embedded Image

Смотрим на Nanite Proxy

Если вам не нравится результат Proxy Triangle Percentage, есть два варианта действий.

Первый: можно поменять процентную долю прокси.

По умолчанию она выставлена на 0, и мешу присваивается 2000 трисов. Число может быть ниже, если у меша изначально меньше треугольников — тогда количество трисов не изменится.

Embedded Image
Embedded Image

Количество треугольников при значении Proxy Triangle Percentage — 0.0 и 1.0

Если в настройках поменять значение с 0.0 на 1.0, прокси меш будет создан на основе 1% геометрии оригинального меша. У хайполи на скриншоте 647 000 треугольников, поэтому у прокси их 6470.

Второй: можно установить использование обычных LOD.

Уберите галочку с Nanite Proxy в Show и откройте LOD Settings в деталях меша. Для примера используются базовые настройки LOD для движка, но их можно поменять вручную или импортировать кастомизированные настройки.

Embedded Image
Embedded Image

Скриншоты настроек LOD-уровней

Чтобы выбрать определённую платформу, нажмите на иконку «+» у настройки Minimum LOD. Проверьте, чтобы значение Minimum LOD было 1.

Position Precision — точность положения вершин.

У ассетов Nanite высокая компрессия, поэтому миллионы треугольников не переполнят жёсткий диск игрока. Position Precision позволяет установить качество компрессии. По умолчанию стоит автонастройка. Она подбирает наилучшее значение Position Precision для вашей модели, основываясь на размере и плотности треугольников меша.

Если вы заметили ошибку или проблему в ассете, можете поменять настройки, выбрав другое значение Position Precision.

При работе с материалами важно учесть:

Материал не может быть двухсторонним и использовать режим смешивания Opaque

В моделях затенения нельзя использовать настройки World Position Offset или Pixel Depth Offset

Нельзя использовать Opacity и Opacity Masking с разными режимами смешивания

Если использовать эти настройки, меш будет черным при рендере.

Embedded Image
Embedded Image

Рендеринг Nanite не поддерживает:

Разделённый экран (сплит скрин)

Прямой рендеринг (Forward Rendering)

Множественную выборку сглаживания (MSAA — Multisample anti-aliasing)

Стенсил-буфер (Stencil Buffer)

Для предварительного просмотра меша откройте View Mode и Nanite Visualization. Чтобы увидеть все режимы отображения, нажмите Overview.

Embedded Image
Embedded Image
Embedded Image
Embedded Image
Embedded Image

Режимы отображения мешей Nanite

Mask. Режим показывает используемые меши

Triangles. В этом режиме отображается количество треугольников, которые рендерятся для сцены. При приближении камеры к мешу треугольников становится больше. Их количество перестанет расти после достижения максимального уровня детализации. Чем дальше игровая камера от меша и чем меньше места он занимает на экране, тем меньше становится количество треугольников и тем больше они становятся по размеру

Clusters. В этом режиме кластеры треугольников окрашиваются в разные цвета. Чем меш ближе, тем кластеры больше

Primitives. Режим раскрашивает копии меша одним цветом

Instances. В этом режиме копии меша отображаются разными цветами

Overdraw. Отображает наслоение геометрии

Material ID. Каждый материал отображается отдельным цветом на меше

Lightmap UV. Режим отражает координаты развертки меша Nanite

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

Пайплайн с фокусом на запекании

В новом процессе создания модели для Nanite отбрасывается не хайполи модель, а лоуполи модель.

Пайплайн с фокусом на хай поли

Сначала создаётся лоуполи меш, с которого делают развёртку. Потом из лоуполи создаётся хайполи меш с высокой детализацией, который запекается и используется на финальном ассете. Вы можете использовать эти карты в качестве масок для смешивания разных слоев, как в Quixel’s Mixer или Substance Painter. Карта нормалей не нужна.

Сложная часть при построении игровых ассетов в таком высоком качестве — UV-развёртка.

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

Embedded Image
Embedded Image

Для ассета основой послужил цилиндр, которому соответствует развёртка

Второй вариант: Сохраните сабдивы модели и сделайте развёртку самого низкого уровня. Воспользуйтесь модификатором для создания сабдивижн уровней в Blender. Чтобы сохранить исходную форму, их можно оставить модификатором.

В этом ассете много разных форм. На каждую наложены разные модификаторы, но развёртка показывает базовый сабдив, это облегчает работу

Если делаете развёртку этим методом, не удаляйте сабдив — оставьте его как модификатор. После экспорта меша в FBX примените модификатор.

Развертка самого низкого уровня сабдива в блендере

Чтобы сделать развёртку, нужно перенести модель в Blender, открыть UV Edits, выбрать швы и сделать развертку формы. Далее экспортировать в Zbrush, перезаписать существующий файл OBJ, импортировать его обратно и применить к мешу текстуры.

Embedded Image
Embedded Image

Поднимаясь в Zbrush выше по сабдивам (с 0 до 7) — текстура работает!

Третий вариант: создайте новый меш, сделайте развёртку в Blender и расположите шеллы. Вернувшись в Zbrush, примените сабдивижн к мешу и спроецируйте развертку на исходную хайполи.

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

В режиме Edit Mode в Blender выберите весь объект и Smart UV Project в выпадающем меню, нажмите OK в новом окне, и через несколько секунд будет готова развёртка объекта.

Embedded Image
Embedded Image

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

Embedded Image
Embedded Image

Слишком много шеллов

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

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

В примере информация о масках запекается в геометрию, чтобы смешать несколько world space текстур: развёртки не нужны, потому что карты можно запечь в вертексные цвета.

Embedded Image
Embedded Image

Все три ассета используют одну текстуру, но получаются разные бленды в зависимости от используемых вертексных цветов. Это сохраняет большой объем памяти: нужно экспортировать только одну текстуру, без дополнительных. Но придётся создать несколько базовых типов материалов. В примере это металл, окрашенный металл и ржавчина.

После запекания Ambient Occlusion, толщины (Thickness) и кривизны (Curvature) в каналы R, G, B вертексных цветов смешайте эти три базовых материала.

Embedded Image
Embedded Image

Параметры трех базовых материалов

Теперь можно контролировать плотность нанесения краски (Strength) и насыщенность краски (Falloff) и рандомизировать неровности поверхности (Noise Scale).

Можно отключить слой краски, оставив только два слоя: металл и ржавчину.

Не бойтесь экспериментировать со значениями.

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

По возможности объединяйте геометрию. Это даст возможность Nanite лучше проработать LOD-ы снизить геометрию более эффективно

Всегда проверяйте группы сглаживания. Убедитесь, что они включены, так как это будет влиять на генерирование LOD-ов

Старайтесь сохранить уровни сабдивижн, и делайте развертку как можно раньше, это сильно облегчит вам жизнь

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

Nanite — новый мощный инструмент. Его легко подключить на проект, и он работает с любым мешем. Рендер происходит быстрее и занимает меньше памяти. Можно использовать прокси Nanite или импортированные LOD-ы. Он сжимает геометрию, чтобы размер файла был меньше, с ним миллион треугольников — всего 14 мегабайтов на диске.

Пока Nanite находится в раннем доступе и над многими функциями ещё работают.

Подробная документация о Nanite

Демо-версия «Valley of the Ancients» в Epic Launcher

Комментарии: 0