Render.ru

GoalU, GoalV

Cyberika

Знаток
Рейтинг
21
#22
Почему усложнять процесс? Можете анимировать блендшейпом цилиндр и использовать рантайм-икспрешен goalU += 0.01; например.
Если хотите более сложную анимацию частиц, на пример, что бы скорость частиц зависел от расстояния от центра цилиндра, то придется посмотреть документацию. Там вы найдете кучу полезных функций.
 

Lemieux

Знаток
Рейтинг
58
#23
"Цилиндр-торнадо" я анимировал через лофт и историю. Сам цилиндр был взят просто для примера. Спасибо за совет, за последнии дни я уже многое накопал в документации по поводу expression именно для частиц.
 

Tmotion

Пользователь сайта
Рейтинг
2
#26
Попытался создать новую тему, но там никто не отвечает. Подумал, может те кто смотрит эту тему смогут мне помочь, т.к. идея примерно такая же?

Задача следующая. Мап натянут на шар, который является эмиттером частиц. Частицы появляются на поверхности учитывая мап в черных местах по определенному гриду.
Выражение такое:
goalU = floor(parentU * 230 + .5) / 230;
goalV = floor(parentV * 150 + .5) / 150;

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

И еще, как потом можно управлять движением частиц, чтобы под действием силы частицы могли отрываться от объекта?
 

Владимир Забелин

Активный участник
Рейтинг
17
#27
"И еще, как потом можно управлять движением частиц, чтобы под действием силы частицы могли отрываться от объекта? "

например вот так:

http://www.youtube.com/watch?v=0HKG2ru5U1E&feature=plcp
 

Tmotion

Пользователь сайта
Рейтинг
2
#28
Спасибо, Владимир, за ответ.

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

Владимир Забелин

Активный участник
Рейтинг
17
#31
1) в момент создания проверяйте растояние до ближайших частиц. если оно, например, меньше радиуса частицы, то убивайте созанную частицу
2) заведите юзеровские атрибуты - номер "ячейки" которая породила частицу. в момент создания проверяйте свободен ли номер в котором родилась частица. если занят - убивайте ее
 

Tmotion

Пользователь сайта
Рейтинг
2
#32
Вот это как раз у меня и не получается. Какой массив для этого использовать или какая функция это выполняет? В документации описана NearestPointOnMesh, но как это применить к моему случаю?
 

Владимир Забелин

Активный участник
Рейтинг
17
#33
что у вас не получается? вычислить расстояние до ближайшей частицы? вспоминайте пятый класс средней школы - расстояние между двумя точками в декартовом пространстве.
и что значит какой массив ? я ж вам русским языком написал : заведите собственный (сиречь кастомный, сиречь пользовательский ) атрибут. В него и сохраняйте
 

Tmotion

Пользователь сайта
Рейтинг
2
#34
Декартово пространство проходят в 10 классе, а ее частный случай - прямоугольную систему координат - в 6. В данном случае теория не проблема, думаю вы и сами это прекрасно понимаете. Вопрос заключается в том, как это сделать программными средствами майи.
Откуда взять координаты частицы, которая уже существует? или есть какая-то встроенная функция "определения ближайших частиц"? или прогонять по двойному циклу и проверять каждую порожденную частицу (но тогда это будет очень долго)? Или при создании частицы запоминать ее положение в какой-нибудь PositionPP?
Что значит "убить частицу"? lifespanPP = 0 ? или какая-то другая функция? при этом сохранятся ли ее координаты в массиве и id?
Как определить саму "ячейку, которая породила частицу"? это ведь всего лишь координата (goalU, goalV) либо position? т.е. все возвращается к началу.
 
Сверху