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

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

Создание ассета на основе кривых в UE
В данном случае необходимо выбрать Curve Input. Тогда во вьюпорте появится spline и эта же кривая будет отправляться в сессию Houdini на вход HDA

Оптимизация ассетов для игрового движка
Автоматическое подключение материалов
1. Назначение материалов по атрибуту unreal_material
В Houdini существует возможность указать путь к материалу, созданному в Unreal Engine, что позволяет Houdini Engine автоматически применять указанный материал в процессе импорта ассета.
На ноде, где есть геометрия (обычно Attribute Create, Wrangle, Labs Name), нужно создать строковый атрибут:
Имя: unreal_material Тип: String (Detail / Primitive / Point)
В значение нужно указать путь к материалу в Unreal. Чтобы скопировать путь, можно нажать ПКМ по ассету в content browser и выбрать Copy Reference
s@unreal_material = "/Game/Materials/M_MyMaterial.M_MyMaterial";
2. Назначение материалов по группам с атрибутом unreal_face_material
Если у модели несколько материалов (например, стены/пол/окна), лучше использовать примитив-группы.
Пример названия групп: grp_wall | grp_floor | grp_window
Атрибут для установки материалов на фейсы:
Имя: unreal_face_material Тип: String (Primitive)
Пример на vex:
if (inprimgroup(0, "grp_wall", @primnum))
s@unreal_face_material = "/Game/Materials/M_Wall.M_Wall";
if (inprimgroup(0, "grp_floor", @primnum))
s@unreal_face_material = "/Game/Materials/M_Floor.M_Floor";
3. Автоматическое создание Material Instances в Unreal
Houdini Engine также может создавать Material Instance, менять параметры в MI и применять их к геометрии.
В анриле необходимо создать материал M_Master с нужными параметрами. К примеру roughness, basecolor, metalic.
В HDA надо назначить строковый атрибут unreal_instance для того, чтоб указать путь к мастер-материалу. и unreal_material_parameter_* для редактирования параметров MI_Master
Создание ассета с инстансингом
В гудини есть ряд атрибутов для масштабирования и ориентации инстансов. Эти атрибуты назначаются на точки, а после применяются к геометрии, скопированной на них.
Масштабирование f@pscale — для пропорционального скейла; v@scale — для непропорционального скейла;
Ориентирование Векторные атрибуты: v@N — повернет объект той стороной, какой он направлен в положительную ось Z; v@up — для положительной оси Y;
Четырехкомпонентный вектор (кватернион): p@orient — обычно кватернионы используют во избежание так называемого gimbal lock, когда требуется дополнительная ось вращения. Но с инстансингом они тоже часто выручают, поскольку задают ориентацию одним атрибутом, а не (up и N), что удобнее. А зная vex, инстансы можно процедурно вращать на конкретные или случайные градусы вокруг локальных осей каждой точки. Векторы тоже можно вращать, но это займет больше строк кода.
Для назначения инстансов используется атрибут
unreal_instance. На него нужно назначить путь к материалу в UE. Это можно сделать либо вручную в HDA:
s@unreal_instance = "/Game/Blueprints/BP_Lamp.BP_Lamp_C";
Либо вывести параметры в ассет, чтоб можно было назначать инстансы динамически в анриле:
string meshes[] = array(
chs("mesh1"),
chs("mesh2"),
chs("mesh3")
);
int id = int(rand(@ptnum) * len(meshes));
s@unreal_instance = meshes[id];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