Процедурно - сферочный угар
Покрутим сферки и рассмотрим небольшой пример с атрибутом pscale и как его можно использовать.
Создаем мистера "дефолтный свин" в ранее созданом geo
Далее для дальнейшей удобной маршрутизации создаем Null который называем как хотим
Рассмотрим крайнюю левую ветку которые в дальнейшем мы сможем раскопировать и наслаивать друг на друга
Чтобы вы понимали логику на данный момент у нас есть - мистер свин справа и скаттеренные сферки слева, которые мы объединяем нодой мердж, чтобы после нее получить единый объект.
Первая нода Peak. Она как бы раздвигает объект, от его центрального пивота во все стороны, это необходимо, чтобы в дальнейшем наши сферки не плавали в оригинальном меше свиньи.
Scatter - это собственно то что позволяет нам получить точки из входной геометрии. На данный момент нас интересуют два параметра - Force total count - число точек которые будут сгенерированны и Relax iterations - это опция распределяет, эти точки более упорядоченно по входной геометрии.
Можете смело играться с этими значениями, лишь бы в дальнейшем вам хватило терпения и мощностей это просчитывать
Итак - сейчас у нас есть 14516 точек. Они абсолютно пустые и не имеют никаких атрибутов кроме атрибута P (положение точки в пространстве)
Ребята! Очень важно приучить себя почаще смотреть на Geometry spreadseet. ЭТО ОЧЕНЬ ВАЖНО. Когда я только начинал осваивать гудини я не понимал как удобно видеть все ваши атрибуты в одном месте. Спасибо Станиславу Демченко с его огромным багажом туториалов, которые показывают насколько важно визуально отслеживать параметры всех ваших аттрибутов.
Гоу дальше!
Так как мы не имеем никаких атрибутов кроме P, следущий наш шаг, создание атрибута который по сути будет влиять на скейл сферок, которые будут появляться как в превью выше.
Создаем ноду "point" нажимаем на плюсик и выбираем из списка атрибут Scale(pscale). Я прям чувствую запах горящих поп тру гудиньщиков которые напишут что можно это сделать в pointwrange или attribute wrangl, но будем последовательны, работа во вранглах и вообще работа с синтаксисом должна быть плавным переходом от подобных решений и я не считаю разумным кидаться в юных падаванов строками кода.
в VEX expression выбираем constant value - постоянное значение, делаем его чуть меньше 1 и смотрим в спредшит.
Мы видим что помимо того что у нас появился новый аттрибут Pscale, каждая точка приобрела значение выставленное в ноде point.
Итак половина работы сделана!
Чтобы визуально увидеть результат давайте по фасту создадим ноду copy to points и обычную сферку.
Для работы в редшифте поменяем сферку с примитива на полигональное отображение и вуаля на каждую точку созданную ранее в скаттере и имеющие аттрибут пскейл мы имеем сферку с заданым уровнем скейла.
Также можете сферку сделать на низкое значение, чтобы они не были сферхгиганскими, а вот теперь начинается экшн!
Самый сок в гудини это работа с аттрибутами. По сути одна из фишек гудини это прямой доступ к любым аттрибутам, любых объектов. Если в C4D мы имеем определенные модули в которые вшиты определенные решения заранее то в гудини у нас такого ограничения нет и мы можем сделать все что придет нам в голову.
И снова встает вопрос как мы будем работать с атрибутами - есть два пути либо визуальное программирование на основе vop либо на основе кода. Для начинающих очень важно понимание что VOP и VEX это суть одно и тоже, все дело именно в оболочке. Можно взять за аналогию блюпринты / C++ в UE.
Так как наша аудитория по большей части - начинающие свой интересный путь в гудини, то работать в основном мы будем в VOP.
Так как мы будем манипулировать атрибутом pscale то и ноду VOP, нам необходимо создать сразу после ноды point где мы и создали этот атрибут.
Заходим внутрь VOP
Что мы видим - левый столбец это по сути входящая геометрия с атрибутами по умолчанию. На данный момент мы будем рассматривать три аттрибута. P / Cd / и наш атрибут pscale. Как видно из названия правого блока это выходные данные. На данный момент соедененны атрибут P. (позиция точек)
Вы спросите а как же быть с аттрибутом pscale, мы не видим выходного порта под названием pscale.
И тут на помощь на придет нода bind export
Основная ее задача это вывод данных вне блока geometryvopoutput1. Задаем теперь вопрос, что вообще мы хотим получить на выходе?
Нам необходимо, чтобы аттрибут пскейл менялся от значения 0, до нужного нам значения допустим 1 и благодаря этому будет менятся скейл сферок. У нас есть позиция точек P, нам необходима некая карта шума, которая будем влиять на наш атрибут пскейл.
Нажимаем TAB и вводим Noise. Как вы видите гудини содержит в себе довольно внушительное кол-во различных нойзов, давайте выберем Turbulence noise.
Чтобы нойз действовал на нашем обьекте, нам необходимо передовать положение каждой точки ему, поэтому подключаем P к pos нойза.
Выставляем похожие на мои значения, но нас крайне интересует параметр амплитуды
допустим ставим 3 и подключаем выход нойза в bind ноду, которая выведет наши изменения амплитуды нойза в значения пскейл.
Выходим на уровень выше и что мы видим ?
Визуально ничего не изменилось
Но нажимая на нуль, ниже копи ноды, мы видим, что наши сферки уже имеют интересный рисунок скейла.
Чтобы отслеживать наш нойз, мы также можем сделать следущий финт.
Возвращаемся в VOP
И подключаем выход нойза в выходной атрибут Cd - атрибут цвета.
Теперь мы прекрасно видем по окрашиванию точек, какой у нас рисунок нойза.
Итак мы получили то, что задумали, Дальше анимация.
И вот тут мы снова возвращаемся в VOP и на нойзе ищем парамметр offset и жмякая на шестеренку выбираем Promote parametr.
Это выведет данный параметр на уровень выше прям в ноду pointvop, он появился здесь.
Далее мы выбираем одну из осей по которой будет двигаться нойз. Допустим X и прописываем в нем самый частый экспрешн - $F (изменения каждый кадр = 1 единицы) или $T (изменения каждую секунду = 1 едини
Я выберу $T чтобы нойз двигался помедленнее и двигая таймлайн мы видим, что сферки скейлятся по нойзу.
Собственно это и весь типс.
Как вы видите остальные ветки — это различные вариации того, что я сделал в самой левой ветке.
Балуйтесь на здоровье!