3. Импорт и работа с ассетами в Unreal Engine 5
Original size 2000x2800

3. Импорт и работа с ассетами в Unreal Engine 5

This project is a student project at the School of Design or a research project at the School of Design. This project is not commercial and serves educational purposes

Создание ассета на основе геометрии в UE

По умолчанию в Houdini Inputs выбран Geometry Input. Это значит, что никакая геометрия из анрила не отправляется в гудини. Все генерируется непосредственно в гудини.

big
Original size 731x143

Для примера был собран сетап забора с возможностью менять его длину. Для его работы достаточно просто перетащить HDA drag& drop’ом во viewport. Геометрия перенесется из гудини

big
Original size 800x397

Но если стоит задача сгенерировать что-то на основе геометрии ассетов из анрила, нужно сменить на World Input. Затем нажать кнопку Start Selection и выбрать ассет в сцене, меш которого будет отправлен в гудини.

big
Original size 602x476

Изменив логику сетапа в houdini и настройки инпута, теперь можно генерировать забор на любом ассете в сцене UE

Original size 800x395

При этом в гудини уже не задается никакой геометрии. Она передается в input subnet’а

Original size 800x420

Создание ассета на основе кривых в UE

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

Original size 800x450

Ассет на основе кривой

В данном случае необходимо выбрать Curve Input. Тогда во вьюпорте появится spline и эта же кривая будет отправляться в сессию Houdini на вход HDA. Чтобы редактировать сплайн в unreal нужно выбрать точку с ЛКМ. Далее появится пивот для ее перемещения. Если нужно продлить сплайн, нужно потянуть за точку с зажатым alt

Original size 732x267

Еще один сценарий, когда нужно перенести в unreal конкретную кривую, по которой все строится и дальше ее редактировать. Для этого нужно зайти в Type Properties ассета и во вкладке Node/editable Nodes указать название ноды/нод с кривой

Original size 1576x451

Перенос кривой в Unreal

В таком случае кривая сразу появится при переносе HDA во вьюпорт unreal и не нужно вручную выбирать тип инпута

Оптимизация ассетов для игрового движка

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

Original size 800x450

Сначала нужно экспортировать геометрию из houdini в UE. Стоит учитывать, что единицы измерения в этих программах отличаются и перед экспортом необходимо увеличить модели в 100 раз относительно 0 координат

Original size 757x248

Для назначения инстансов используется атрибут unreal_instance на точках. На него нужно назначить путь к геометрии в UE.

Путь можно найти, нажав ПКМ по ассету и выбрав Copy Reference

Original size 1152x480

Назначить путь на точки можно либо вручную: s@unreal_instance = "/Script/Engine.StaticMesh'/Game/HDAs/Fence/fence_geo/vert.vert'";

Либо вручную ссылаться лишь на путь, а имя назначать атрибутом name, который назначен и на точки, и на геометрию, экспортированную в UE. Если ассетов много, процедурный нейминг значительно сэкономит время

Original size 1446x223

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

Original size 2560x1120

Теперь вместо балок можно указать путь к любому другому ассету в сцене не выходя из unreal

0

Замена инстансов

UE может разбить инстансы по разным компонентам с помощью атрибута s@unreal_split_instances

s@unreal_split_instances = "type_grass"; s@unreal_split_instances = "type_rocks";

Все атрибуты, читаемые анрилом можно посмотреть в официальной документации: https://www.sidefx.com/docs/houdini/unreal/attributes.html

Ориентирование и трансформация инстансов

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

Масштабирование f@pscale — для пропорционального скейла; v@scale — для непропорционального скейла;

Original size 800x421

Ориентирование Векторные атрибуты: v@N — повернет объект той стороной, какой он направлен в положительную ось Z; v@up — для положительной оси Y;

Четырехкомпонентный вектор (кватернион): p@orient — обычно кватернионы используют во избежание так называемого gimbal lock (состояние при котором потеряна одна степень свободы вращения), когда требуется дополнительная ось вращения. С инстансингом они также выручают, поскольку задают ориентацию одним атрибутом, а не (up и N), что компактнее в записи

Original size 800x423

В этом примере для наглядности отображено ориентирование геометрии атрибутами N и up, но само вращение этих векторов осуществлено с помощью кватерниона, вращающего вектор нормали в позицию точки со второго входа node wrangle

Original size 1789x432

Таким образом инстансы можно процедурно вращать на конкретные или случайные градусы вокруг локальных осей каждой точки

Original size 800x421

В этом примере была построена матрица трансформации из вектора нормалей, направленного вдоль забора и вектора up, смотрящего вверх. Затем к матрице применяется вращение на значение канала angle по оси вектора up. После вращения матрица конвертируется в кватернион и записывается в атрибут orient.

Original size 1619x316

Трансформация v@P — здесь единственный атрибут и этого достаточно.

После всех поворотов можно смещать инстансы по тем же осям. В этом примере происходит смещение по векторам N, up и перпендикулярному им вектору out.

Original size 800x421

Для смещения необходимо прибавить к вектору позиции тот вектор, по которому нужно сместить инстанс и добавить множитель

Динамическое подключение материалов

По умолчанию, при попытке назначить материал на ассет drag& drop’ом, как делается это обычно, и после любого изменения каких-либо параметров, материал пропадет, поскольку путь к временной геометрии изменится. Чтобы избежать таких неудобств, есть ряд атрибутов, считываемых unreal’ом с геометрии ассета для назначения материалов

Original size 800x450

Сбрасывание материала при обновлении ассета

Назначение материалов по атрибуту unreal_material

В Houdini существует возможность указать путь к материалу, созданному в Unreal Engine, что позволяет Houdini Engine автоматически применять указанный материал в процессе импорта ассета.

На ноде, где есть геометрия (обычно Attribute Create, Wrangle, Labs Unreal Material), нужно создать строковый атрибут:

Имя: unreal_material Тип: String (Detail / Primitive / Point)

Original size 1085x337

Labs unreal material node

В значение нужно указать путь к материалу в Unreal. Чтобы скопировать путь, можно нажать ПКМ по ассету в content browser и выбрать Copy Reference

Original size 800x450

Динамическое назначение материала

По той же логике, что и с инстансами параметры с путями можно вывести в HDA, чтобы иметь возможность переназначить материал в unreal

Автоматическое создание Material Instances в Unreal

Houdini Engine также может создавать Material Instance, менять параметры в MI и применять их к геометрии.

В анриле необходимо создать материал M_Master с нужными параметрами. К примеру roughness, basecolor, metalic.

В HDA надо назначить строковый атрибут unreal_instance для того, чтоб указать путь к мастер-материалу. и unreal_material_parameter_* для редактирования параметров MI_Master

Bibliography
1.

SideFX Houdini User Documentation 2020 // URL: https://www.sidefx.com/docs/houdini/unreal/attributes.html (дата обращения: 01.11.2025)

2.

SideFX Houdini User Documentation 2020 // URL: https://www.sidefx.com/docs/houdini/unreal/install_houdiniengine.html (дата обращения: 01.11.2025)

Image sources
1.

Unreal Engine Using PCG Generation Modes || URL: https://dev.epicgames.com/community/api/documentation/image/445bfaae-f93b-48b2-950b-f247adae4705?resizing_type=fit&width=1400&height=730 (дата обращения: 01.11.2025)

3. Импорт и работа с ассетами в Unreal Engine 5
Chapter:
1
2
3
4
5
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more