Skocz do zawartości

Morphing kilku tekstów z partiklami


Ajgor

Rekomendowane odpowiedzi

Witam.

 

Mamy taki sobie tutorial:

 

 

W zasadzie nie ma w nim nic strasznego. Ja chciał bym jednak pójść trochę dalej. To znaczy chciał bym osiągnąć efekt, w którym tekst rozpada się w pył, następnie z tego pyłu tworzy się inny tekst, ten drugi rozpada się ponownie w pył, i z niego powstaje trzeci tekst. Jak takie coś osiągnąć?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 6
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Top Posters In This Topic

Zacząłbym zabawę od zrobienia tą prostą metodą dwóch tekstów i puszczenia jednej z animacji wspak.

 

Jeśli nic z tego nie wyjdzie to trzeba będzie pewnie zmienić technikę na tekst z prawdziwych brył 3d

i animowane goal'e.

Odnośnik do komentarza
Udostępnij na innych stronach

Tworzysz 3 teksty, dla każdego oddzielny nParticle shape, emitujesz z emitera do tych nParticle shapów, ustawiasz na nich ten sam limit (dajmy na to 1000 particli) i zapisujesz na nich stan. Włączasz na tych nShapach ignore solver gravity i wind, odłączasz z kolizji itd. To będą Twoje targety. Teraz tworzysz te particle, które będziesz widział, na nich też ustawiasz ten sam limit emisji i na nich wpisujesz sobie ekspresję pi razy oko taką:

$targetA = 1;

$targetB = 0;

$targetC = 0;

$targetD = 0;

$speed = 5;

 

if ($targetA){

$targetPos = pointPosition("nParticleShapeA.pt["+ id + "]");

$velocity = normalize($targetPos - position)*$speed;

}

 

... i dopisujesz swoje warunki $target'ów - czyli kiedy ma łapać który napis. nParticleShapeA to jest napis A, który został utworzony itd, analogicznie B,C,D. id Ci się będą zgadzały, bo będziesz miał tę samą ilość particli we wszystkich shapach i nie musisz dzięki temu korzystać z goalPP tylko czystą ekspresją jedziesz przypisując do velocity różnicę pozycji punktów i normalizując ją otrzymując tym samym kierunek w którym ma lecieć particle i mnożysz przez prędkość z jaką ma tam lecieć. Warto by było pomyśleć nad jakimś jego wyhamowaniem czyli jakiś linstep by się przydał albo podzielnik speed'a jak już particle jest blisko.

 

Pozdro,

M.

 

ps. Nie chcę się bawić w dziadka3D i umieszczać linka do swoich prac, ale tutaj tą metodą masz zrobione logo 3D firmy Ernst&Young - https://vimeo.com/user1329139/benczarskireel2012#t=95 jest to co prawda tylko wycinek całej animacji, ale to się formowało z grida particli w to logo a potem znowu w grida - i ładnie się animowało i targetowało do swoich celów.

Edytowane przez beny
Odnośnik do komentarza
Udostępnij na innych stronach

O proszę, kiedyś próbowałem tej metody, ale nie przyszło mi do głowy, że wystarczy właściwie wyliczyć velocity ;]

Napisałem skrypt który w który "na piechotę" liczył nowe nowe pozycje odejmując różnice pozycji między aktualną a docelową, działało to jednak strasznie powoli.

 

Z ciekawości sprawdziłem Twoją metodę i znormalizowana velocity zawsze wychodzi mi jakaś dziwna, particle lecą w kierunku (1,0,0).

Może chodziło Ci o unit ?

 

Wstawiłem jednak dodatkową zmienną

vector $targetPosVec; żeby dało się odejmować wektory, maya wywala błąd skalarny przy czystym float[]

 

$targetPos = `pointPosition -w ("nParticleAShape.pt[" + nParticleAShape.particleId + "]")`;

$targetPosVec = $targetPos;

$velocity = unit($targetPosVec - nParticle_CurrentShape.position) * $speed;

 

Bez normalizacji lecą ładnie tak jak powinny, ale szybko przybierają docelowy kształt.

 

ps. Fajny ten reel ;]

Odnośnik do komentarza
Udostępnij na innych stronach

Spoko ten kod był z grubsza pokazujący zasadę - pisałem go z czapy, po 2 piwach i w nocy, więc wybaczcie błędy :D

 

Może chodziło Ci o unit ?

 

Tak o unit mi chodziło. Już softy m się mylą :)

 

Napisałem skrypt który w który "na piechotę" liczył nowe nowe pozycje odejmując różnice pozycji między aktualną a docelową, działało to jednak strasznie powoli.

 

Wg mnie ta metoda ma o tyle poważniejszy błąd, że motion blur Ci się nie wyliczy.

Wstawiłem jednak dodatkową zmienną

vector $targetPosVec; żeby dało się odejmować wektory, maya wywala błąd skalarny przy czystym float[]

 

$targetPos = `pointPosition -w ("nParticleAShape.pt[" + nParticleAShape.particleId + "]")`;

$targetPosVec = $targetPos;

$velocity = unit($targetPosVec - nParticle_CurrentShape.position) * $speed;

 

Bez normalizacji lecą ładnie tak jak powinny, ale szybko przybierają docelowy kształt.

 

Ogólnie wystarczyło machnąć deklarację zmiennej vector przed $targetPos i by banlało bez wkładania nowej zmiennej:

 

vector $targetPos = `pointPosition -w ("nParticleAShape.pt[" + nParticleAShape.particleId + "]")`;

 

aha - noi wywal "$" sprzed velocity - bo to atrybut particla. A lecą szybko do celu właśnie dlatego że nie masz unit zrobione. Unit dba o to żebyś tylko wziął kierunek do particla a nie jego odległość od targetu. Odległością trzeba się zająć osobno - np. skalować prędkość w zależności od odległości ale w kontrolowany sposób np. linstepem albo mnożeniem $speed *0.98 (powiedzmy) gdy dystans do celu czyli mag($targetPosVec - nParticle_CurrentShape.position)

 

ps. Fajny ten reel ;]

 

Dzięki, dużo rzeczy nie mam tam, bo odchodząc z firm nie brałem materiałów i do części nie miałem dostępu do materiałów finalnych, bo zdalnie robiłem tylko co do mnie należało, odsyłałem cache i tyle. Jednak 2013 reel będzie bogatszy o kilka naprawdę fajowych pozycji :)

Edytowane przez beny
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności