Skocz do zawartości

Cząsteczki tworzące dany obiekt


Rekomendowane odpowiedzi

Napisano

Witam,

napotkałem się z zagadką, której nie mogę rozwiązać. Mianowicie moim zamysłem jest stworzenie z cząsteczek wyemitowanych z emittera kulę. Tymi cząsteczkami są animowane ptaki i czy jest jakiś zacny sposób na okiełznanie tych ptoków, aby utworzyły kulę?

 

Próbowałem z newton fieldem, ale latały one jak odrzutowce, a nie oto mi chodzi. Mój niedoświadczony móżdżek nie ma pojęcia w jaki sposób to zrobić, liczę na Waszą pomoc i z góry dziękuję.

 

Przykład w załączniku.

  • Odpowiedzi 81
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

Dzięki wielkie, goal się udał, będę musiał jeszcze trochę pokombinować. Nasuwa mi się jeszcze pytanie, w jaki sposób mogę zatrzymać animację ptaka, gdy już będzie tworzył ów kulę? Chodzi mi głównie o to, że dałem do instancera snapshoty animowanego ptaka i czy da radę w danym momencie po prostu zatrzymać tą animację?

Napisano

Hmm.. jeżeli Twoje ptaki mają instance z włączonym cycle animate to myślę (tzn. tak mi się wydaje :rolleyes: ) że tutaj należy skupić swoją uwagę tj. możesz zrandomizować całość z odrobiną kodu + zapewne "wyłączyć" animację w pewnym momencie w zakładce "Cycle".

Napisano (edytowane)

@asblaze

 

Masz na myśli brainbugz?

 

@legomir

 

Działa, działa, ale tym sposobem nie da rady stworzyć dobrej kuli z tych ptaków.

 

EDIT:

Poradziłem się legomira i skryptem podpiąłem ptaki do vertexów sphere'a. O taką kule z ptaków mi chodziło, jednak pozostaje kwestia w jaki sposób miejsce startu ustawić za książką, a następnie żeby wróciły do swojego miejsca? Moja nieobeznanie w cząsteczkach już męczy.

Edytowane przez safian
Napisano

Hej,

 

odświeżam temat, bo wróciłem do tego, a zmienił się pomysł na to. Mianowicie zastanawia mnie czy da radę zrobić to w ten sposób, aby ptaki tak jakby wlatywały w obiekt, a następnie ten obiekt się wraz z wlatywaniem wypełniał/kompletował? Chodzi mi o taki obiekt jak niżej:

 

16bkkdw.jpg

 

Macie jakieś pomysły, które by mnie naprowadziły na efekt końcowy?

Napisano

Particle są banalne - wystarczy kumać dobrze skryptowanie, operacje na wektorach, macierzach, mieć ogólne pojecie o optymalizacji algorytmów i oko do ruchu i śmigasz wszystko co chcesz. Polecam!

Napisano
Particle są banalne - wystarczy kumać dobrze skryptowanie, operacje na wektorach, macierzach, mieć ogólne pojecie o optymalizacji algorytmów i oko do ruchu i śmigasz wszystko co chcesz. Polecam!

 

Fakt! Bez umiejętności skryptowania kontrola nad particlami jest dla mnie strasznie oporna...

 

Anyway, sobie już poradziłem z poprzednim problemem. Teraz mam taki jeden tyci-tyci - mianowicie sobie volume axisem chcę wciągnąć moje ptaszyska z kuli. Fakt, faktem wysysam je, ale jest to strasznie niepłynne (błyskawicznie po pierwszej klatce wyrywa je z formy kuli, a mi bardziej zależy na płynnym wyssaniu). Jeżeli ktokolwiek zrozumiał ten bełkot to prosiłbym o radę.

Napisano

Słabo zrozumiałem ... ale pewnie masz strength na volume axis za duży noi na particlach masz conserve - zmniejsz do 0.98 albo nawet mniej 0.95 albo jeszcze mniej i zobacz czy się coś zmienia. Ogólnie parametr converve działa per substep więc jest mega czuły i poniżej 0.9 to zaczyna się mega ostre hamowanie particli bez sił.

Napisano

Troszeczkę kombinowałem z conserve i niestety dalej to samo. W volume axis magnitude mam ustawione nawet na 0.01 i efekt ten sam. Dziwna sprawa.Tutaj screen efektu, o jaki mi chodzi. Może ktoś ma pomysł na inne rozwiązanie. :)2m490.jpg

Napisano

Może pokombinuj z drag field. Ustaw bardzo małe oddziaływanie volume axis i ujemny kulisty drag field z ujemnym zanikiem przyśpieszający z czasem cząstki.

 

Samemu volume axis też warto zrobić fade zaniku. Zobacz na obrazku w helpie co zrobi attenuation w połączeniu z invert.

Miękkie wejście w pole siłowe, pewnie tego Ci trzeba.

http://download.autodesk.com/us/maya/2010help/index.html?url=Fields__Work_with_volume_axis_fields.htm,topicNumber=d0e393274

Napisano

Pogmatwana sprawa! Za każdym razem, jakim bym fieldem tego nie robił, z jak małą czy dużą siłą, nie wiadomo jakim attenuation cały czas mi wyrywa te ptaki, a następnie idzie płynnie...

Napisano

Hi.

 

Jeżeli chodzi o wszelakie Field'y to uwierz mi wszystko jest w helpie całkiem jasno wytłumaczone :).

Twoim problemem jest wydaje mi się Attenuation które działa na zasadzie: jak bardzo przyłożona siła maleje od centrum volume axis field (jednostką są unity z tego co pamiętam) - oczywiście możesz całość odwrócić poprzez tick w "invert attenuation".

 

Pomoże Ci to wszystko zwizualizować skrót klawiszowy "T" po zaznaczeniu VAF.

 

W połączeniu z Conserve powinieneś dostać efekt który chcesz uzyskać.

 

 

 

Pozdr.

Napisano (edytowane)

@MarshallCały czas wertuję helpa, kombinuję na wszystkie sposoby z attenuation i cały czas jest efekt tego wyrywania się ptaków. Pierwsza klatka - żadnej reakcji, druga klatka - nagły zryw ptaków o większą odległość, a następnie działa wszystko tak jak bym chciał.Dla zobrazowania tego zrobiłem szybki playblast:

 

http://www.youtube.com/watch?v=8jn8wni9bmM

Edytowane przez safian
Napisano

No po prostu nie wierzę. Robiłem tym samym sposobem, kluczując magnitude i wychodził kicz. Muszę wydedukować to jeszcze raz i zobaczyć co źle robiłem.

 

Mimo wszystko Marshall wielkie dzięki, bardzo mi pomogłeś, a szczególnie uspokoiłeś psychicznie (pokój cały zadymiony ;). Zresztą dzięki wszystkim, którzy próbowali mi pomóc, bardzo mi się podoba, że można na Was liczyć ;).

Napisano

Miesiek, jak zauważyłeś masz w Rotation options ustawiony "Aim direction" na "Velocity". Jak się nie ruszają particle Twój wektor Velocity jest zerowy, więc Maya nie zmienia orientacji biektu, który jest skierowany w prawo. Co u Ciebie się dzieje to jak particle się zaczynają ruszać tostają automatycznie niezerowy wektor w lewo i stąd masz to pierdyknięcie, a potem już spokojnie lecą. Jako, że środek obrotu masz "w ogonie ptaka" to masz gigantyczny przeskok.

  • Like 1
Napisano

Hej, little odświeżenie.

 

Mam jeszcze jedno pytanie, w jaki sposób obrócić te ptakulce? W sensie, może to dziwne, ale chciałbym, aby tyłem wylatywały z tej kuli :D.

Napisano

musisz je lekko poruszyć w stronę w którą chcesz żeby były odwrócone - np. jakimś fieldemi "Aim Direction" usstawiony na "velocity" Ci załatwi sprawe.

Napisano

Niby załatwia sprawę, ale właśnie, gdy dam aim direction na velocity to wracamy do poprzedniego problemu - jest pierdyknięcie podczas wylatywania z kuli.

Napisano

No to najpierw pociągnij je lekko w prawo żeby dostały jakikolwiek wektor w prawo (może być na jednej klatce o 0.0001 mm) a potem dopiero rób z nimi co tam chcesz - powinno zadziałać.

Napisano (edytowane)

Kolejne odświeżenie, kolejne pytanie :P.W jaki sposób jestem w stanie dać różne kolory, na losowo wybrane ptaki? Powiedzmy mam 5 materiałów i chciałbym, aby każdy ptak losowo miał nałożony jeden z tych materiałów, a co jeszcze ważne - nie zmieniały się w czasie jak to zrobiłem przed chwilą... Teraz w instancerze dodałem po 20 snapshotów animacji ptaka z każdego materiału i właśnie po każdych 20 snapshotach danego koloru ten sam ptak zmienia kolor na następny kolor - chciałbym to zniwelować!

 

Szperając trochę po necie wyczytałem, że w Mai ustawienie losowego shadera z geometrią (tudzież moimi ptakami) jest nie możliwe.

Próbowałem również atrybutem rgbPP, ale nic z tego...

Edytowane przez safian
Napisano

krótko mówiąc - niedasie. Nie ma możliwości przekierowania atrybutów partikli, przez instancer, do shadera. Podobno finalRender dla mayi to potrafi, ale tylko tak slyszałem. Pozostaje ci zrobić kilka kopii snapshotów z roznymi materiałami.

Napisano

W tym sęk, że tak na początku zrobiłem - zrobiłem 5 kopii snapshotów, dałem je wszystkie do instancera i gdy przykładowo przelecą snapshoty o kolorze pomarańczowym to wszystkie potem stopniowo ptaki zmieniają kolor na powiedzmy niebieski, bo są to kolejne snapshoty w kolejce w instancerze. Mi chodzi o efekt, aby każdy ptak miał swój kolor przez całą animację.

 

Są na to jakieś inne sposoby? Ewentualnie jest inny sposób na podłączenie animacji ptaka do cząsteczek od tego ze snapshotami?

Napisano

Jakto się nie da - wszystko się da tylko trza by to ładnie oskryptować i na podstawie Id particla zrobić kolejne sekwencje - do zrobienia, ale musiałbyś poskryptować trochę, więc zrób tak jak mówi praetorian - kilka wersji snapshotów z różnymi materiałami.

Napisano
Jakto się nie da - wszystko się da tylko trza by to ładnie oskryptować i na podstawie Id particla zrobić kolejne sekwencje - do zrobienia, ale musiałbyś poskryptować trochę, więc zrób tak jak mówi praetorian - kilka wersji snapshotów z różnymi materiałami.
Tak jak mówiłem - po zrobieniu kilku wersji snapshotów ptaki zmieniają kolor, a to jest dla mnie nie pożądany efekt. Aczkolwiek znalazłem inne wyjście z tej sytuacji. Mianowicie cząstki są podpięte pod vertexy sphere. W takim razie zrobię 5 wersji sphere z powycinanymi tak vertexami, aby te 5 wersji tworzyło cały jeden sphere, a następnie do każdego nParticleShape podepnę 5 wersji instancera, gdzie do każdego z osobna podepnę instancera z innym kolorem ptaków.

 

Trochę chaotyczne i pracochłonne, aczkolwiek dzięki temu uzyskam pożądany efekt :). Mimo wszystko dzięki za pomoc.

Napisano

Masz tutaj prezent. Jak zaznaczysz jakiś obiekt polygonowy to poniższy kod Pythonowy w jego wertexach stworzy Ci particle. Nie byłoby to Ci za bardzo potrzebne gdyby nie fakt że tworzy on tyle obietków partiklowych ile wpiszesz w parametrze "numberOfCopies". Co więcej, nie stworzy już particla w miejscu gdzie particle już jest. Czyli teraz do każdego obiektu particlowego podepnij sobie teraz swoje animacje z różnymi kolorami i jesteś w domu:

 

import maya.cmds as cmds
import random
import math

objHold = cmds.ls(sl=True)

if (len(objHold)>0):
   numberOfCopies = 5
   allParticleObjs = []

   for counter in range(0,numberOfCopies):
       newPartObj = cmds.particle()
       allParticleObjs.append(str(newPartObj[0]))

   vertNum = int(cmds.polyEvaluate(objHold, v=True ))

   for vertId in range(0,vertNum):
       holdVert = objHold[0] + ".vtx[" + str(vertId) + "]"
       partPos = cmds.xform(holdVert, ws=True, a=True, q=True, t=True)
       particleObject = math.floor(random.uniform(0,numberOfCopies))
       cmds.emit( object=allParticleObjs[int(particleObject)], position=(partPos[0],partPos[1],partPos[2]) )
else:
   cmds.warning("Zaznacz jakis obiekt polygonowy")

 

Wisisz mi piwo :)

Napisano (edytowane)

Kurde, stary. Jesteś genialny :), piwo to za mało :d. Tak głupio mi jeszcze narzekać, ale po "go to start of playback range" particle w podglądzie znikają, a w outlinerze są. Wiesz może co się dzieje? Po renderze też ni widu ni słychu partikli.

 

Zauważyłem też, że jak chcę sobie je obrócić atrybutem spriteTwistPP (nParticleShape1.spriteTwistPP = frame *4; ) to nic się nie zmienia.

 

Btw. próbowałem particlesami oraz nParticlesami i to samo.

Edytowane przez safian
Napisano

A faktycznie :D sorki - jak wykonasz skrypt to zaznacz obiekty partiklowe i zrób "solvers->initial state->set for selected", mój błąd :)

Napisano

Faktycznie, teraz gra gitara. Nie wiem stary co Cię natchnęło, aby to napisać, ale mimo wszystko jeszcze raz wielkie dzięki! Geniusz dynamiki :D.

Napisano

Fakt, źle skonstruowałem pytanie, ale mniejsza. Takie kombinacje były, ponieważ w mojej scenie są już utworzone particle i jak miałem ustawione wszyściutko jak w twojej scenie to moje ptaki migotały - tak jak to już miało miejsce u mnie wcześniej. Zdaje się, że to działa tylko przy emitowaniu cząstek.

Napisano

Da się na kilkanaście sposobów to zrobić podejrzewam. sefiankowi napisałem po prostu małe narzędzie do jego metody, każdy robi jak lubi :)

Napisano
Zdaje się, że to działa tylko przy emitowaniu cząstek.

To bez znaczenia - cała "logika" wyboru cyklu i klatki z cyklu jest w expressions, a to co jest w creation expression i nie działa na nieemitowanych partiklach, można przenieść do runtime expr (zamieniając rand() na noise()). Twoje ptaki migotały (rany, jak to brzmi :) ) pewnie dla tego, że każda cząsteczka przebiegała po każdym cyklu (snapshocie), zamiast w obrębie jednego, wcześniej wylosowanego.

Zajrzyj do expressions, bo mam wrażenie, że zerknąłeś tylko na atrybuty instancera.

  • Like 1
Napisano
Twoje ptaki migotały (rany, jak to brzmi :) ) pewnie dla tego, że każda cząsteczka przebiegała po każdym cyklu (snapshocie), zamiast w obrębie jednego, wcześniej wylosowanego.

 

Tak, właśnie przyczyną było to, że po jednym cyklu, instancer od razu leciał do kolejnego, zamiast zostać przy tym jednym. Szczerze mówiąc Panowie byliście moją lekcją podstaw cząstek, więc trudno jakkolwiek było mi samemu z tym walczyć. Kolejny raz wielkie dzięki (ja pierdziele, ile razy już mi pomogliście :) )

Napisano (edytowane)
To bez znaczenia - cała "logika" wyboru cyklu i klatki z cyklu jest w expressions, a to co jest w creation expression i nie działa na nieemitowanych partiklach, można przenieść do runtime expr (zamieniając rand() na noise()). Twoje ptaki migotały (rany, jak to brzmi :) ) pewnie dla tego, że każda cząsteczka przebiegała po każdym cyklu (snapshocie), zamiast w obrębie jednego, wcześniej wylosowanego.

Zajrzyj do expressions, bo mam wrażenie, że zerknąłeś tylko na atrybuty instancera.

 

Dopiero zajrzałem do tego co podesłałeś. Jak wywalisz creation expression a w before dynamics przerobisz na:

seed(id);
pS.birdId = int(rand(pS.numOfBirds));
pS.geoId = pS.cycleFrames*pS.birdId + frame%pS.cycleFrames;

 

to będzie lepiej.

 

Co więcej wrzuciłbym numOfBirds i CycleFrames też do tej ekspresji i niech się liczy z automatu i wywalić to z atrybutów shapa - bez sensu trzymać na to oddzielne parametry i zmieniać za każdym razem jak się animacja zmieni. Coś na kształt:

 

$instancerName = "instancer1";
$snapShotObj = "snapshot1";

$st = `snapshot -q -st $snapShotObj`;
$et = `snapshot -q -et $snapShotObj`;
$cycleFrames = ($et[0] - $st[0] + 1);
$numBirds = size(`instancer -q -obj $instancerName`) / $cycleFrames;

seed(id);
pS.geoId = $cycleFrames*(int(rand($numBirds))) + frame%$cycleFrames;

 

Noi generalnie Twoja metoda jest dużo efektywniejsza niż safiank zaproponował, ale skoro safiank zaczyna przygodę z dynamiką to może tę metodę niech na razie nie wykorzystuje, bo chyba za dużo ekspresji w ekspresji :) Ale resp z szacunkiem za optymalizację idzie :D

 

Pozrawiam!

M

 

edit: birdId też jest w sumie nie potrzebne bo jedziemy po id particla :)

Edytowane przez beny

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