Render.ru

Стряхнуть частицы

nanobes

Активный участник
Рейтинг
16
#1
ну хоть первая конкретная тема будет, может не заглохнет ветка.
пока думаю над этим: есть объект, на нём частицы (скажем банка пива - на ней капли (конденсат) - просто для примера). объект движется в пространстве категорически меняя направление и скорость. задача - периодически стряхивать с объекта частицы. крупные капли должны стряхиваться вперёд мелких. всё лучше чем мусолить чем гуди лучше :)))
 
#2
Разбираться будем вместе тк я не знаю. Знаю что если в POP создать ноду event, в event name дать ей название,в rule написать $SPEED>нужного числа, а в activation, например, ноды force написать popevent("название из event namе"), то сила будет действовать на частицу со скоростью больше нужного числа(это нам и надо). А как заставить двигаться частицы вместе с банкой я пока не знаю.
 
#4
Я все еще не забил ) Вот нашел тутор из книжки с похожим результатом http://www.awn.com/articles/tutorials/ithe-magic-houdinii-initial-velocity
Значит надо сделать так что-бы частицы наследовали скорость не только во время рождения, а на протяжении всего существования. Тогда получится. Как это сделать - (не поверите) не знаю )
 
#5
Ага! Я таки мозг! После всего сделанного в уроке добавляем в POP нетворк ноду attribTransfer в строке SOP выбираем trail1, в строке points вибираем "v" (он только один там и есть),создаем ноду event,event name: speed; rule:$VX(в моем случае сферка двигается только по оси X)<2(нужная нам скорость),
в attributeTransfer в activation пишем popevent("speed"). И они стряхиваются! Ну настроить красивости и зависимость от массы должно быть не сложно.
P.S. Хух, чуть не родил пока понял. К томуже давно гудю не открывал( сейчас у меня приоритет - обучение 2д рисованию), но оно работает!
Если недопонял - спрашивай, объясню :) Отпишись если получиццо. Знал бы как прикремить файл - прикрепил-бы, но аттачатся только картинки.
 

stass3d

Активный участник
Рейтинг
7
#6
Записал видео и опубликовал на сайте:

http://houdini-howto.com/content/opadayushchie-kapli-urok-po-partiklam
 

MpaKo6ec

Активный участник
Рейтинг
12
#7
Большое спасибо за урок, но тут возникла проблема. дело в том что после переноса атрибута позишена с уровня сопа в патиклы, и последующего его использования в ноде Position POP, во время анимации патиклы собираются в несколько "кучек", т.е. он не остаются каждая на своем месте (на месте поинта полученного изначально скаттером), а смещаются. В результате к концу анимации остается скажем всего 4 видимых понита, в коодрдинатах которых и собраны все остальные. Если смотреть в details view на ноде AttributeTransfer POP, то то атрибут "pos" полностью соответствует атрибуту "P", а вот в следующей ноде Position POP он меняется и видно как постепенно "pos" для всех точек сводится к всего лишь нескольким разным координатам. Ситуацию меняет только повышение сабсемплинга на POPnet, но даже если поставить 10, это всеравно не избавит от проблемы на 100%.
А в видео все работает, но мне пока не удалось понять что не так, т.к. по логике все тоже должно работать, но что-то видимо упустил, хотя не понимаю что там можно было упустить, вроде и так все просто :)

Вот сценка - http://dl.dropbox.com/u/697415/drops.hipnc
 

Koxby

Пользователь сайта
Рейтинг
2
#8
Также было.. Очевидно на видео скорость анимации меньше, поэтому частицы и не теряются. Я trail-ом делал копию анимированного обьекта в котором был кастомный атрибут содержащий позицию основного(через attribcopy) . С trail-ового я и передавал позишен партиклам. (Иначе говоря частицы "знали" где в следующем кадре будут вершины меша)) Работает на любой скорости анимации и сабсемплинге=1
 

MpaKo6ec

Активный участник
Рейтинг
12
#9
Решение оказалось проще. В сорсе патиклов (POPNet/Source) надо просто активировать, атрибут ORIGIN который хранит id сорса партикла, в нашем случае номера точек скаттера. Потом остается повесить все туже ноду POSITION и там указать экспрешеном типа point("../../POINTS_OUT", $ORIGIN, "P", 0), индекс 1 и 2 для Y и Z соответственно. :)
 
#10
Решение оказалось проще. В сорсе патиклов (POPNet/Source) надо просто активировать, атрибут ORIGIN который хранит id сорса партикла, в нашем случае номера точек скаттера. Потом остается повесить все туже ноду POSITION и там указать экспрешеном типа point("../../POINTS_OUT", $ORIGIN, "P", 0), индекс 1 и 2 для Y и Z соответственно. :)
При подобном методе я столкнулся с проблемой, суть которой состоит в том, что велосити-то нулевой, меняется только позишн партиклов, грубо говоря движение "жестко" указано четко по позишну. В итоге даже простой коллижн или даже простые форсы не могут действия оказывать на партиклы, т.к. все их остальные атрибуты просто игнорятся, все ведомо тем самым позишном...
 
Сверху