1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Как сделать что бы частицы после генерирования, следовали за объектом. MAX 2008

Тема в разделе "Анимация", создана пользователем Enterprise-J, 3 май 2009.

Модераторы: Артер
  1. Enterprise-J

    Enterprise-J Пользователь сайта

    С нами с:
    16.12.2006
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Здравствуйте, есть сцена, в которой взрывается косм. корабль, после определённого кол-ва времени часть корабли отрывается и отлетает, продолжая взрываться. Все взрывы сделаны PArray-ем, взрывов много. Тут возникает косяк - после взрыва партиклы остаются на месте и проходят сквозь корабль. Пробовал и через PF сделать(что для меня плохо, т.к. все PArray уже настроены, только этот косяк надо побороть), так же неполучилось. Как сделать что бы после генерирования партиклы поддерживали направление, скорость, т.е. были "привязаны" к эмиттеру? Прикладываю сцену, из-за обилия моделей, она большая, поудалял всё кроме виновника - части корабля(отлетает после 550 кадра) и взрывов. Сцена.
     
  2. Banzay

    Banzay Знаток

    С нами с:
    07.07.2005
    Сообщения:
    1.290
    Симпатии:
    2
    Баллы:
    55
    В PF для этого есть галка Inherit Emitter Movement в операторе Position Object.
    В PArray остаётся только уменьшать скорость частиц и время жизни.
     
  3. Enterprise-J

    Enterprise-J Пользователь сайта

    С нами с:
    16.12.2006
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Потестировал - партиклы с и без этой галки остаются на месте, при том что эмиттер движется.. Чтож, видимо придётся таки футажи использовать в постобработке, на 4 форумах никто ничего дельного не подсказал...
     
  4. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Не удивительно у тебя частицы тормозятся DragBinding, в этом случае нужно делать локальное поле что будет тащить за кораблем.
    Либо настраивать без DragBinding, и включить у PArray в свитке Object Motion Inheritance:
    Influence = 100
    Multipler = 1
     
  5. Enterprise-J

    Enterprise-J Пользователь сайта

    С нами с:
    16.12.2006
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Идея с полем вроде понятна, а как её в максе осуществить, каким дефлектором? Без драг работает, но взрыв без драга - ..деньги на ветер...
     
  6. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Хм да со стандартными частицами можно только ветер присобачить чтоб сдувал. С помощью скрипта и такой-то матери.
    По этому лучше делай с помощью PF. Оператро Lock/Bond - может констрейнить к объектам.
    Получится чтото вроде этого графа:
     

    Вложения:

    • 1237962.jpg
      1237962.jpg
      Размер файла:
      59,3 КБ
      Просмотров:
      46
  7. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    C Lock/Bond - тоже может быть проблема если частицы еще анимируются и нет возможности переключить на новый эвент,

    Тогда просто создаётся такой скритп оператор:
    Да не забудь в тексте имя объекта за которым будут таскаться частицы.

    Код:
    on ChannelsUsed pCont do
    (
    	 pCont.usePosition = true
    )
    
    on Init pCont do 
    ( 
    )
    
    on Proceed pCont do 
    (
    
    	obj = $Sphere114    -- Set Object !
    
    	at time (currenttime - 1) p1 = obj.pos
    	at time currenttime p2 = obj.pos
    	v =  p2 - p1
    
    	count = pCont.NumParticles()
    
    	for i in 1 to count do
    	(
    		pCont.particleIndex = i
    		pCont.particlePosition += v
    	)
    
    
    )
    
    on Release pCont do 
    ( 
    )
    
     
  8. Enterprise-J

    Enterprise-J Пользователь сайта

    С нами с:
    16.12.2006
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Savin Denis, КАК ЖЕ ВЫ МЕНЯ ВЫРУЧИЛИ!!! РАБОТАЕЕЕТ!!! Большое человеческое вам спасибо!!
    Хм, правда в 2008 максе такого оператора в пф как Lock\Bond я не нашёл, но скрипт работает. Этот оператор в 2009 версии появился?
     
  9. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
  10. Enterprise-J

    Enterprise-J Пользователь сайта

    С нами с:
    16.12.2006
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Даа, по судя по количеству новых операторов, довольно мощная штука. Спасибо ещё раз!
     
  11. Enterprise-J

    Enterprise-J Пользователь сайта

    С нами с:
    16.12.2006
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Тестировал, тестировал скрипт - у пф странное поведение, сначало видно что все партиклы летят прямо за сферой 114 как надо, но стоит выключить и включить скрипт оператор, как партиклы оказываются рядом со сферой(вкл\выкл по прошествии например 100 кадров)..метаморфозы прямо..
     
  12. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    При on/off для корректного результата, потребуется пересчет всей сиквенции, чего по видимому не происходит. Возможно если поиграться с ChannelsUsed можно будет объяснить PF чтоб, пресчитывал,
    но будут тормоза. Что так пересчитывать что так.

    Кстати так и не понял что должен обозначать этот застывший эффект ?!
     
  13. Enterprise-J

    Enterprise-J Пользователь сайта

    С нами с:
    16.12.2006
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Застывшый эффект, всмысле эти системы частиц(в т.ч. пф)? Это взрывы, к ним применён в Environment, Afterburn-плагин. Ещё тестировал - при рендеринге частицы так же располагаются не надо сферой а около неё, т.е. частицы улетают куда то в сторону а не летят за сферой, может скрипт неточно работает? Простите что подвергаю сомнению вашу работу, понимаю, что это всё непросто, програмировать, но проблема есть и я уже хотел было вообще отказаться от взрывов на движущейся части корабля, как тут появился шанс на решение проблемы. Кстати, пробовал Lock\Bond, он тоже странно работает, если просто включать выключать к примеру оператор Display, то каждый раз он будет ставить частицы в новых местах, иногда даже совсем не там где нужно.
     
  14. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Сделай тестовую сцене гляну, только запиши туда одну эту систему все лишнее прибей и в PF графе тоже. В сторону могут улетать опять же если не последовательно проигрываеш.
    Lock\Bond, скорее всего не убрал где нибудь вариационные параметры. Нужно переключить все частицы за один кадр на эвент с Lock\Bond, делается по абсолютному времени.
    К этому моменту все частицы должны уже быть за остановлены.

    PS
    То что взрыв понятно, не понятно за чем его тащить за кораблем ?
    По всем законам отлетевшие частицы не как не связанны с породившим объектом. а чтоб притягивать своей массой скорости слишком большие.
    Да и драг это эмуляция сопротивления в атмосфере, в космосе ничего не будет препятствовать им лететь с начальной скоростью.
     
  15. Enterprise-J

    Enterprise-J Пользователь сайта

    С нами с:
    16.12.2006
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Сделал сцену - там в пф два эвента, со скриптом и с лок\бондом, частицы вроде останавливаются, но половина остаётся на месте, половина за шаром тащиться. Если со скриптом проигрывать последовательно, то частицы появляются в виде точки около шара(сконцентрированы в одной точке что ли). Да, ни под какие законы взрыв не попадает, но это связано с возможностями афтербурна - я пробовал делать удефлектор, чтоб частицы просто огибали корабль, но тогда получалось, что взрыв как вода растекается по поверхности, а сквозь корабль проходить - это ещё хуже. Драг использую тоже отчасти по причине афтербурна - если не останавливать частицы, то это будет совсем не как в "звёздных воинах" и тому подобных, а так же компа просто не хватит на постоянно увеличивающийся афтербурн эффект+это будет уже на взрыв мало похоже. Сцена.
     
  16. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Там есть одна хитрость script нужно ставить выше оператора Position чтоб небыло конфликта.
    Написал новый скрипт, старый не обновлялся во время рендера.
    Новый с подержкой Subframe Sampling:
    Код:
    on ChannelsUsed pCont do 
    ( 
    pCont.useTime = true
    pCont.usePosition = true 
    ) 
    
    on Init pCont do 
    ( 
    ) 
    
    on Proceed pCont do 
    ( 
    
    global PFTmpTime01  -- Set unique Name.
    
    obj = $Sphere01 -- Set Object ! 
    
    count = pCont.NumParticles() 
    
    t = currenttime
    if count > 0 do t = pCont.getParticleTime 1
    
    if PFTmpTime01 == undefined do PFTmpTime01 = t      -- Set unique Name.
    
    t1 = PFTmpTime
    t2 = t
    
    at time t1 p1 = obj.pos 
    at time t2 p2 = obj.pos 
    v = p2 - p1 
    
    PFTmpTime01 = t2     -- Set unique Name.
    
    for i in 1 to count do 
    ( 
    pCont.particleIndex = i 
    pCont.particlePosition  += v 
    ) 
    ) 
    
    on Release pCont do 
    ( 
    )
    
    В коде, для каждого нового эммитера нужно будет найти изаменить в тексте все включения имени PFTmpTime01 на уникальное.
     
  17. Enterprise-J

    Enterprise-J Пользователь сайта

    С нами с:
    16.12.2006
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Странно, вставляю скрипт в скриптоператор, проверяю - имя сферы совпадает, ставлю над position, так как эмиттер один, то PFTmpTime01 изменять не надо, смотрю - и ничего не происходит, как будто там нет скрипта! Сцена на всякий случай У вас он работает? Может с максом что, хотя врядли, предыдущий скрипт ведь работает..
     
  18. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Да опечатка, лови

    Код:
    on ChannelsUsed pCont do 
    ( 
    pCont.useTime = true 
    pCont.usePosition = true 
    ) 
    
    on Init pCont do 
    ( 
    ) 
    
    on Proceed pCont do 
    ( 
    
    global PFTmpTime01 -- Set unique Name. 
    
    obj = $Sphere01 -- Set Object ! 
    
    count = pCont.NumParticles() 
    
    t = currenttime 
    if count > 0 do t = pCont.getParticleTime 1 
    
    if PFTmpTime01 == undefined do PFTmpTime01 = t -- Set unique Name. 
    
    t1 = PFTmpTime01 -- Set unique Name. 
    t2 = t 
    
    at time t1 p1 = obj.pos 
    at time t2 p2 = obj.pos 
    v = p2 - p1 
    
    PFTmpTime01 = t2 -- Set unique Name. 
    
    for i in 1 to count do 
    ( 
    pCont.particleIndex = i 
    pCont.particlePosition += v 
    ) 
    ) 
    
    on Release pCont do 
    ( 
    )
     
  19. Enterprise-J

    Enterprise-J Пользователь сайта

    С нами с:
    16.12.2006
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Да, теперь всё работает!ОГРОМНОЕ СПАСИБИЩЕ, Savin Denis!!!!
     
Модераторы: Артер

Поделиться этой страницей