Houdini
Houdini — процедурный пакет SideFX для разрушений, огня, дыма, жидкости и генерации миров. Вся работа строится на нодах, которые переиспользуются без правок.
1. Что такое Houdini
В отличие от Maya и Blender (ручное моделирование) Houdini работает процедурно: каждое действие — нода с параметрами. Изменение параметра пересчитывает весь граф. Поэтому Houdini — стандарт для FX в кино и процедурной генерации в играх.
Версии: Houdini FX (всё, включая симуляции) и Houdini Core (моделирование до симуляций).
2. Интерфейс и навигация
Главное окно:
- Node View — сеть нод (рабочее сердце Houdini).
- Scene View — 3D-просмотр геометрии.
- Network Editor — палитра инструментов ноды.
- Parameters pane — настройки выбранной ноды.
Навигация: так же как в Maya — Alt + ЛКМ/СКМ/ПКМ. Просмотр выбранной ноды — H (fits), зум колесом мыши.
3. Нодальная сеть
Ноды соединяются «данными»: выход одной становится входом другой. Ключевые контексты:
| Контекст | Тип данных |
|---|---|
| Object (obj) | объекты сцены (модели, камеры, lights) |
| SOP (sop) | геометрия: полигоны, точки, атрибуты |
| DOP (dop) | симуляции частиц/жидкостей/RBD |
| COP (cop) | 2D-операции (composting) |
Базовый граф: Box = Polygon → Transform → Wrangle — и так далее. Ноды вниз по потоку пересчитываются автоматически.
4. Геометрия и атрибуты
Минимум: точки (points) — позиция P, рёбра, примитивы (polygons) и атрибуты — данные, прикреплённые к любому элементу.
- Атрибут точки:
@P,@v(скорость). - Атрибут примитива:
@Cd(цвет),@ptnum. - Aтрибут детали:
@Frame,detail().
Группы (Groups) — именованные наборы точек/примитивов: @group_name = 0/1.
5. Процедурное моделирование
Собери на примере города из кубов:
// Point Wrangle: каждый третий куб выше
@P.y += sin(@ptnum * 3.0) * 0.5;
if (@ptnum % 3 == 0) @P.y += 2.0;
// Форс: прибить к сетке
@P = rint(@P * 10.0) / 10.0;Ключевые инструменты: Copy to Points (инстанс копий по точкам), Attributes Wrangle/wrangle, Scatter, Resample, Polybevel.
6. VEX — главный язык
VEX — C-подобный язык, исполняемый на CPU по каждому элементу (точка/примитив). Синтаксис ближе к C, чем к Python.
float r = rand(@ptnum + 123);
vector n = normalize(@P);
@Cd = set(r, n.y, 1.0 - r);
int npts = npoints(0);
float avg = 0.0;
for (int i = 0; i < npts; i++) {
float t = float(i);
avg += t > 100.0 ? 1.0 : 0.0;
}@P,@v,@w— встроенные атрибуты.@ptnum,@primnum— индексы.- ВМ утилиты:
npoints(),nearpoint(),length().
7. Вращение, копирование и инстансинг
Copy to Points ставит копию объекта на каждую точку. Управлять поворотом можно атрибутами @orient (кватернион) и @scale.
// Point Wrangle: ориентация по нормали поверхности
v@orient = quaternion(@N, @P);
f@scale = 1.0 + 0.2 * sin(@ptnum);Для движков выгоднее Instancing: рисуется одна копия, копии в сцене — ссылки. В Houdini используй Copy to Points с флагом «instanced» или Instance node.
8. Симуляция частиц
Самый короткий путь к частицам — контекстное меню SOP ноды → подменю «with POPs»:
POP Net— сеть частиц.POP Source— источник (точки).- Через
POP Wrangleдобавь силы и ограничения.
@v.y -= 0.98; // гравитация вниз
@v *= 0.99; // сопротивление воздуха9. Разрушения: RBD и Voronoi
Разрушаемые тела — ключевая фишка Houdini:
- Модель →
Voronoi Fracture— разрезает на куски по случайным точкам. - Куски + симулирующий объект →
RBD Solverв DOP. - Задай
Glue Constraint— склейка до удара. - Подключи
RBD Material Fractureдля материала-стенки.
ROP Output в фоновых кадрах: DOP-симуляции не интерактивны, пересчёт идёт поблочно.10. Жидкость и дым
Для дыма используй Smoke Solver, для жидкости — FLIP Solver (частицы) или APIC. Начни с готового примера: File → New Example → FLIP Tank.
Основа: объём и его разрешение (voxel size) и источник частиц. Чем мельче воксель — тем детальнее, но в разы дороже по памяти.
11. Террейн и процедурные ландшафты
Террейны делаются через Heightfield сеть:
Heightfield— базовое поле высот.Heightfield Noise— смещения формы.Heightfield Erode— эрозия ручьями/склонами.Output— геометрия для экспорта.
12. Экспорт в Unreal и Unity
Способы переноса:
- FBX/ABC — статическая геометрия и запечённая анимация (суффиксы кадров).
- USD — рекомендованный путь: сохраняет иерархию, материалы и слои.
- Houdini Engine (для Unreal/Unity) — интерактивные HDA-ноды прямо в движке: меняешь параметры — сетка пересобирается в редакторе.
13. Освещение и рендер: Karma
Современный Houdini рендерит через ядро Karma (XPU — гибрид CPU+GPU) или классический Mantra. Освещение собирается нодами в контекстах Light Mixer и VOP: Sun Light, Dome Light (HDRI), Area Light.
- основной свет — Sun Light с тенями (Shadow Map или Ray Trace);
- окружение — Dome Light с HDRI для отражений металла и стекла;
- материалы — Principled Shader: base color, roughness, metallic;
- рендер отдельной нодой Render: Karma Engine или Mantra.
Схема графа:
Lighting (/stage) → Material Library
↓
Karma Render → EXR (OpenEXR) выход14. HDA: переиспользуемые ноды
HDA (Houdini Digital Asset) — упакованная нода с параметрами, интерфейсом и документацией. Хорошо собранный HDA используют в команде и в движке без знания внутренностей.
- выдели подграф нод →
Create Digital Asset; - задай тип, например
scatter_rocks::1.0; - вынеси ключевые параметры на вкладку Interface;
- добавь иконку и короткое описание изнутри.
| Где живёт | Как используется |
|---|---|
| HDA-файл (.hda) | переносится между проектами |
| Командная полка (Shelf) | общий набор для всей команды |
| Unreal/Unity | Houdini Engine подхватывает тип напрямую |
15. Кеширование и производительность
Тяжёлые симуляции и сетки нельзя пересчитывать при каждом открытии сцены. Houdini «замораживает» результат нодами File Cache и ROP Output в формате Bgeo/HDC.
File Cache → путь: $HIP/geo/sim.$F.bgeo
ROP Output → Write to: $HIP/geo/sim.$F.hdc
Переменные кадров: $F, $FSTART, $FEND- симуляции сохраняй в .bgeo.sc (собственное сжатие SideFX);
- статику для экспорта — в Alembic (.abc) без сетки кадров;
- для вьюпорта ставь лёгкую LOD-сетку, полную — только на рендер;
- ссылайся на общий кеш папкой, а не копируй файлы.
16. Автоматизация через Python (hou)
Python API Houdini — модуль hou. Скрипты массово создают ноды, правят параметры, переименовывают и экспортируют.
import hou
node = hou.node("/obj/geo1")
node.createNode("box")
box = node.children()[-1]
box.parm("sizey").set(2.0)
for n in node.children():
if n.type().name() == "wrangle":
print(n.parm("snippet").eval())Запуск возможен без интерфейса — бинарник hython, что удобно для пайплайна и CI:
hython my_script.py
hython -c "import hou; print(hou.applicationVersion())"17. Камеры: фокус, глубина резкости и motion blur
Две самые недооценённые детали в кадре — фокус и размытие. Без них рендер выглядит «пластиковым», даже если геометрия и свет идеальны.
# параметры камеры (Camera ROP → Main)
focal: 35 мм # portrait 50–85
aperture: 2.8 # глубина резкости
ortho: off # перспективаDepth of Field (DOF) в Karma включается через параметр камеры: фокусируйтесь на главном объекте, всё остальное мягко уходит в размытие.
- aperture меньше → короче глубина резкости и сильнее боке;
- фокусное расстояние привязывайте через
focusна камере; - motion blur нужен для скорости: shutter angle 180° — реалистичный старт.
18. Экспорт в PNG/EXR и постобработка
Финальный рендер редко уходит «в лоб». Правильный формат и постобработка за композитором решают половину качества картинки.
ROP Output → формат:
EXR: многослойный, AOV, HDR (основной)
PNG: быстрый превью, веб (для тестов)AOV (Arbitrary Output Variables) — отдельные проходы: diffuse, specular, reflection, z-depth, normal. Они позволяют пересобирать свет в Nuke/AfterEffects без пересчёта.
блок-main.n.0001.exr → main_beauty_0001.exr
main_diffuse_0001.exr
main_zdepth_0001.exr19. Шейдеры и материалы: Karma MaterialX
Материалы в Houdini строятся на ноде MaterialX — открытом стандарте шейдинга, который Karma понимает нативно. Это замена старому Principled Shader.
MaterialX Shader → Principled BSDF
base_color (текстура Albedo)
subsurface (кожа, воск)
roughness/metallic (PBR-пары)Ключевые параметры:
- Base Color — цвет и/или текстура;
- Roughness — микронеровность: 0 зеркало, 1 мат;
- Metallic — металл против диэлектрика;
- Emission — свечение для неонов и экранов.
# навесить материал на объект
/obj/geo → Material Library → MaterialX Shader → Bind20. Версионирование проекта и работа в команде
Проект в одиночку и проект в пайплайне — разные вещи. Пара правил спасёт от потери версий и конфликтов.
# имена файлов
/hip/terrain_v001.hip → terrain_v002.hip
/cache/sim_001.bgeo # версия кадра явно в имени- версия в имени файла (
_v001) + коммент к каждой правке; - кэш и геометрия — в отдельных папках, чтобы hip оставался лёгким;
- общие ассеты выносите в
$HIP/assetsи собирайте библиотеку; - сам hip версионируйте через git или VCS — дифф HDA-интерфейсов хорошо читается.
21. Риг и кинематика: IK/FK и ограничения
Houdini умеет не только разрушать: игровой пайплайн часто требует персонажной анимации. Риг строится нодами — каждый сустав, кость и ограничение становится узлом графа.
- FK — прямая кинематика: поворот сустава двигает конечность «сверху вниз»;
- IK — обратная: цель тянет руку, а суставы решаются из цели;
- constraints (Rig Constraints) — ограничения позиции, ориентации и длины;
- Solver-ноды рассчитывают позы и позволяют смешивать IK/FK по параметру.
// VEX: цель IK как атрибут точки
v@pivot = @P;
i@target_pt = @ptnum + 1;22. CHOP-ноды: работа с данными анимации
CHOPs (Channel Operators) — узкая, но мощная область Houdini: каналы создаются, фильтруются и комбинируются как сигналы, а затем управляют любым параметром сцены.
// типичная цепочка CHOP:
// Channel CHOP → Noise CHOP (сигнал)
// → Math CHOP (умножение/сдвиг)
// → Export CHOP → параметр объекта- Export CHOP связывает канал с параметром — так рождается процедурная анимация;
- Blend/Combine — плавные переходы между двумя анимациями;
- Audio CHOP импортирует звук как сигнал — для липсинка и ритмичных движений;
- входом могут быть любые атрибуты, не только трансформации.
23. Crowds: толпы, агенты и клоны
Сцены «городская толпа» или «армия» решаются через Crowd Solver: тысячи агентов с собственной анимацией, обходом препятствий и состояниями поведения.
- агент — это риг плюс набор клипов (Idle, Walk, Run), хранящихся в одной ноде;
- обход препятствий считают поля потоков (Flow Field) на геометрии уровня;
- состояния (State) переключают поведение: идти → бежать → падать;
- расчёт параллелится: 10–50 тысяч агентов — типовая задача.
// VEX для агента: случайное смещение скорости
v@velocity += fit01(rand(@id), -0.5, 0.5) * v@up;24. Композитинг в Houdini: COP и финальный фрейм
Финальную сборку кадра обычно делают в Nuke, но базовая коррекция, ключинг и сборка слоёв доступны прямо в Houdini через ноды COP (Compositing Operators).
// типичная цепочка COP
Render → Keyer (фон) → Transform (рамка)
→ Grade (цвет) → Composite (слои)
→ ROP Output- каждый слой рендера становится входом — собирайте beauty, AO, roughness одним графом;
- Grade, HueShift, Blur — базовая коррекция почти как в фоторедакторах;
- Keyer отделяет фон по цвету — пригодится для съёмки на зелёном экране;
- COP выполняется как часть рендера (ROP) или интерактивно в редакторе.
Что дальше
Процедурный подход Houdini прекрасно дополняет модельный пайплайн Blender и Maya. Текстуры для FX-сцен рисуй в Substance 3D Painter, а модели выгружай в Unreal Engine через USD.