Как сделать статик меш в ue4

Обновлено: 04.07.2024

Здесь я опишу свой опыт работы с моделью когда готовлю её для текстурирования в Substance Painter. И покажу начало работы в самом Сабстенсе.
Я сам только пару месяцев назад впервые открыл Substance Painter. Очень понравилось как быстро и интуитивно там происходит процесс текстурирования. Но вначале были проблемы с пониманием импорта 3D моделей и тем, какие модели Сабстенс от вас ожидает. Сразу оговорюсь, что вариантов подготовки модели и импорта существует несколько. Я остановлюсь только на одном — на самом простом и быстром, на мой взгляд.

Основной принцип

При запекании текстур в Substance Painter вы можете запечь такой канал как ID. Канал содержит уникальный цвет (маску) для каждой части модели, которые вы сами определите. Один цвет — один уникальный идентификатор. В последствии, когда вы будете перетягивать материалы Сабстенса на модель, то будете выбирать к какой именно части модели применится эта текстура:

Собственно, к этому процессу мы и будем готовить 3Д модель.

Разрезаем модель на куски

Вы закончили вашу модель и, допустим, она выглядит как-то так:

Теперь нам нужно разделить (или наоборот, сгруппировать) её на отдельные меши, каждому из которых Substance Painter присвоит уникальный ID (маску).

Я знаю, что моя модель должна содержать 5–6 уникальных материалов. Можно сгруппировать меши таким образом, чтобы их осталось 6 — по одному на каждый материал (перед этим лучше сохранить копию оригинальной несгруппированной модели).

На картинке выше видно что я уменьшил количество объектов. Я разукрасил модель только для того чтобы вы видели как сгруппированы меши. Раскрашивать модель не нужно.

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

разделяем меш на отдельные объекты с помощью Split

Выше я написал, что сделаю 6 отдельных мешей (объектов) для каждого материала. Но это не обязательно. Делайте на своё усмотрение. Я всегда группирую объекты так, как мне кажется модель могла бы быть текстурирована в принципе, даже если я это не планирую сейчас. Руководсвуюсь простой логикой и интуицией. Например, имеет смысл сделать все 3 вентиля в моём объекте как 3 разных меша. Потому что может быть такое, что придут правки от клиента, который скажет, что хотел бы видеть эти три вентиля не одного цвета, а трёх разных цветов.

В итоге я остановился на такой группировке мешей, которая самая оптимальная, на мой взгляд. Потому что тут не слишком много отдельных объектов (будущих ID). Но также учтены все части модели, которые могли бы быть текстурированы отдельным материалом в будущем:

Повторюсь: такую раскраску модели в Синеме делать не нужно. Я это делаю только для наглядности.

Экспортируем лоу-поли модель в FBX

При импорте FBX файла Substance Painter не учитывает иерархию мешей в вашей сцене. Все Null объекты игнорируются, как и Subdivision:

Настройки экспорта

настройки FBX экспорта

Экспортируем хай-поли модель в FBX

запекание высокополигональной модели

И опять экспортируем её с теми же настройками с которыми экспортировали лоу-поли. Как всегда, рекомендуется сохранить копию лоу-поли модели перед тем как делать хай-поли.

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

Начало работы в Substance Painter

Импортируем 3Д модель в Substance Painter

Открываем Сабстенс и перетаскиваем в его окно лоу-поли модель (FBX). Можно пойти через меню File > New, то тогда ещё нужно будет вручную указать путь к файлу (кнопка Select. ).

Откроется окно New Project. В нём выбираем шаблон (1) на своё усмотрение и разрешение текстуры (2) для работы во вьюпорте Сабстенса, также, на своё усмотрение. Ниже, если ваша модель, вдруг, не имеет UV развёртки, поставьте галочку Auto-unwrap (3):

создание нового проекта в Substance Painter

Запекаем текстурные карты

Bake Mesh Maps

В открывшемся окне выбираем разрешение текустуры (1) и добавляем нашу высокополигональную (хай-поли) модель (2):

разрешение текустуры и хай-поли

ID и Mesh ID / Polygroup

В тех туториалах, которые мне попадались, люди часто используют Vertex Color или Material Color для генерации ID. Но, как по мне, то разбить/сгруппировать модель на отдельные меши легче, чем возиться с тегами Vertex Color в Синеме или создавать уникальные материалы для каждого будущего ID.

Начинаем текстурировать

Среди запечённых карт вы увидите и карту с ID. Вот так она выглядит в моём случае:

😊

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

@Aleksei Леш!!спасибо тебе огромное!!Ты молодец за такое развернутое объяснение!!Очень полезно при начале иметь подобный алгоритм!Только один вопрос: фактически если мы хотим текстурировать ОДНУ 3Д модель с сабдивом нам нужно:1.Лоу поли модель,которую сохраняем bla-bla-bla_low_poly.fbx и 2.Вторая версия этой же модели:c накинутым сабдивом и сохраненым current state to object и поделенным на то количество мешей что и материалов bla-bla-bla_high_poly.fbx. где хай и лоу чтобы тупо мы сами не путались для себя

si vis pacem-para bellum

Да, всё правильно.
Только хай-поли делать не обязательно. Может устраивать даже просто лоу-поли запечка, без хай-поли. Например, если нужно сделать несколько десятков второплановых ассетов, то лишние 10 кликов на каждую модель — это уже очень много времени. При том, что разницы никто не заметит.
Две версии — это как рекомендация, которую вы используете на своё усмотрение.

Epic Games провела 26 мая презентацию Unreal Engine 5, на которой показала новые возможности движка, включая системы по работе с ассетами, светом, анимациями и звуком. Старые системы и инструменты тоже получили множество улучшений.

Уже можно скачать альфу UE5 и семпл проект Valley of the Ancient.


Рекомендуемые системные требования для демки: 12-ядерный процессор с частотой 3,4 ГГц, видеокарта NVIDIA RTX 2080 или AMD Radeon 5700+ XT, оперативная память от 64 ГБ.

Можно уже начинать изучать доки. Подробно описаны все ключевые моменты.

Наконец-то обновили интерфейс редактора.


Nanite

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


Работает с новым внутренним форматом мешей, который сильно сжат и поддерживает потоковую передачу с автоматическим уровнем детализации. LOD’ы самим больше делать не надо.

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

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

Для прокси-мешей можно настроить уровень детализации.


Прокси-меши используются для коллизий на уровне полигонов, трассировки лучей, запекания света и другого. При этом по умолчанию используются авто-генерируемый LOD0, что весьма странно 🤔

По крайней мере, есть возможность выбрать кастомный прокси и настроить традиционные LOD’ы.

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

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



Если верить доке, то у Nanite меша и качество лучше, и размер меньше.


Антиалиасинг система Temporal super resolution позволяет при меньших затратах по ресурсам получить почти нативные 4K по цене 1080p.

Системы для работы со светом и атмосферой

Новая система для глобального освещения Lumen позволяет настроить реалистичный реалтайм свет. Если ещё совмещать с фотореалистичными ассетами из Мегасканс, то картинка просто на новый уровень выходит.

Lumen Global Illumination заменяет Global Illumination Screen Space (SSGI) и Distance Field Ambient Occlusion (DFAO). Lumen Reflections заменяет Screen Space Reflections в Unreal Engine 4.

Lumen генерирует Surface Cache для ближайших поверхностей сцены (где-то 200 метров от камеры). За этим расстоянием работает только screen traces.


При трассировке сначала прогоняется Screen Tracing, т. к. он меньше жрёт ресурсов.



Потом уже Lumen Ray Tracing, состоящий из двух методов: программная трассировка, работающая на самом широком спектре железа и платформ, и аппаратная трассировка лучей, для работы которой требуются поддерживаемые видеокарты и системы.

По умолчанию работает Signed Distance Fields. Требует поддержка Shader Model 5 у железа. Много ограничений: работает только со статикой, World Position Offset не поддерживается, с прозрачностью проблемы.

Hardware Ray Tracing поддерживает больший спектр доступной геометрии. Проседает, если больше 100 000 инстансов. Динамическая деформация мешей может загнать фпс в 0.

Для работы Lumen нужна карта NVIDIA RTX-2000 серии и выше или AMD RX-6000 и выше.

Система для атмосферы позволяет легко всё настраивать, в том числе и объёмные облака. На уровне настроек куча модификаторов и параметров, которые позволяют твикнуть всё.

Работа с фотореалистичными ассетами

Quixel Bridge теперь полностью интегрирован в движок.


Можно просто перетаскивать ассеты мышкой из браузера ассетов и сразу приступать к работе.

Главная цель состояла в том, чтобы художникам было проще совместно работать и обмениваться ассетами.

Работа с миром и уровнями

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

Их можно загружать/выгружать в редакторе кусками, что кучу времени и ресурсов при работе в редакторе экономит.

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


World Partition позволяет стримить из коробки. Ассеты вне установленного радиуса выгружаются и заменяются другими с меньшим разрешением.

Это всё на уровне конфигов вынесено. Можно настроить под свой проект.

Система Data layers позволят художникам работать вместе над одной сценой и переосмыслить её, создавая различные её вариации.

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

Как пример, переход в другой мир через портал. Правда, тут, всё же, есть переходный момент с подзагрузкой. Но, всё равно, довольно резво.

Анимация

Появился новый фреймворк Game Feature Plugins, который позволяет разбить контент на модули. Может связать экшены, анимации, другие системы.


К примеру, в другом измерении у ГГ меняется абилка. Это всё задаётся на уровне конфига.


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

Animation Motion Warping позволяют адаптировать рут анимации под мир. Можно переиспользовать одни и те же элементы.

Позволяет настроить нотификации для реакции на трансформы из блюпринтов.


Система реагирует на высоту препятствий, поворот персонажа и прочее.

Control Rig позволяет редактировать анимации прям в движке.

Full body IK даёт возможность настроить анимацию в ответ на какие-то внешние факторы: позиция противника и т. п. Всё на уровне конфига.

Например, настроить направление и дальность атаки в зависимости от положения ГГ.


С помощью новой системы Meta sounds можно теперь использовать всю мощь редактора материалов для создания сложного процедурного звука.


Хорошо забытое старое

Но это не только про новые фичи. Всё, что вам нравилось в UE4, тоже проапгрейдили. Niagara particles, visual effects, chaos physics, блюпринты получили множество улучшений.

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

Новые инструмента для отладки появились: Memory Insights для поиска утечек, Unreal Turnkey, который позволяет настроить проект под различные платформы, чтобы потом любой участник проекта одним нажатием мог поднять у себя нужное окружение.

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

Уже можно скачать альфу UE5 и семпл проект Valley of the Ancient.


Саму презентацию можно посмотрел на канале Unreal Engine.

Запись опубликована 26.05.2021 автором Suvitruf в рубрике Gamedev с метками unreal engine, Unreal Engine 5.


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

Наиболее яркими примерами игр с хорошей разрушаемостью можно назвать Red Fraction: Guerrilla с ее возможностью пробивать тоннель сквозь Марс, Battlefield: Bad Company 2, где при желании можно превратить весь сервер в пепелище, и Control с его процедурным разрушением всего, что попадается на глаза.

В 2019 году Epic Games представила демо новой высокопроизводительной системы физики и разрушений

Требования

Начнем с перечисления того, чего мы хотели бы достичь:

  • Художественный контроль. Мы хотим, чтобы наши художники могли создавать разрушаемые объекты, как им угодно.
  • Разрушения, не влияющие на геймплей. Они должны быть чисто визуальными, не нарушать ничего, что связано с игровым процессом.
  • Оптимизация. Мы хотим иметь полный контроль над производительностью и не допустить снижения производительности ЦП.
  • Простота установки. Настройка конфигурации таких объектов должна быть понятна художникам, поэтому необходимо, чтобы она включала только необходимый минимум шагов.

За референс в этой статье было взято разрушаемое окружение из Dark Souls 3 и Bloodborne.

image

Основная идея

На самом деле, идея проста:

  • Создаем видимую базовую сетку;
  • Добавляем скрытые части сетки;
  • При разрушении: скрываем базовую сетку -> показываем ее части -> запускаем физику.

image

image

Подготовка ассетов

Для подготовки объектов будем использовать Blender. Для создания сетки, по которой они будут разрушаться, используем аддон Blender под названием Cell Fracture.

Включение аддона

Сначала нам понадобится включить аддон, поскольку по умолчанию он выключен.

image


Включение аддона Cell Fracture

Поиск аддона (F3)

Затем включаем аддон на выбранной сетке.

image

Настройки конфигурации

image

Запуск аддона

Посмотрите видео, сверьтесь с настройками оттуда. Убедитесь, что вы правильно настроили свои материалы.

Выбор материала для разворачивания разрезанных частей

Затем создадим UV-карту для этих частей.

image

image

Добавляем разделение границ (Edge Split)

Edge Split исправит затенение.

image

Модификаторы ссылок

Их использование позволит применить Edge Split ко всем выбранным частям.

image

Завершение

Вот как это выглядит в Blender. По сути, нам не нужно моделировать все части по отдельности.

image

Реализация

Базовый класс

Наш разрушаемый объект — это Актер, у которого есть несколько компонентов:

  • Корневая сцена;
  • Static Mesh — базовая сетка;
  • Бокс для столкновений;
  • Бокс для перекрытий;
  • Радиальная сила.

image

Изменим кое-какие настройки в конструкторе:

  • Отключим функцию таймера Tick (вообще никогда не забывайте отключать ее для актеров, которым она не нужна);
  • Устанавливаем статичную мобильность для всех компонентов;
  • Отключаем влияние на навигацию;
  • Настраиваем профили столкновений.

В Begin Play мы собираем некоторые данные и настраиваем их:

Триггеры разрушения

Существует три способа спровоцировать разрушение.

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

image

OnTakeDamage

Разрушаемый объект получает урон.

image

OnOverlapWithNearDestroyable

В этом случае один разрушаемый объект накладывается на другой. В нашем случае для простоты они оба ломаются.

image

Флоу разрушения объекта

image


Диаграмма разрушения объекта

Что делать с функцией сна

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

Каждый примитивный компонент с физикой может перейти в режим сна. Привязываемся к этой функции при разрушении.

Эта функция может быть присуща любому примитиву. Мы привязываемся к ней для завершения действия над объектом.

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

Что делать с разрушением

Нам необходимо проверить, можно ли разрушить актера (например, если игрок далеко). Если нет, проведем проверку повторно спустя некоторое время.

Вызов узла OnHit для частей объекта

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

End Play и очистка

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

Конфигурация в Blueprints

image

Графическим художникам не нужно ничего делать в движке.

Наш базовый класс Blueprint выполняет только аудиовизуальные вещи из событий, которые мы предоставили на C ++.

BeginPlay — загружает необходимые ассеты. По сути, в нашем случае каждый ассет представляет собой указатель на программный объект, и необходимо использовать их даже при создании прототипов. Жестко запрограммированные референсы ассетов увеличат время загрузки редактора/игры и использование памяти.

image

On Break Event — отвечает на эффекты и звуки появления. Здесь вы можете найти некоторые параметры Niagara, которые будут описаны позже.

image

On Part Hit Event — вызывает эффекты и звуки ударов.

image

Утилита для быстрого добавления столкновений

image

Можно использовать

image

Эффекты частиц в Niagara

Далее описывается создание простого эффекта в

image

Ключевой в этом материале является текстура, а не шейдер, так что он действительно очень простой.

Эрозия, цвет и альфа берутся из Niagara.

image


Канал текстуры R

image


Канал текстуры G

Большая часть эффекта достигается текстурой. Можно было бы еще использовать канал B, чтобы добавить больше деталей, но в настоящее время нам он не нужен.

Параметры системы Niagara

Мы используем две системы Niagara: одну для эффекта разрыва (она использует базовую сетку для порождения частиц), а другую — при столкновении деталей (без статичного расположения сетки).

image


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

Niagara Spawn Burst

image


Здесь задействуется пользователь int32 для того, чтобы иметь возможность настроить счетчик появления для каждого разрушаемого объекта

Niagara Particle Spawn

image

  • Отбираем статичную сетку из разрушаемых объектов;
  • Устанавливаем случайные время жизни (Lifetime), массу и размер;
  • Выбираем цвет из пользовательских (он задается разрушаемым актером);
  • Создаем частицы в вершинах сетки,
  • Добавляем случайную скорость и скорость вращения.

Использование статичной сетки

Чтобы иметь возможность использовать статичную сетку в Niagara, на вашей сетке должен быть установлен флажок AllowCPU.

image

СОВЕТ: В текущей (4.24) версии движка, если вы повторно импортируете свою сетку, это значение будет сброшено на значение по умолчанию. А в доставочной сборке, если вы попытаетесь запустить такую систему Niagara с сеткой, у которой не включен доступ к ЦП, произойдет сбой.

Поэтому добавим простой код для проверки, установлено у сетки это значение.

Он используется в Blueprints до Niagara.

image

Можно создать виджет редактора для поиска разрушаемых объектов и установить их переменную Base Mesh AllowCPUAccess.

Приведем код на Python, который ищет все разрушаемые объекты и устанавливает доступ ЦП к базовой сетке.

Вы можете запустить его напрямую с помощью команды py или создать кнопку для запуска кода в

image

Обновление частиц Niagara

image

image

При обновлении мы проделываем следующие вещи:

  • Масштабируем Alpha Over Life,
  • Добавляем curl noise,
  • Изменяем скорость вращения в соответствии с выражением: (Particles.RotRate * (0.8 – Particles.NormalizedAge);
  • Масштабируем параметр частиц Size Over Life,
  • Обновляем параметр размытия материала,
  • Добавляем вектор шума.

Отчего такой довольно олд-скульный подход?

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

Что же касается Chaos, подождем, когда он будет готов к полноценному релизу, и тогда посмотрим на его возможности.



Сайт не плохой, но как я понял там "ОН" объясняет как создать персонажа и анимацию к ниму в строгом порядке(я про скелет), а я уже имею модель со всеми анимациями
и орегенальным скелетом ( его уже походу так просто не переделать как хочется "капризному" UDK!!)) Персы и анимки из dota 2!- сам просто не очень люблю моделить и особенно анимировать.

Сайт не плохой, но как я понял там "ОН" объясняет как создать персонажа и анимацию к ниму в строгом порядке(я про скелет), а я уже имею модель со всеми анимациями
и орегенальным скелетом ( его уже походу так просто не переделать как хочется "капризному" UDK!!)) Персы и анимки из dota 2!- сам просто не очень люблю моделить и особенно анимировать. Автор - Say_Braah
Дата добавления - 23 Май 2013 в 19:33



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

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


1. Закидываешь своего перса в ЮДК.
2. Создаешь AnimSet для перса, и в него загружаешь все анимации для своего персонажа.
3. Создаешь Physics Assets. В этой штуке ты задаешь физические параметры для своего перса. Это нужно, чтобы корректно работала Ragdoll анимация. Если этого не сделать, то когда твоего перса убьют, его тело превратится в непонятную массу, которая больше похожа на груду рванных и растянутых тряпок. Тут тебе в помощь уроки Огасоды по физике объектов. Это уроки, где Огасода учит "вить веревки". Ключевое тут, это управление констрентсами. Обязательно нужно ставить ограничение на скручивание и растяжение.
4. Создаешь AnimTree. Тут проще. Берешь копируешь готовый AnimTree стандартного IronGuarda. В нем меняешь скелетал меш на своего перса. АнимСет так же меняешь на свой. И в параметрах анимации меняешь дефолтную анимацию, на анимацию своего перса. Если стояла анимация бега вперед, меняешь на алогичную свою. И так со всеми анимациями.
5. Дальше скриптуешь своего перса. Смотрим опять же уроки Огасоды, а именно в части скриптования персонажей. Только вместо имеющихся AnimSet, AnimTree, Physics Assets, Sceletal mesh ставишь те что ты сам создал. Автор - STARS
Дата добавления - 07 Июн 2013 в 12:15


Читайте также: