Недавние вопросы

Часто для использования в шейдерах в игровом движке необходимо запечь информацию на вертексы.

  1. Цвет и альфа.

На точках или вертексах атрибуты Cd и Alpha автоматически преобразуются в вертексный цвет. Важно, что Alpha не сработает без Cd, то есть нужны будут оба этих атрибута (но при этом можно использовать только Cd). В вертексный цвет и альфу сохраняются только положительные значения. Отрицательные клампятся до нуля.

2. UV

В fbx можно сохранить 8 наборов UV. В зависимости от движка вы можете прочитать их все, или только часть. Например в Shader Graph в Юнити доступно всего 4 набора UV.

UV могут лежать на точках или на вертексах, но все наборы должны лежать на одном уровне. При этом нельзя использовать UV2-8, если нет основного набора.

Таким образом из Гудини экспортируются атрибуты: uv, uv2, uv3, uv4, uv5, uv6, uv7, uv8

Несмотря на то, что в Гудини это векторные атрибуты с тремя значениями, в fbx они сохраняются как Vector2, то есть используются только первые два значения, uv.x и uv.y.

 
Категория:Gamedev

Чтобы удобно редактировать VEX-код в Visual Studio Code вам нужно будет поставить два расширения. Идите в пункт меню Extensions, сделайте поиск по фразе VEX и установите расширения VEX (Houdini Vex Support for VSCode), а также Houdini Vex Help.

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

 
Категория:VEX

Чтобы открывать Векс-код из врангла в более удобном редакторе, щелкните правой кнопкой мыши по полю ввода кода и выберите Expression — Edit in external editor. Если вы до этого не устанавливали внешний редактор, нажмите Yes в появившемся окошке, после чего откроется окно выбора исполняемого файла вашего любимого редактора.

Код из врангла сохраняется во временный файл, который открывается в редакторе. Когда вы сохраняете его, код автоматически апдейтится во врангле. Чтобы убрать эту связь, можно выбрать пункт меню Expression — Remove file watcher.

Если вы хотите привязать другой внешний редактор, удалите или отредактируйте файл ExternalEditor.cfg, который лежит в папке /User/Documents/HoudiniXX.X/

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

Можно добавить горячую клавишу на открытие внешнего редактора, но она будет действовать только в том случае, если курсор мыши находится над полем Vexpression, расположенны прямо над окном ввода кода.

 
Категория:VEX

В версии 19.5 Появилась возможность сохранять собственные кастомные атрибуты в FBX и даже их анимировать. Для этого в правой ветке (где происходит анимация) рига надо добавить Dictionary с названием fbx_custom_attributes, в этот словарь можно внести разные типы данных и анимировать их. После этого ноды Fbx Character output и Fbx Animation Output (при включенной галке Export User-Defined Attributes) сохранят кастомные проперти. Теперь, например в Юнити их можно прочитать прямо в аниматоре.

Для версий ниже 19.5:

Есть возможность сохранять из Гудини Custom Property в FBX-файле. Для этого экспортировать файл нужно с помощью ROP-ноды в контексте Out (Rop Fbx Output в SOP не подходит).

На уровне Obj на ноде, которую нужно экспортировать, необходимо через Edit Parameter Interface создать параметр с именем (Name), которое будет начинаться с «fbx_». А отображаемое имя этого параметра (Label) будет использоваться в качестве названия для Custom Property. Теперь при экспорте этой ноды через Filmbox FBX, в файл сохранится значение данного параметра.

Анимированные Custom Property не поддерживаются.

 
Категория:Gamedev

Допустим, вам надо вставить в руки персонажа оружие, надеть шапку на голову и так далее. Все очень просто. Выставьте вашу модель аксессуара в нужную позицию, когда персонаж находится в исходной позе. После этого запакуйте ваш объект и используйте ноду Capture packed geometry, в которой можно вручную добавить связь. В Capture geo поставьте ноль (раз уж это пакед, то и примитив всего один). В joint нажмите на стрелку и выберете самую подходящую точку-джойнт. Теперь результат объедините со старым скином, и все будет работать.

 
Категория:KineFX

У полигонов есть лицевая и изнаночная сторона, по-английски Front и Backface. Сторона определяется исключительно по порядку обхода вертексов. Если вертексы идут по часовой стрелке, то сторона лицевая.

Гудини подкрашивает тыльную сторону полигонов синим цветом, это поведение можно изменить в настройках вьюпорта (D над вьюпортом), меню Markers, Tint backfaces. Чтобы эмулировать поведение игровых движков, можно пойти в этом же окне во вкладку Optimize и включить Remove backfaces. В этом случае тыльные стороны полигонов не будут отображаться вообще.

Чтобы вывернуть полигон, необходимо поставить ноду Reverse, которая пересоберет вертексы в противоположном порядке.

Важно, что атрибут N, то есть нормаль, не связан с направлением полигона. При вывернутом полигоне нормаль может смотреть и в правильную сторону. Поэтому, если после ноды Reverse геометрия стала черной, надо пересчитать нормали нодой Normal.

Если вам нужно найти нормаль исходя из направления полигона, можно использовать VEX-функцию prim_normal(geo, prim number, u, v), которая вернет эту нормаль в полигоне prim number в позиции параметрических координат u,v.

Иногда из других пакетов (особенно из КАД) приходят модели с частично вывернутыми полигонами. Прежде чем паниковать, надо задать себе вопрос: а действительно ли это плохо?

Вывернутые полигоны будут вызывать проблемы в нескольких случаях:

  1. Они находятся на полупрозрачной геометрии с преломлениями. На рендере будут артефакты.
  2. Модель для игрового движка. Большинство шейдеров в движках по умолчанию не показывают бэкфейсы для оптимизации.
  3. Планируется еще процедурно менять модель. Например Extrude зависит от направления полигонов.

В остальных случаях, скорее всего, неправильно направленные полигоны не будут заметны на рендере. Можно отключить Tint Backfaces и не обращать на них внимание.

Если вы, все-таки, обнаружили артефакты, то придется эти полигоны корректировать. Универсального метода, который исправляет все плохие полигоны, не существует. Результат будет сильно зависеть от топологии.

Варианты исправления:

  1. Нода Polydoctor, вкладка Topology, Correct Winding of Polygons to Majority… Эта нода найдет направление большинства полигонов в острове геометрии и исправит оставшиеся. Соответственно, полигоны должны быть связанны друг с другом (Fuse).
  2. Добавить ноду Boolean в режиме Union. Если топология связная, то вывернутые полигоны пропадут. Остается найти, какие полигоны пропали и реверснуть их на исходной геометрии. Например, сохранить исходный номер примитива в атрибут index нодой Enumerate, создать на геометрии с булем атрибут @mask=1, а потом нодой Attribute copy скопировать этот атрибут на исходную геометрию, используя Index в качестве атрибута соответствия.

3. Вычислить объем. Создать атрибут сlass на полигонах нодой Connectivity по примитивам. Добавить Measure — Volume — Accumulate Per Piece. Если топология связная, после этого на вывернутых полигонах будет отрицательный объём. Его можно использовать в ноде Reverse, добавив в группу @volume<0

4. Если у вас на модели есть нормали, и они правильно направлены, то можно сравнить нормаль с вектором, который получается после prim_normal(). Если они противоположно направленные, то полигон вывернут. Это определяется функцией dot().

5. Можно вручную расставить точки снаружи объекта и воспользоваться следующим кодом для выделения перевернутых полигонов. Так можно быстро пофиксить полигоны на видимой части объекта. На второй вход врангла подается одна точка, позиция условной «камеры», из которой пускаются лучи. Врангл по примитивам. Можно поставить несколько вранглов подряд с разными точками. На выходе образуется группа с названием rev, по которой можно ставить Reverse.

vector cam = point(1,"P",0);
vector ray = normalize(@P-cam);
vector norm = prim_normal(0,@primnum,0,0);
vector pos, uv;
if (intersect(0, cam, ray*10000, pos, uv)==@primnum)
{
    if (dot(ray, norm)>0) @group_rev=1;
}

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

 
Категория:SOP

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

Вот вам шпаргалка.

 
Категория:VEX

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

 
Категория:Ошибки

Struct — это структура данных, которая позволяет использовать инкапсуляцию, пусть и в ограниченном виде.

Struct необходимо создавать во внешнем файле, а не в самом Врангле. Создайте внешний файл так, как это описано в этом вопросе: http://hipnc.club/ufaqs/custom-functions/

Struct может содержать как поля, так и методы (если пользоваться терминологией ООП).

// Упрощенный пример использования структуры для создания двумерного массива
struct IntArray
{
	int _xSize;
	int _array[];

	void Create(int xSize, ySize)
	{
		_xSize=xSize;
		resize(_array, xSize*ySize);
	}

	int Value(int x, y)
	{
		return _array[y*_xSize + x];
	}

	void Set(int x, y, value)
	{
		_array[y*_xSize + x] = value;
	}
}

После этого во Врангле делаем #include с именем вашего файла. Обращаться к структуре можно следующим образом:

#include "arrays.h"

IntArray arr;
arr->Create(10,10);
arr->Set(3,5,1000);
printf("Array value: %d", arr->Value(3,5));
printf("Array X size: %d", arr._xSize);

К «полям» мы обращаемся через знак «точка», а к «методам» через «->».

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

MyStruct var = MyStruct(10, 20, "String");

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

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

 
Категория:VEX

Создайте файл с расширением .h, например myvex.h. Этот файл необходимо поместить в папку, которая указана в переменной окружения HOUDINI_VEX_PATH или же в папку ДОКУМЕНТЫ/HoudiniXX.XX/vex/include.

После этого вы сможете обращаться к указанным в этом файле функциям, добавив в начало кода во Врангле строку

#include "myvex.h"

Если же вам нужно передать проект кому-то другому и у вас нет уверенности, что на другой машине будут такие же файлы, можно в include использовать относительный путь:

#include "$HIP/myvex.h"

Также можно встроить функцию прямо во врангл:

  1. Разлочить врангл (Allow Editing of contents на ноде Врангл)
  2. Заходим внутрь два раза, до ноды Snippet
  3. В ноде Snippet можно в параметр Include files записать прямой путь до вашего файла. К сожалению, путь должен быть абсолютным.
  4. Также в ноде Snippet можно скопировать полностью код из вашего h-файла в параметр Outer Code (или можно запромоутить его на верхний уровень ассета).
  5. После этого команду #include можно убрать из кода

 
Категория:VEX

Спокойно! Нажмите Alt+T.

 
Категория:Интерфейс

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

Для этого существуют следующие интринсики на уровне детали: pointattributes, primitiveattributes, vertexattributes и detailattributes. Их можно прочитать в строковые массивы и уже дальше работать с ними, как с обычными строками. Например, можно сделать поиск по какому-то условию через re_find, найти имя нужного атрибута и записать в него что-то через функции setpointattrib, setprimattrib и так далее.

Чтение из интринсиков выглядит так:

string pointattribs[] = detailintrinsic(0,"pointattributes");
string primattribs[] = detailintrinsic(0,"primitiveattributes");
string vertexattribs[] = detailintrinsic(0,"vertexattributes");
string detailattribs[] = detailintrinsic(0,"detailattributes");
 
Категория:VEX

Поскольку функции point(), prim(), detail() и им подобные могут возвращать разные типы данных, то просто написать f@attr = point(1, «P», @ptnum).x; не получится, Врангл выдаст ошибку Ambiguous call to function

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

// В этом примере мы сначала записываем позицию в векторную переменную и читаем значение компоненты из нее
vector pos = point(1, "P", @ptnum);
f@height = pos.y;

// В этом примере мы используем приведение типа функции
f@height = vector(point(1, "P", @ptnum));

Приведение типа функции или по-английски Cast выполняется записью вида ТИП_ДАННЫХ(выражение). Этот тип приведения не использует никакого реального преобразования, он просто говорит Вексу, какой из перегруженных вариантов функции использовать.

 
Категория:VEX

Если вы хотите при старте Гудини загружать не пустой проект или производить какие-то настройки по умолчанию, то вам нужно будет создать файл 123.py. Это скрипт на Python, который будет исполняться всякий раз, когда Гудини стартует без проекта. Этот файл должен лежать в папке Документы/HoudiniXX.X/scripts.

Например, если вы хотите, чтобы при старте проекта у вас всегда создавалась камера, сделайте такой скрипт:

hou.node('/obj/').createNode('cam')

Вы можете перетащить связку нод на шелф, потом на получившемся инструменте щелкнуть правой кнопкой, Edit tool — Script и скопировать получившийся скрипт в 123.py. Теперь эти ноды будут загружаться в пустом проекте.

Обратите внимание: если в стартовых скриптах есть ошибки, то Гудини покажет в консоли проблемное место, но не запустится.

Если вам нужно менять какие-то установки при загрузки ваших проектов, то для этого есть файл 456.py. Он запускается при загрузке проекта, в том числе через меню File.

Например, если вас раздражает, что в проекте сохраняется номер текущего фрейма и при загрузке проекта идет просчет симуляции до этого кадра, то вы можете поместить в 456.py такую строку:

hou.setFrame(1)

После этого проект всегда будет устанавливаться на первый фрейм при загрузке.

 
Категория:Общие вопросы

Если у вас частиц очень много, то в настройках вьюпорта (D над вьюпортом), во вкладке Geometry можно переключить «Display particles as…» на «Pixels». Это немного облегчит перерисовку и работать станет чуть проще.

 
Категория:Частицы

В ноде Carve есть режим Extract — Extract Point(s). В нем от кривой останется одна или две точки (при включенном параметре Second U).

Если нужно решение в вексе, то здесь понадобится функция Primuv.

// На первый вход врангла подается одна точка, на второй - кривая. 
// Параметром anim можно перемещать точку по этой кривой.
// Ноль означает номер примитива. Если примитивов больше одного, нужно будет подставить вместо него правильные номера.
@P = primuv(1, "P", 0, ch("anim"));
 
Категории:SOP, VEX

Если речь про целое число, то существует функция itoa(number), которая из числа типа 125 возвращает строку «125». Эта функция часто используется для работы с атрибутом name, мультипармами или инстансами.

// в атрибут instance запишется строка box0, box1, box2 и так далее в зависимости от числа в атрибуте id.
s@instance = "/box"+ itoa(i@id);

// в атрибут text запишется строковое значение из строкового параметра мультипарма (text0, text1, text2 и так далее).
s@text = chs("text" + itoa(num));

Если же нам нужно перевести в строку флоат или как-то отформатировать результат, то необходимо использовать функцию sprintf(). В ней задается произвольная строка, в которой встречаются служебные последовательности символов типа %g, %d, а после строки через запятую перечисляются значения, которые подставятся вместо этих символов. Также эта функция поддерживает дополнительные опции форматирования, такие как выравнивание, padzero и т.д.

// В атрибут filename запишется значение типа image_0001.jpg, где 0001 - это номер кадра
// Запись вида %04d сделает длину числа равной 4 и забьет свободные места нулями
s@filename = sprintf("image_%04d.jpg",@Frame);

// В атрибут floatstring запишется значение атрибута pscale
s@floatstring = sprintf("%g", f@pscale);

Описание всех возможных вариантов форматирования можно почитать здесь.

 
Категория:VEX

Нужно создать целочисленный параметр с названием RS_matprop_ID. При рендере его значение будет считаться Material ID и учитываться в аовах типа Puzzle matte.

 
Категория:Redshift

Меню Render/Update Textures.

Также, если залипла текстура из COP network, поможет меню Windows/Cache manager, в котором можно почистить разные кэши.

 
Категория:Интерфейс

Выделить нужные ноды и потянуть связь с выхода одной из них с зажатой клавишей ALT.

 
Категория:Интерфейс

Если вы рендерите Мантрой, то в COP есть нода Render, которая как раз автоматом подтягивает изображение, пришедшее с рендера.

Если вы работает с Редшифтом (или другими движками), то в COP добавьте ноду File, в которую через Relative reference скопируйте имя файла из rop-ноды. Добавляйте любые обработки (цветокоррекция, композ, надписи), и в конце нетворка поставьте Rop File output с новым названием файла. В этой ноде включите галку Reload all files. В ноде Редшифта выключите Non-blocking current frame rendering во вкладке Main.

В контексте out добавьте ноду Fetch, на ее вход подключите ноду Redshift. В ноде Fetch выберите Rop File output из COP.

Теперь, когда вы нажмете Render на ноде Fetch, сначала отрендерится картинка, потом она подтянется в COP-нетворк и оттуда сохранится заново.

 
Категория:COP (IMG)

В разных лицензиях проект и ассеты имеют разные расширения файла.

Non-commercial (Apprentice, Education)hipnc и hdanc
Indiehiplc и hdalc
FXhip и hda

В некоммерческой версии можно открывать только NC-проекты и ассеты. В Indie можно открывать проекты LC и NC (Гудини перекинется в NC-режим). В FX можно открывать все файлы, при открытии LC или NC Гудини перекинется в соответствующий режим.

 

При создании Constraint network по умолчанию ставится диапазон кадров «Use current frame», поэтому не будут работать ноды, фильтрующие по времени. Нужно пойти во вкладку Channel самой верхней ноды и переключить Range в «Use full animation range».

 
Категория:Chop

Для волюметриков нужен специальный материал RS Volume и необходимо повысить Volume Contribution Scale на источниках света.

 
Категория:Redshift

Вам помогут настройки Opacity Affects Alpha Channel на вкладке Advanced материала, и Enable Legacy Opacity Affects Alpha Channel на ROP ноде: Redshift — System.

 
Категория:Redshift

Возможно указана неверная гамма на ноде RS Texture у карты нормалей. Необходимо включить Gamma Override.

 
Категория:Redshift

Возможно полигоны направлены неверно, направление полигонов можно определить по цвету во вьюпорте. Обычные серые — всё в порядке, синие — это обратная сторона полигона. Нода reverse может развернуть направление полигонов, в том числе по группе. Вывернутые полигоны очень критичны при рендере стекла, или прозрачных объектов. Также они могут сильно влиять на освещение. Так же проверьте нормали, лучше просто пересчитать их нодой Normal. Они могут быть как просто неверно посчитаны, так и не нормализованы, что тоже вызывает артефакты.

 
Категория:Redshift

Можно заменить камеры и ROP-ноды на новые. Скорее всего ваша версия Редшифта значительно новее чем в проекте, и могло появиться много новых параметров, которые конфликтуют со старыми.

 
Категория:Redshift

Скорее всего вы накладываете материал на Obj-параметрах ноды, а на полигонах геометрии лежит атрибут shop_materialpath с другим материалом. Такое может случиться на тестовых моделях, или после ноды UV Quick Shade. Атрибут приоритетнее, поэтому он перезаписывает материал с верхнего уровня. Удалите атрибут, или накладывайте материалы так же нодой Material

 
Категория:Render

Нет, нужно использовать Material Override, есть хороший урок на эту тему:

 
Категория:Redshift

Это зависит от формата изображения, по умолчанию в exr большинство эффектов не сохранится, а в jpeg сохранится всё. Настроить это можно на ROP ноде: Output — PostFX.

 
Категория:Redshift

В настройках отражений стоит поднять сэмплы, также помогут настройки Sample Filtering на ROP ноде: Redshift — Settings — Sampling Options. В частности нужно опустить Max Subsample Intensity и Max Subsample Ray Intensity до 2 или 1.

Все нюансы настройки и оптимизации рендера вы можете узнать из нашего курса «Redshift в Houdini»:

 
Категория:Redshift

В настройках Back-Plate на Dome Light.

 
Категория:Redshift

Некоторые аовы, point base SSS и GI при рендере в режиме Progressive не отображаются. Аовы при этом просто не работают, а GI и SSS считаются методом Brute Force. Так что нужно переключиться в режим Bucket Rendering

 
Категория:Redshift

Без паники, перезагрузите Гудини!

 
Категория:Redshift

При покупке лицензии Houdini Indie вы получаете Engine бесплатно, его можно ставить на три компьютера.

Для лицензии Houdini FX с недавнего времени можно бесплатно запросить до десяти (а при личном запросе у менеджера и больше) лицензий Houdini Engine Unity/UE4. Эти лицензии можно запускать на отдельных компьютерах. На эти компьютеры нужно установить Houdini, а в качестве лицензии использовать лицензию от Engine. На них можно будет работать в игровом движке с энжином и использовать в нем ассеты из Гудини, не докупая дополнительно лицензии. Но запустить Гудини с полным интерфейсом уже не получится.

Проще говоря на студии на одном компьютере может быть установлена коммерческая версия Гудини, в которой производятся все необходимые ассеты, а еще на десяти с этими ассетами внутри Unity или Unreal могут работать другие люди, не платя за дополнительные рабочие места.

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

При этом Houdini Engine for Maya/3dsMax etc для пользователей с лицензией FX остаются платными.

 
Категория:Gamedev

Такое случается, если вы используете фокусировку на объекте (Space+G). В этом режиме Гудини автоматом подстраивает клиппинг под размер объекта, что приводит к непредсказуемым результатам.

Это поведение можно отключить в настройках вьюпорта. Входим в настройки (клавиша D над вьюпортом), выбираем меню View. Там нас интересует раздел Clipping. Можно включить Homing Auto Adjust в Neither clip plane и вручную вписать нужные параметры клиппинга в параметры Near/Far Clip Planes.

Если же у вас включена и залочена камера, то эти параметры нужно менять уже на ней, во вкладке View — Near Clipping/Far Clipping.

 
Категория:Интерфейс
  1. Рампу необходимо менять на верхнем уровне, то есть на самом VOP, менять ее на ноде Ramp Parameter внутри ВОПа не получится, это всего лишь значения по умолчанию.
  2. Если у вас используется несколько рамп, ОБЯЗАТЕЛЬНО нужно изменить имена этих рамп на разные, иначе они будут ссылаться на один и тот же параметр. Иногда при смене имени результат появляется не сразу, рампы как бы залипают. В этом случае нужно или нажать кнопку Force compile или удалить и заново создать Ramp parameter.
 
Категория:SOP

Эта проблема часто возникает, когда частицы создаются на импортированных моделях. Дело в том, что при создании частиц на геометрии, с нее импортируются атрибуты, в том числе shop_materialpath, отвечающий за материал. А при наличии на точках атрибута shop_materialpath, Гудини считает, что их нужно рендерить как спрайты. Но самих спрайтов нет, поэтому и появляются черные квадраты.

Помимо атрибута shop_materialpath за наличие спрайтов также отвечают атрибуты spriteuv, spritescale, spriteshop, которые создаются нодой POP sprite. При наличии хотя бы одного из них будут также отображаться спрайты.

Можно удалить атрибуты спрайтов нодой Attribute delete или же просто выключить их отображение во вьюпорте. Настройки (клавиша D над вьюпортом), вкладка Geometry, галка Display Sprites.

 
Категория:Частицы

Чтобы функция возвращала массив, нужно при ее объявлении использовать слово function, в противном случае выпадет ошибка.

function int[] foo()
{
int array[] = {1,2,3};
return array;
}

 
Категория:VEX

Нажать на параметр правой кнопкой, выбрать в меню: More/View Dependencies. В списке под «плюсиком» будут все ноды с параметрами, в которых есть ссылка на текущий. Там же можно выбрать ноду и перейти к ней, нажав на стрелку справа снизу.

 
Категория:Интерфейс

Для проверки вхождения точки-примитива-вертекса в группу есть функции inpointgroup(), inprimgroup(), invertexgroup().

Но удобнее использовать виртуальный атрибут @group_название

В этом атрибуте будет 0, если элемент не принадлежит группе, и 1, если принадлежит.

Таким образом проверку на вхождение в группу start можно осуществлять так:

if @group_start==1 ...
или
if (@group_start) ...
 
Категория:VEX

Очевидный способ — использовать функции point(), prim(), vertex(), detail(), где первым аргументом указать номер входа.

Есть более простой синтаксис, который выглядит так:

@opinput1_P, i@opinput2_index, v@opinput3_dir

Указание типа происходит по стандартным правилам. После знака @ ставим opinput номер входа и через нижнее подчеркивание название атрибута. Нумерация начинается от нуля.

При этом берется атрибут с элемента с таким же номером, который отрабатывается Вранглом в данный момент. Если Врангл запущен по точкам и отрабатывается точка номер 10, то и с другого входа атрибут будет прочитан с точки номер 10.

Но также у ноды Wrangle есть параметр Attribute to match. В случае его наличия, будет проверяться не номер элемента, а значение в этом атрибуте, например id. Значит, что атрибут будет читаться не с текущего номера элемента, а с элемента, у которого id совпадает.

 
Категория:VEX

В Вексе можно прочитать и записать атрибут на геометрии в синтаксисе тип@название. Если тип не указан, а атрибут не находится в списке «известных», то он получит тип Float.

ТипСинтаксис
floatf@имя
vector2u@имя
vectorv@имя
vector4p@имя
inti@имя
matrix22@имя
matrix33@имя
matrix4@имя
strings@имя
dictd@имя

Существуют атрибуты с известным типом, который автоматически распознается вексом. В их случае тип указывать необязательно.

ТипАтрибуты
vectorP, accel, Cd, N, scale, force, rest, torque, up, uv, v
center, dPdx, dPdy, dPdz в Volume wrangle
vector4backtrack, orient, rot
intid, nextid, pstate
переменные индексирования: elemnum, ptnum, primnum, vtxnum, numelem, numpt, numprim, numvtx
group_*
ix, iy, iz, resx, resy, resz в Volume wrangle
stringname, instance

Таким образом можно не указывать тип атрибута, если он типа float, а так же для известных атрибутов. Во всех остальных случаев при первом упоминании атрибута в коде этот тип указывать обязательно. После того, как в коде уже был указан тип атрибута, дальше к нему можно обращаться без типа.

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

 
Категория:VEX

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

В этот аргумент записывается или номер входа Врангла, с которого забирается значение (включая отрицательные числа для Spare inputs), или же путь до нужной ноды в формате «op:…».

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

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

Дословный перевод хелпа

Geohandle — это идентификатор геометрии, на которой происходит запись. На данный момент единственное возможное значение — ноль или geoself(), то есть текущая геометрия в ноде. Этот аргумент может быть использован в будущем, чтобы дать возможность записи в другие геометрии.

По хорошему нужно писать в этот аргумент функцию geoself(), но это функция-пустышка, которая всегда возвращает ноль. Поэтому записывать в geohandle ноль или geoself() — исключительно вопрос философии разработки и читаемости кода. Главное — не путать этот аргумент с номером входа Врангла.

 
Категория:VEX

Сначала убедитесь, что у вас не выставлен флаг Template на других нодах. Если все правильно, то можно просто закрыть вкладку вьюпорта, нажав на крестик на табе, и после этого плюсом добавить вьюпорт (Scene view) заново.

Поскольку это частая проблема, в SideFX Labs даже добавили пункт меню Help/Reset viewport.

 
Категория:Ошибки

Если перезагрузка системы, а также обновление драйверов видеокарты не помогают, можно попробовать удалить папку HoudiniXX.X в «Моих документах», предварительно забэкапив всё нужное оттуда — ассеты, шелфы, houdini.env и так далее. При следующем запуске Гудини создаст ее заново и пересчитает кэш.

 
Категория:Ошибки

Короткий ответ — нет, но на практике это может зависеть от конкретных нод.

Векс — язык быстрый, но все равно высокоуровневый. Большинство стандартных нод скомпилированы и будут выполняться быстрее. Другое дело, что ноды меняются, обрастают новым функционалом и не всегда работают оптимально. Проблема в том, что это можно проверить только опытным путём, сравнивая время исполнения ноды и аналогичного кода во Врангле через Performance Monitor.

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

 
Категория:VEX

Если при загрузке проекта возникает окно со множеством ошибок, не спешите паниковать.

Раздел Warning с записями типа «Skipping unrecognized parameter» чаще всего можно смело игнорировать. Гудини жалуется, что поменялись версии каких-то ассетов и на них изменились параметры.

Самая важная и критичная ошибка это The following node types are using incomplete asset definition. Она означает, что Гудини не нашел нужных для работы проекта ассетов и они будут заменены пустым сабнетом. Единственное исключение — если ассет был разлочен на момент записи, тогда его внутренности сохранятся в проекте. Если вы столкнулись с такой ошибкой, обязательно установите нужные ассеты в проект через меню Assets/Install asset library.

 
Категория:Ошибки

Войти в параметры вьюпорта, для этого нужно нажать над вьюпортом клавишу D. В появившемся окне выбрать вкладку Guides.

Draw Time (FPS) включает отображение FPS. На старых версиях этот параметр назывался Show Time.

Geometry information — Always On включает отображение числа точек и примитивов.

 
Категория:Интерфейс

На фтп-сервере SideFx: ftp://ftp.sidefx.com/public/

 

В Embedded сохраняются только ассеты, которые реально есть в сцене. Если вы подготовили ассет, но в сцене нет ни одного его инстанса, то он сотрется из проекта. Поэтому с Embedded-ассетами нужно работать очень аккуратно, можно потерять всю работу.

 
Категория:Ассеты

Before first create — вызывается один раз за сессию, когда первый инстанс ассета создается в проекте. Когда создается второй — вызов не происходит.

On Created — вызывается, когда создается инстанс ассета в сцене.

On Loaded — вызывается, когда ассет загружается вместе с проектом или копируется с клипборда.

On Updated — вызывается, когда обновляется Definition ассета.

On Deleted — перед удаление ноды. Включая создание нового проекта, открытие нового файла проекта или выход из Гудини.

After Last Delete — после того, как последний инстанс ноды удален из сцены.

On Input Changed — когда меняются входы у ноды (присоединяются новые ноды, удаляются связи, меняется их порядок).

On Name Changed — когда меняется название ноды.

On Install — когда определение ассета добавляется в проект через меню Assets/Install Asset library. Так же сохранение изменений ассета запускает ивенты On Uninstall и On Install.

On Uninstall — Когда определение ассета удаляется из сессии.

 
Категория:Ассеты

Такое случается, например, при изменении длины таймлайна, ФПС и так далее. Нужно в самой верхней ноде включить и выключить галку Unload во вкладке Common.

Также не забывайте при изменении параметров таймлайна менять параметры вкладки Channel в нодах-генераторах.

 
Категория:Chop

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

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

У нас есть подробный курс об этом контексте: https://gum.co/chopnet

 
Категория:Chop

К сожалению, в ЧОПах Spare input не работает (по крайней мере в большинстве случаев), поэтому нужно записывать полный путь до нужной вам ноды.

 
Категория:Chop

В меню Edit — Preferences — General User Interface — Global UI Scale.

Или добавить в houdini.env строку вида HOUDINI_UISCALE=125

По сути это размер интерфейса, а точнее DPI в процентах от значения по умолчанию. 100 — исходный размер. 200 — в два раза больше.

Автор вопроса:
 Алексей
 
Категория:Интерфейс

По сути ничем. И то, и то — три флоата. Но вектор можно трансформировать нодами типа Transform, которые определяют положение в пространстве.

Если говорить точнее, то у вектора установлен тип «vector» в Typeinfo-метадате. Подробнее почитать про разные типы данных можно по ссылке.

Если вы хотите в Вексе изменить тип атрибута, то можно воспользоваться функцией setattribtypeinfo().

 
Категория:Общие вопросы

Через переменную окружения HOUDINI_MAX_BACKUP_FILES.

Можно добавить ее в Houdini.env, например так:

HOUDINI_MAX_BACKUP_FILES=3

При значении ноль ограничения снимаются.

 
Категория:Общие вопросы

Houdini.env — это файл, в котором задаются переменные окружения, необходимые для работы Гудини и плагинов (например движков рендера). Этот файл расположен в папке Documents/HoudiniXX.X

Правила:

  1. Если строка начинается со знака #, она считается комментарием и не учитывается.
  2. В левой части ставится название переменной (большими буквами), знак «равно» и значение. Например PATH=c:/ProgramData/Redshuft/bin
  3. Если в путях есть пробелы, путь необходимо полностью заключить в кавычки (по крайней мере, так написано в хелпе).
  4. Чтобы добавить новое значение к уже имеющемуся, необходимо добавить название этой переменной со знаком доллара — по сути это название раскроется до его предыдущего значения. Разные части отделяются друг от друга точкой с запятой. Пример: PATH = c:/ProgramData/Redshift/bin;$PATH — это значит, что мы берем новый путь и добавляем его к уже имеющимся путям в переменной PATH. Если где-то в конце вы добавите новый путь без упоминания $PATH, то предыдущие пути не будут найдены, так что будьте внимательны.
  5. Значок «&» означает «значение по умолчанию» для стандартных переменных Гудини. Этот символ необходимо добавлять ОДИН РАЗ на переменную. Обратите внимание, при автоматической установке плагины могут добавлять их без проверки, так что имеет смысл вручную удалить лишние, оставив только один знак «&» в самом конце. Важный момент! Перед знаком «&» не должно быть пробелов! HOUDINI_PATH = c:/ProgramData/Redshift/Plugins/Houdini/18.0.391;&

Пример:

PATH = c:/ProgramData/Redshift/bin;$PATH
HOUDINI_PATH = c:/ProgramData/Redshift/Plugins/Houdini/18.0.391;


HOUDINI_NVIDIA_OPTIX_DSO_PATH = C:/Users/Stas/Documents/houdini18.0\optix

## QUIXEL ##
HOUDINI_PATH = "$HOUDINI_PATH;C:\Users\Stas\Documents\Megascans Library\support\plugins\houdini\3.4.0\MSLiveLink;&"

 

Создаем Null, привязываем его к камере, отодвигаем по Z. Создаем Chop network, в нем две ноды Get World Position — в одну вставляем камеру, во вторую Null. Их втыкаем в ноду Vector, в которой нужно выбрать Operation — Distance between A and B. На выход добавляем Null и называем его OUT.

Теперь в Чопе, в канале с названием «dist» будет расстояние между камерой и нулем. Осталось прочитать его через выражение Chop() в параметре Focus Distance.

 
Категория:Obj

Выбрать камеру в режиме Manipulate, щелкнуть правой кнопкой по хэндлу и выбрать Focus Handle. Горячая клавиша «Z».

Кубик — точка фокуса, стрелки обозначают глубину резкости и меняют диафрагму в установках камеры.

Сами установки глубины резкости находятся во вкладке Sampling камеры. Focus distance — расстояние, F-Stop — диафрагма.

 
Категория:Obj

В Sublime выбрать пункт меню Preferences/Package Control. Набрать «Install package». В появившемся окне найти и установить VEX Syntax. Теперь синтаксис Векса появится в списке в меню View/Syntax.

 
Категория:VEX

Самое простое — включить выход нужной ноды в один из входов Врангла и подставить в функции номер этого входа. Если входов не хватает, вы всегда можете добавить сколько угодно Spare input через меню шестеренки и Add spare input, подключить в них нужные ноды и обращаться к ним по номеру со знаком минус (-1, -2 и т.д.).

Второй вариант: использовать синтаксис op:/путь/до/ноды

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

npoints("op:../sphere1");

То есть, относительный путь работает так же, как и в Hscript. Абсолютный путь будет таким:

npoints("op:/obj/geo1/sphere1");

 
Категория:VEX

В вексе для этого есть две функции:

atof("строка") - преобразует строку во флоат
atoi("строка") - преобразует строку в целое число

При этом в строке не должно быть других символов, кроме цифр, десятичной точки и знака «е» для записи типа 1.25e+5

Например atof(«12.5») вернет число 12.5

Для целых чисел есть функция opdigits(), которая возвращает последнюю последовательность целых чисел из строки. Обычно она используется, чтобы парсить пути до нод, но и для обычных строк работает.

opdigits("gfhfhg123jshfh") вернет 123

Если же в строке есть другие символы, кроме цифр, и нужно вытащить из нее флоат, то задача сводится к удалению лишних символов из строки. Это делается с помощью регулярных выражений (regular expression, regexp).

Функции для работы с регулярными выражениями в вексе начинаются с приставки «re_».

s@in = "gfhdg12.5jahd";
@out=atof(re_replace(r"[^.0-9]+", "", @in));
В @out окажется число 12.5

Во второй строке мы используем функцию re_replace, которая ищет в атрибуте @in подстроку по регулярному выражению [^.0-9]+, то есть все, кроме точки и цифр 0-9. Буква r перед кавычками важна. 

Дальше мы заменяем найденное на пустую строку «». На выходе у нас остаются только цифры и точка, к которым мы уже применяем atof.

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

s@in="123hjh765.4hfhsd12jsh";
string array[] = re_split(r"[^.0-9]+", @in);

Эта функция создаст массив строк, а в качестве разделителя использует все то же выражение. Единственное, если исходная строка начинается не с цифры, то в начале массива создастся пустой элемент, надо это учитывать. В данном примере на выходе будет массив из строк “123″, “765.4″, “12″. Дальше уже можно по этому массиву идти циклом и использовать atof().

 
Категория:VEX

Это скрытая переменная, которая появляется, когда на точках есть атрибуты @life и @age. В этом случае @nage становится равен @age/@life, то есть это нормализованное значение жизни частицы, от нуля (рождение) до единицы (смерть). Это очень удобно, потому что @nage можно напрямую втыкать в рампы, меняя разные значения (альфу, цвет, размер и т.п.) в зависимости от возраста частицы.

Кстати говоря, @nage может существовать и без Pop network, достаточно создать атрибуты @life и @age, и можно к нему обращаться.

 
Категория:Частицы

Force — это вектор, часть которого прибавляется к скорости частицы каждый шаг симуляции. Таким образом, если Force неизменен, то скорость будет увеличиваться бесконечно. Единица измерения времени — секунда, поэтому каждый шаг симуляции используется часть вектора Force, равная 1/(FPS*Substeps).

Wind — это вектор скорости, к значению которого стремится каждая частица, некий предел. Этот атрибут называется targetv. На то, как быстро частица достигнет этой скорости, влияет Air resistance (атрибут airresist). Например, когда вы добавляете ноду Pop Drag, она добавляет нулевой атрибут targetv, то есть каждая частица будет замедлять движение.

Максимально подробно про управление системой частиц я рассказываю в курсе «Частицы в Гудини».

 
Категория:Частицы

Во-первых можно в Advect type записать не Velocity, а Force, но это изменит вид симуляции.

Во-вторых, на вашем Smoke object в DOP, где изначально создается симуляция, во вкладке Initial Data можно переключать Border Type на Repeat. В таком случае на границе будет сэмплиться предыдущая скорость.

 
Категория:Частицы

Это контекст для работы с 2D-изображениями. По сути маленький нодовый компоузер типа Nuke или Fusion. Его можно использовать и для компоузинга финального рендера, но чаще он применяется для подготовки необходимых текстур, добавления нойзов, каких-то пиксельных вычислений и преобразований.

Прочитать результат работы COP-нетворка можно в любой ноде, которая принимает на вход 2D-текстуру с помощью синтаксиса op:/obj/Cop_net/OUT

 
Категория:COP (IMG)

Чтобы секвенция кадров из COP читалась без глюков, нужно в конце выражения добавить [$F].

Например:

op:/obj/cop_network/OUT[$F]

 
Категория:COP (IMG)

Это Wrangle, в котором автоматически вычисляются трансформации не только позиции, но и атрибутов типа N, v и так далее. Изменения позиции должны записываться не в @P, а в переменную pos. Остальные вектора будут трансформироваться в соответствии с методом, указанным во вкладке Derivatives.

В этом варианте использования Deformation Wrangle дает такой же результат, как нода Atribute reorient.

 
Категория:SOP

Attribute Wrangle (VOP) — основная нода для работы с геометрией. В ней через значок собаки (или Bind в VOP) мы можем обращаться к атрибутам на геометрии: @attr, @P, @N

Point, Primitive, Vertex Wrangle (VOP) — просто предустановки Run Over на ноде Attribute VOP. По сути вместо них можно пользоваться нодой Attribute Wrangle (VOP) с нужным вам параметром Run Over.

Volume и HeightField Wrangle (VOP) — нода для работы с волюмами. Volume от Heightfield отличается только названием. В них через значок собаки (или Bind в VOP) мы можем напрямую читать и записывать значения вокселей по названию волюма: @density, @height, @mask

Rig Attrib Wrangle (VOP) — нода из Houdini 18.5 для работы с ригом KineFX. От Attribute Wrangle отличается наличием вкладки Rig, в которой можно задать использование Viewer State (то есть хэндлов во вьюпорте) и подсчета трансформаций на входах-выходе.

 
Категория:SOP

С помощью ноды Attribute Promote перенести атрибут на Деталь в режиме Minimum или Maximum. Также на Promote можно изменить название атрибута (Change new name) и убрать галку Delete Original, чтобы сохранить исходный атрибут.

Кстати, таким же образом можно найти сумму всех значений, среднее арифметическое или медиану.

 
Категория:SOP

При установке Гудини можно выбрать опцию с установкой Энжина. Если вы ее пропустили, то можно вручную скачать нужный билд с Гитхаба. Там в левом верхнем углу можно выбрать подходящую версию Гудини, после чего нажать зеленую кнопку и выбрать Download ZIP. В описании Гита обычно лежит руководство по установке.

Houdini Engine For Unity

Houdini Engine For Unreal

Houdini Engine For Unreal v2

 
Категория:Gamedev

Энжин.

Проверить произношение английских слов можно в гугле, введя слово + произношение. Например, так.

 
Категория:Gamedev

Нельзя. При работе Энжина в фоне запускается Гудини, поэтому он может использоваться только в режиме редактора.

 
Категория:Gamedev

Это плагин, который позволяет открывать цифровые ассеты Гудини в других программах, например в Unity3D и Unreal. Вы создаете ассет со всеми необходимыми параметрами, после чего загружаете его в Houdini Engine, и можете настраивать геометрию в интерактивном режиме.

 
Категория:Gamedev

Откройте окно Animation editor, выберите нужные вам каналы анимации, после чего щелкните правой кнопкой по названиям каналов в списке Channel list. В открывшемся меню выберите Channels/Extrapolation. Там можно задать общее поведение, а также поведение канала анимации до первого и после последнего ключевого кадра.

 
Категория:Анимация

Выберите инструмент Pose (иконка в виде куклы слева от вьюпорта), после этого в меню над вьюпортом включите галку Motion Path. Появится траектория движения выбранного в Obj объекта. Если вы хотите, чтобы траектория оставалась на экране при переключении объектов, щелкните на ней правой кнопкой мыши и Выберите «Persistent». После этого траектория будет сохраняться во вьюпорте даже если выключить сам объект.

 
Категория:Анимация

В Fog в каждом вокселе хранится плотность (или другие значения типа температуры) в этом месте. Именно в таком формате, например, хранятся дым, огонь и так далее.

В SDF в вокселе хранится расстояние до поверхности объекта. Если воксель находится внутри объекта, то знак минус, если снаружи, то знак плюс, на поверхности ноль. Таким образом через один volume sample можно выяснить, находится ли точка внутри объекта. Поэтому SDF волюмы часто используются для вычисления коллизий и любых поверхностных эффектов.

 
Категория:SOP

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

В VDB хранятся только те воксели, в которых реально что-то есть. Вокруг поверхности объекта создается так называемый Band, пояс из определенного числа вокселей. Все, что за пределами этого пояса, не учитывается.

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

 
Категория:SOP

Это красный флаг на ноде, который замораживает текущее состояние ноды и сохраняет его в проекте. После этого все, что находится выше этой ноды, не будет пересчитывается. При этом увеличивается размер проекта на диске, что приводит к большему времени загрузки и сохранения. В случае импорта Fbx-файлов с анимацией старым методом (через меню File), необходимо замораживать входящие ноды (так делается по умолчанию), чтобы избежать глюков в анимации.

Альтернативы:

Нода Stash — делает то же самое, сохраняет состояние в проекте по нажатию кнопки.

File cache — сохраняет состояние на диск в виде секвенции кадров. В отличие от предыдущих вариантов может работать с анимацией. Но файлы кэша на диске могут занимать значимое место.

 
Категория:SOP

Рендер честного ДОФа — долгий процесс даже для GPU-движков. Если сцена простая с твердыми телами, без полупрозрачных объектов и дыма, то композный доф сработает на ура. Если же есть дым, полупрозрачные объекты типа шурешек, преломления и мелкие детали, то, возможно, придется считать честный ДОФ.

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

 
Категория:Render

Obj-нодой Switcher. На ее вход подаются камеры, их можно переключать. Саму ноду Switcher можно выбрать в качестве камеры во вьюпорте и в РОП-ноде.

 
Категория:Obj

Через констрейнты. На Obj-ноде во вкладке Transform внизу включаем галку Enable Constraints и нажимаем круглую зеленую кнопку справа. Появится список пресетов, там есть Follow path. Нужно будет выбрать кривую, а также опциональные объекты, отвечающие за направление поворота объекта и за направление вверх. В получившемся чоп-нетворке можно поменять анимацию (по умолчанию там стоит движение на протяжении всего таймлайна. Для гладкого скольжения кривая должна быть типа Nurbs.

Констрейнты — это ЧОП-нетворки, которые полностью перезаписывают значения всех трансформов.

Подробно про них я рассказываю в курсе про процедурную анимацию:

https://gum.co/chopnet

 
Категория:Obj

Такое встречается на встроенных видеокартах некоторых ноутбуков. Обновите драйвера.

 
Категория:Ошибки

Это билд Гудини, который не прошел полноценное тестирование, но в котором уже исправлены многие баги. После тестирования он превращается в Production build. Если какой-то баг не дает работать, можно скачать Daily build, но пользоваться им на свой страх и риск. По опыту особых проблем с ними не было.

Посмотреть список исправлений к каждому билду можно здесь: https://www.sidefx.com/changelog/

 

В бэктики (на виндовых клавиатурах этот символ находится над клавишей Tab) заключаются выражения, если они стоят в строковом параметре.

Например если вы в параметр Text ноды Font запишите ch(«fontsize»), то нода подумает, что вы хотите вывести такой текст, и во вьюпорте появится надпись «ch(«fontsize»)». Если же вы заключите эту надпись в обратные апострофы, то нода фонт поймет, что вы хотите прочитать значение этого выражения, и выведет цифру 1.

Это относится ко всем строковым параметрам, например имени файла. Единственное исключение — переменные, которые начинаются со значка доллара. $F, $FSTART и так далее можно писать без бэктиков.

 
Категория:Общие вопросы

Первое, что нужно понимать: параметр Group строковой. То есть по умолчанию он считает, что в него заносится название группы. Поэтому если вы пишите сравнение атрибута, нельзя ставить пробелы между символами.

@P.y>0 - правильно
@P.y > 0 - неправильно

При использовании подобных сравнений нужно указывать Group type, на каком уровне геометрии лежит нужный нам атрибут (точки, примитивы и т.п.). В большинстве случаев Гудини определит этот уровень самостоятельно, но не всегда.

Если вы используете не просто сравнения, а выражения, то эти выражения лучше на всякий случай заключать в бэктики, обратные апострофы. В последних версиях Гудини чаще всего значение выражение вычисляется правильно и без них, но хуже не станет.

 
Категория:SOP

Вы запустили лицензию Гудини Core, в ней нет шелфов и Dop-нод для симуляций. Запустите другую лицензию.

 

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

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

 

Это простой язык выражений, которым, в основном пользуются для изменения значений параметров. У каждой ноды есть переключалка языка выражений, по умолчанию там буква «H», то есть Hscript. Можно выбрать Python. Также язык выражений можно назначить для каждого параметра индивидуально в меню правой кнопки мыши.

Выражения Hscript перечислены в этом списке: https://www.sidefx.com/docs/houdini/expressions/index.html

По большому счету, когда мы пишем выражения в окно ввода параметра, мы всегда это делаем на Hscript, кроме случаев, когда мы сами переключили язык на Python или когда над параметром помечено Vexpression — в этом случае используется Vex.

Также синтаксис Hscript может использоваться в больших скриптах, например в инструментах на Shelf или в ассетах.

 
Категория:Общие вопросы

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

Для этого есть две Vex (VOP) функции.

xyzdist() находит эту координату на поверхности, возвращает расстояние до нее, номер примитива и параметрические координаты внутри этого примитива.

primuv() по номеру примитива и параметрическим координатам внутри него возвращает значение атрибута в этой точке, интерполируя его между точками полигона.

Пример кода на Vex:

vector uv;
int prim;
xyzdist(1, @P, prim, uv);
@Cd=primuv(1, "Cd", prim, uv);

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

 
Категория:SOP

Мантра и Карма (в текущей версии) — CPU-рендеры, то есть работают на центральном процессоре. Они бесплатные, идут в комплекте с Гудини. Мантра — самый гибкий и хорошо интегрированный с Гудини движок рендера, но и самый медленный. Karma — движок, который пришел на смену Мантре в версии 18.0. Карма предназначена для работы с USD/Hydra, то есть в контексте LOP.

Redshift и Octane — GPU-рендеры, работают на видеокартах Nvidia. Поддержка AMD планируется в будущем. Эти движки быстро считают, скорость можно увеличивать, добавляя новые видеокарты в систему. Существуют некоторые ограничения. На мой взгляд из этих двоих Редшифт лучше интегрирован с Гудини. Это платные движки.

Самое важное: красиво можно сделать на любом движке рендера. Некрасиво тоже.

 
Категория:Render

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

А лучше всего использовать мой ассет. Проверен на многих крупных проектах.

 
Категория:Obj

В Network view в меню View выбрать Dependency links — Show for all nodes. Теперь, если одна нода ссылается на другую, между ними будет нарисована линия.

 
Категория:Интерфейс

Существуют разные скрипты, мне кажется, что мой наиболее удобный из всех.

 
Категория:Шейдинг

Добавить между родителем и дочерней нодой ноду Blend. В ней можно выбрать маску пэрентинга. Также эта нода позволяет блендить дочерний объект между несколькими входящими объектами — как по весам, так и последовательно.

 
Категория:Obj

Меню Edit — Preferences — Rendering. Поставить галку только на Redshift, снять галку с параметра Make all render nodes avvailable in tool palette and tab menu. Перезагрузить Гудини. Теперь в контексте Mat останутся только ноды Редшифта.

 
Категория:Шейдинг

Тянем мышкой за нижний пин на ноде, чтобы появилась линия. Отпускаем мышку и нажимаем Tab. Теперь, когда мы выбираем ноду, она сразу будет привязана к предыдущей. Это особенно актуально для Веллума, Хэйра и прочих нод, где нужно сразу привязывать три входа.

 
Категория:Интерфейс

Дело в атрибутах и их значениях по умолчанию. Если в одной из веток, приходящих на ноду Merge есть атрибут N, а на второй его нет, то он добавится на вторую геометрию со значением по умолчанию. Это касается всех атрибутов.

Решение: добавить нужный атрибут во вторую ветку.

 
Категория:SOP

Проверить проект можно через меню Render/Pre-flight Scene. Появится окно, в котором красным обозначены все внешние ресурсы: модели, текстуры, кэш, ассеты. Прямо в этом окне их можно переносить в папку проекта.

Но удобнее пользоваться скриптом: https://github.com/paulwinex/houdini_localizer

 
Категория:Общие вопросы

Group expression — Points — пресет Point valence. Создаем параметр и выбираем в нем 1. Это выражение поместит в группу все точки, у которых один сосед.

 
Категория:SOP

Нода Group — Edges — Unshared edges.

 
Категория:SOP

Нода Group Expand. У нее есть галка Flood fill to connected geometry.

 
Категория:SOP

Если мы знаем номер точки-вертекса-примитива, то через выражения point(), prim(), vertex().

Если не знаем, то запускаем цикл foreach, например по примитивам, и читаем атрибут через выражения с ноды Foreach_begin с примитива номер ноль. Поскольку в цикл затягивается только один примитив за раз, то внутри цикла будет только один, нулевой по номеру, примитив.

 
Категория:SOP

Выбрать инструмент Box handle или Box handle with pivot и выделить нужные ключевые кадры.

Второй вариант: прямо на полосе таймлайна выделяем участок левой кнопкой мыши с Shift. Потом средней кнопкой мыши можно тянуть за края участка, сжимая или растягивая ключи по времени.

 
Категория:Анимация

Щелкнуть с Shift на нужный параметр. Левая кнопка мыши — будет показан только этот параметр. Средняя — параметр добавится к имеющимся в окне аниматора каналам.

 
Категория:Анимация

Удерживаем клавишу Y и ведём курсор через связи.

 
Категория:Интерфейс

Shift+R

 
Категория:Интерфейс
 
Категория:Интерфейс

Тейки — это система оверрайдов, дословно можно перевести как «Дубль» в киношном смысле, то есть еще одна версия сцены. Для вашего сетапа можно сделать много разных тейков с вариациями параметров.

Тейки выбираются в списке в правом верхнем углу. По умолчанию там есть один тейк Main. Можно создать новый тейк, параметры поменяют цвет на коричневый. Если выключена галка Auto takes, то параметры нужно включать в тейк вручную, через меню правой кнопки мыши. Все изменения параметров сохранятся только в этом тейке.

Будьте осторожны с Auto takes, очень легко запутаться в каком тейке вы работаете.

Можно работать и без них, но при импорте Fbx через меню File Гудини переключается в тейк с анимацией, поэтому знать про них нужно.

 
Категория:Общие вопросы

Если вы загрузили Fbx с тейком и хотите удалить все тейки, оставив анимацию в Main, то:

  1. Windows/Take List
  2. Мышкой перетягиваем нужный тейк на Main и выбираем в меню Merge take (with override).
  3. Теперь остальные тейки можно удалить клавишей Del.

 
Категория:Общие вопросы

Самое простое — выделить нужные ноды, перетащить их на верхнюю полку (shelf) и создать инструмент. Теперь при нажатии на этот инструмент эта связка нод появится в любом другом проекте.

Также можно открыть две копии Гудини и перекидывать ноды через Ctrl+C — Ctrl+V.

 
Категория:Общие вопросы
Целых три урока на эту тему.
 
Категория:Ассеты

Сделать его Embedded. Для этого в меню создания ассета вместо имени файла нужно записать Embedded (с большой буквы).

 
Категория:Ассеты
  1. Через Vertex Animation Texture, VAT. Анимация точек запекается в текстуру, после чего читается в движке в шейдере.
  2. Через Алембик. Большие размеры файла.
  3. Через blendshapes. Можно сохранять блендшейпы в Fbx и анимировать в движке. Можно сконвертировать pc2 в блендшейпы (В Unity ассет Vertex Animation Tools).
  4. Сконвертировать в анимацию костей, например ассетом Labs Bones skinning converter.
 
Категория:Gamedev

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

 
Категория:Render

Сначала объединить их нодой Fuse, а потом добавить ноду Poly Path.

 
Категория:SOP

Нода Convert Lines превращает каждый отрезок кривой в полигон. Чтобы разъединить точки нужно поставить после нее ноду Facet — Unique points.

 
Категория:SOP

Нода Facet — Unique points.

 
Категория:SOP

Практически разницы нет. Одинаковые вещи можно делать и там, и там. Считайте, что VOP — это визуальная настройка над языком Vex.

В Vex удобнее работать с циклами, с условиями, с массивами. Да и в принципе написать код часто бывает быстрее, чем тыкать ноды в VOP.

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

 
Категория:SOP

Obj, Sop, Mat, Shop, Dop, Chop, Cop, Top, Vop, Lop… В каждом из этих нетворков свой уникальный набор нод, это и есть контексты. Контексты — это разные части программы, которые отличаются друг от друга, отвечают за разное и работают тоже по-разному. Контексты можно делать вложенными. Например в Sop создать контекст Mat. Это нужно, чтобы вы могли сохранить в цифровой ассет все аспекты своего сетапа.

Obj — контекст сборки сцены из объектов

Sop — контекст работы с геометрией: точками, вертексами, полигонами и т.д.

Mat, Shop — контексты сборки материалов

Dop — контекст работы с динамикой

Chop — контекст работы с процедурной анимацией

Cop (IMG2) — нодовый компоузер

Rop (Out) — контекст вывода, рендер и сохранение

Top — контекст PDG, пакетные операции, автоматизация повторяющихся действий

Vop — контекст Vex-билдера, визуальное программирование. Так же используется в шейдерах.

Lop — контекст работы с USD.

 
Категория:Общие вопросы

Shop — это старый контекст для создания шейдеров. В нем один шейдер отвечает за один объект. Смешивать материалы можно, но сложно.

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

Проще говоря, работайте с Mat, не ошибетесь.

Единственное, если вы делаете шейдеры под Redshift, то в Shop будет работать немного удобнее, потому что в списке остаются только RS-совместимые ноды.

 
Категория:Шейдинг

Русские буквы в путях. Важно, чтобы в системе имя пользователя и названия системных папок типа «Мои документы» были латинскими буквами. Если винда установилась на русском, то поменять локаль можно, не переустанавливая систему, погуглите. Вообще в целом русских букв и специальных символов не должно быть в путях и названиях файлов, с которыми работает Гудини.

Иногда русские буквы появляются из-за работающего One drive.

 
Категория:Ошибки

Лучше оба. Vex нужен для работы с геометрией и атрибутами. Python — для автоматизации работы, создания новых нод и так далее.

 
Категория:Общие вопросы

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

 
Категория:Интерфейс

Скорее всего проблема в претрансформации. Если нажать средней кнопкой мыши на Obj-ноде, можно увидеть графу Pre-transform. Если она не пустая, то вытащить претрансформы обратно в параметры ноды через Modify Pre-Transform — Extract Pre-Transform.

 
Категория:Obj

Есть Obj-нода Extract Transform. В ней указывается начальная геометрия и трансформированная геометрия. Сама по себе эта нода выступает в качестве нуля, к которому можно подключать другие ноды.

Если нужно перенести на уровень Obj трансформации точки (например поворот и скейл через N, orient, pscale и так далее), то в SOP добавляем Point VOP, в нем ставим ноду Make Instance transform и следом за ней Extract transform. Make Instance Transform позволяет из разных атрибутов трансформации получить матрицу, а нода Extract transform из матрицы получить углы эйлера и скейл. После чего можно записать повороты в атрибут и прочитать этот атрибут на уровне Obj выражением point().

Также существует obj-нода Rivet, которая позволяет вытащить трансформации с поверхности модели по группе точек. Это может быть полезно для прикрепления какого-то объекта к геометрии, которая деформируется в SOP. Альтернатива — нода Sticky, которая приклеивается к поверхности по UV-координатам, а не по номерам точек.

 
Категория:Obj

Можно, сами принципы моделинга не меняются, все инструменты в Гудини есть. На мой взгляд, все-таки, удобнее моделить в Максе-Майе-Блендере-Модо, и приносить в Гудини готовые модели.

Про директ-моделинг в Гудини есть урок от Алекса Удилова:

 
Категория:Общие вопросы

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

Урок про замену старых нод. Но он сам уже тоже старый. 🙂
 
Категория:Общие вопросы

Ответ: Да, можно. Indie-лицензия не отличается от коммерческой. Единственное, вы не сможете в ней открыть проекты и ассеты из коммерческой версии. Других технических ограничений нет.

 

Вкладка Render — Display as. Там можно выбрать Hidden или любой другой режим отображения. Особенно полезно, если геометрия в ноде тяжелая.

Второй вариант — включить ноду в Forced в РОП-ноде.

 
Категория:Obj

Во вкладке Render поставить галку Display. Теперь, если в параметре Display будет ноль, геометрия с ноды не будет отображаться и рендериться.

Второй вариант — внутри Sop-нетворка сделать Switch с нодой Null.

 
Категория:Obj

Если нужно отрендерить несколько РОП-нод, подключаем их к ноде Merge и нажимаем кнопку Render уже на ноде Merge. Важно, что при рендере анимации на всех РОП-нодах должен стоять диапазон Render Frame Range Only (Strict).

В случае рендера в Redshift, на ноде Merge нужно нажать Controls, и выбрать Order: Node by Node. И нажимать кнопку Render уже из этого окна.

 
Категория:Render

На любые, начиная с Indie.

 
Категория:Render

На рендер-нодах есть вкладка Objects.

Candidate objects (Lights) — использует флаги видимости на нодах на момент рендера

Force objects (Lights) — включает объекты и светильники в рендер.

Exclude objects (Lights) — исключает объекты и светильники из рендера.

 
Категория:Render

Ctrl+цифра от 1 до 5 — сохранить закладку

Цифра от 1 до 5 — переключиться на сохраненную закладку

 
Категория:Интерфейс

Shift+S

 
Категория:Интерфейс

Правой кнопкой мыши щелкнуть по иконке «булавка» и выбрать цифру. Табы с одинаковыми цифрами привязаны друг к другу.

 
Категория:Интерфейс

Ctrl+Щелчок на разделитель панели — поменять панели местами

Alt+Щелчок на разделитель панели — горизонтальная/вертикальная раскладка

 
Категория:Интерфейс

Переключитесь на английскую раскладку клавиатуры

 
Категория:Интерфейс