Nanite обещает освободить от подсчёта полигонов: закидывай хоть скан на десять миллионов треугольников, движок разберётся. На деле у Nanite есть требования к модели. В основном так и есть, но ровно до момента, когда модель оказывается из тех, что этот механизм не берёт, и вы получаете либо отказ, либо худшую производительность, чем без него.
Посмотрим по пунктам, что Nanite делает с геометрией, какие модели ему подходят, какие ломаются, и как понять до импорта, стоит ли его включать.
Что он делает на самом деле
Механизм перестраивает модель в иерархическую структуру из групп треугольников и подгружает только те, что видны и нужны при текущем размере объекта на экране.
Отсюда главное свойство: стоимость отрисовки зависит не от числа треугольников в модели, а от числа пикселей, которые она занимает. Миллион треугольников в дальнем плане стоит примерно столько же, сколько тысяча.
Второе следствие: уровни детализации строить вручную не нужно, механизм делает это сам и плавно.
Третье: модель хранится в специальном формате, и файл проекта заметно растёт.
Основы движка и место этого механизма в нём разобраны в материале про Lumen и Nanite в UE5, здесь про практические требования к моделям.
Какие модели подходят идеально
Плотная непрозрачная геометрия. Скалы, статуи, архитектурные элементы, отсканированные объекты. Именно под них механизм и создавался.
Высокополигональные скульпты. Можно не делать ретопологию для статичных объектов: скульпт идёт в движок как есть.
Модульные наборы. Стены, колонны, детали окружения с большим числом повторов.
Модели из фотограмметрии. Тот самый случай, когда миллионы треугольников это норма.
Общий признак: объект статичный, непрозрачный, с плотной равномерной сеткой.
Что ломается
Прозрачность. Стекло, вода, листва с прозрачностью в текстуре. Механизм рассчитан на непрозрачную геометрию, и такие материалы либо не поддерживаются, либо работают с ограничениями.
Деформируемая геометрия. Персонажи со скелетом долгое время не поддерживались вовсе. Даже там, где поддержка появилась, она имеет ограничения и не всегда выигрышна.
Очень мелкие объекты в большом количестве. Трава, мелкий мусор. Накладные расходы на структуру данных превышают выигрыш.
Плоские поверхности из двух треугольников. Оптимизировать там нечего, а расходы на структуру остаются.
Модели с открытыми краями и дырами. Формально работают, но качество упрощения падает.
Требования к сетке
Что стоит проверить в модели до импорта.
Равномерная плотность. Механизм работает лучше, когда треугольники сопоставимы по размеру. Сетка с гигантскими полигонами в одном месте и мелкими в другом упрощается хуже.
Замкнутость. Дыры и немногообразная геометрия ухудшают результат. Проверять стоит до импорта, и порядок такой проверки есть в материале про починку сетки.
Корректные нормали. Вывернутые грани дадут те же проблемы, что и без этого механизма, и разбор причин есть в материале про нормали при импорте в UE5.
Разумное число материалов. Каждый материал это отдельная группа, и их избыток снижает эффективность.
Что происходит с UV и текстурами
Распространённое заблуждение: раз ретопология не нужна, то и развёртка не нужна.
Развёртка нужна, потому что текстуры накладываются по ней как обычно. Отличие в том, что её можно сделать автоматически: качество раскладки для плотной модели менее критично.
Второй момент: карты нормалей для таких моделей часто не нужны вовсе. Детали, которые обычно запекают в текстуру, здесь присутствуют в самой геометрии.
Это и есть главная экономия времени: пропадает этап ретопологии и запекания, который на сложном объекте занимает больше времени, чем сам скульпт.
Память и размер проекта
Обратная сторона, о которой узнают поздно.
Модель в этом формате занимает заметно больше места на диске, чем обычная. Проект из сотен таких моделей вырастает в разы.
Оперативная память тоже расходуется: структура данных должна быть доступна для подгрузки.
Практическое следствие: включать механизм для всех моделей подряд не стоит. Для простых объектов это чистые накладные расходы.
Когда лучше без него
Честный список случаев.
Простые низкополигональные модели. Ящик из двенадцати треугольников не нуждается в оптимизации.
Персонажи и всё анимируемое. Даже при наличии поддержки обычный путь с ретопологией предсказуемее.
Растительность с прозрачностью. Классические подходы работают лучше.
Мобильные платформы и слабое железо. Механизм требователен, и на слабых устройствах он недоступен или невыгоден.
Объекты, которые всегда далеко. Проще сделать простую модель, чем платить за структуру данных.
Как проверить, выгодно ли включать
Способ, который занимает десять минут и отвечает точно.
Импортировать модель дважды: с включённым механизмом и без.
Поставить обе в сцену и посмотреть на счётчики производительности в типичном для проекта ракурсе.
Сравнить три величины: время кадра, объём используемой памяти и число вызовов отрисовки.
Если выигрыша по времени кадра нет, а память выросла, механизм для этой модели не нужен.
Проверять надо именно в своей сцене: на одиночном объекте в пустом мире результат ничего не скажет.
Что происходит с исходной сеткой
Полезно понимать, чтобы правильно готовить модели.
При импорте геометрия перестраивается: треугольники группируются в кластеры, и для каждого кластера считаются упрощённые версии. Исходная сетка сохраняется как самый детальный уровень.
Отсюда важное следствие: качество упрощения зависит от равномерности распределения треугольников. Сетка, где рядом находятся гигантские и микроскопические полигоны, группируется плохо, и на средних расстояниях появляются артефакты.
Второе следствие: механизм не исправляет исходные проблемы модели. Дыры остаются дырами, вывернутые нормали остаются вывернутыми, просто заметить их становится сложнее из-за автоматического упрощения.
Практический вывод: подготовка сетки перед импортом остаётся обязательной, и это та же подготовка, что и для обычного пайплайна.
Отладка: что смотреть
В движке есть режимы визуализации, показывающие работу механизма изнутри.
Отображение кластеров. Показывает разбивку модели на группы. Неравномерная разбивка означает проблемы с исходной сеткой.
Отображение треугольников. Видно, сколько геометрии реально отрисовывается при текущем ракурсе. Именно это число определяет стоимость, а не общее число треугольников в модели.
Обзор сцены. Показывает, какие объекты используют механизм, а какие нет. Полезно для проверки, что настройки применились ко всему, к чему планировалось.
Смотреть на эти режимы стоит после каждого крупного импорта, а не только при появлении проблем.
Совместимость с другими механизмами
Практические взаимодействия, которые стоит знать.
С динамическим освещением. Работают вместе и рассчитаны друг на друга.
С физикой. Коллизии строятся отдельно и по упрощённой геометрии. Плотная модель не означает точных коллизий: их всё равно надо задавать.
С прозрачными материалами. Ограниченно, как сказано выше.
С растительностью. Системы распределения работают, но выгода зависит от конкретной модели.
Ошибки, которые видно сразу
Карточки
Как это меняет пайплайн
Практический итог для художника.
Для статичного окружения появляется короткий путь: скульпт или скан, автоматическая развёртка, импорт. Ретопология и запекание пропускаются.
Для персонажей и анимируемых объектов пайплайн остаётся прежним: ретопология, развёртка, запекание, уровни детализации.
Для растительности и прозрачных объектов тоже прежним.
Отсюда практический вывод: механизм меняет работу с окружением и почти не затрагивает работу с персонажами. Это стоит учитывать, планируя, какие навыки осваивать.
Частые вопросы
Правда ли, что можно не думать о полигонах?
Для статичного непрозрачного окружения во многом да. Для всего остального ограничения остаются, и бюджет полигонов по-прежнему имеет значение.
Нужна ли ретопология при использовании этого механизма?
Для статичных объектов нет. Для анимируемых да, потому что деформация требует осмысленной топологии.
Почему модель стала выглядеть хуже после включения?
Обычно из-за неравномерной сетки или проблем с материалами. Проверьте плотность треугольников и число материалов на объекте.
Работает ли это на мобильных устройствах?
Поддержка ограничена и зависит от платформы и версии движка. Для мобильных проектов рассчитывать на этот механизм как на основу не стоит.
Можно ли включить механизм для части модели?
Настройка применяется к объекту целиком, а не к его частям. Если в модели есть и плотная непрозрачная геометрия, и прозрачные элементы, их стоит разделить на отдельные объекты: для первого включить механизм, для второго оставить обычный путь. Это типичная ситуация с техникой, где есть корпус и стёкла.
Увеличивает ли это время загрузки уровня?
Да, из-за большего объёма данных. Для крупных проектов это заметно, и оптимизировать приходится уже загрузку, а не отрисовку.
Прогоните свою самую тяжёлую модель и посмотрите на статистику в движке. Она покажет, работает Nanite на ней или молча откатывается на обычную геометрию.
