Skocz do zawartości

contlorer bezier czasu animacji, skalowanie prędkości całej animacji


Rekomendowane odpowiedzi

Napisano

Trochę nie wiem jak to napisać, jest tak banalne że nawet tego nie wiem.

 

 

Mam już zrobioną animacje wielu obiektów i chcę ja razo przyśpieszyć raz zwonlnić. Trudno jest wchodzić w track view kiedy sie ma 400 obiektów i skalować czas kluczy.

 

Jaki dodać kontroler który w łatwy sposób skalował by mi czas animacji określonych obiektów lub całej aniamcji.

  • Odpowiedzi 8
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Top Posters In This Topic

Napisano

Dzięki za odkrycie fajnej opcji ale nie o to mi chodzi.

 

Chcę mieć krzywą skalującą czas/prędkość animacji określonych obiektów. Chcę to robićprecyzyjnie. Chcę robić swego rodzaju slow motion w maxie ale mam za dużo obiektów aby skalować klucze kazdego z osobna.

 

Znalazłem tutorail gdzie pokazują Motion Mixer i tam jest taka opcja. Może jednaj jest jakieś prostsze rozwiązanie.

Napisano

Normalnie w maxie się nie da tak spod palca. Na CGtalk wygrzebałem działający skrypt, który powinien Ci przypasować:

tu cały wątek:

http://forums.cgsociety.org/archive/index.php/t-849093.html

 

A tu sam post o którym wspomniałem:

 

I did it a bit diferent and works perfect:

Short description:

 

create a point named $WarpNullthePoint=Point name:"WarpNull" with this script:

 

 

thePoint=Point name:"WarpNull"

xxx = attributes Custom_Attributes

(

parameters main rollout:params

(

WarpAmount type:#float ui:WarpAmount default:0.0

)

rollout params "Custom_Attributes"

(

spinner WarpAmount "WarpAmount" type:#float )

)

CustAttributes.add thePoint xxx

 

 

 

 

Select All objects that you want to be affected by Time Warp and run this script:

 

 

for obj in $ do (

 

ts=position_script()

theScript=("dependson $WarpNull.pos.controller \nat time (($WarpNull.position.x) as time) $"+obj.name+".pos.controller.Position_XYZ.controller.value")

obj.pos.controller = position_list ()

obj.pos.controller.Available.controller = ts

ts.script=theScript

ts=float_script()

obj.pos.controller.weight[2].controller=ts

ts.script="$WarpNull.Custom_Attributes.WarpAmount/100"

ts=float_script()

obj.pos.controller.weight[1] .controller=ts

ts.script="1-($WarpNull.Custom_Attributes.WarpAmount/100)"

 

ts=rotation_script()

theScript=("dependson $WarpNull.pos.controller \nat time (($WarpNull.position.x) as time) $"+obj.name+".rotation.controller.Euler_XYZ.controller.value")

obj.rotation.controller = rotation_list ()

obj.rotation.controller.Available.controller = ts

ts.script=theScript

ts=float_script()

obj.rotation.controller.weight[2].controller=ts

ts.script="$WarpNull.Custom_Attributes.WarpAmount/100"

ts=float_script()

obj.rotation.controller.weight[1] .controller=ts

ts.script="1-($WarpNull.Custom_Attributes.WarpAmount/100)"

 

ts=scale_script()

theScript=("dependson $WarpNull.pos.controller \nat time (($WarpNull.position.x) as time) $"+obj.name+".scale.controller.Bezier_Scale.controller.value")

obj.scale.controller = scale_list ()

obj.scale.controller.Available.controller = ts

ts.script=theScript

ts=float_script()

obj.scale.controller.weight[2].controller=ts

ts.script="$WarpNull.Custom_Attributes.WarpAmount/100"

ts=float_script()

obj.scale.controller.weight[1] .controller=ts

ts.script="1-($WarpNull.Custom_Attributes.WarpAmount/100)"

)

 

 

 

By animating POSITION X of the WARP point you get speed change

By animating WARP AMOUNT CUSTOM ATTRIBUTE you can controll hou much warp affects original animation

 

Check Attached scene to see the results and CHANGE TIME UNITS TO FRAMES:TICKS ! to get smooth motion

  • Like 1
Napisano

Kris_R - dzięki za ten skrypcik, zaraz go wypróbuje, aż dziwie się że nie ma takiego cuda wbudowanego w maxa wydawało by się bardzo logiczna rzecz.

 

łap repa

Napisano

Za szybko się ucieszyliśmy... na nie znam się na skryptach ale gdzieś jakiś błąd po drodze mi wywala. Musiałby tu ktoś zajrzeć i zdebugować dziada.

Napisano

jeszcze go nie sprawdziłem zajęty jestem czymś innym...

 

Próbowałem zapisywać animacje do pliku żeby póxniej bawić się w Motion Mixer ale kilka razy komputer już zawiesił się na zapisywaniu.

 

Ten skrypt to moja szansa. Na pewno są mądrzy skrypciarze na tym forum.

Napisano (edytowane)

Coś musiało się stać gdy przeklejałem skrypt tutaj na nasze forum.

Ze skryptem tworzącym nulla nie było problemu.. z tym podpinającym kontrolery animacji coś się kaszaniło.

Skopiowałem z oryginalnego wątku z CGtalk i wkleiłem do maxa.. ŚMIGA JAK MARZENIE :)

 

NAPISZĘ JAK TO UGRYŹĆ PO NASZEMU

 

1. odpalamy skrypt tworzący nulla w scenie w pozycji 0,0,0

 

thePoint=Point name:"WarpNull"

xxx = attributes Custom_Attributes

(

parameters main rollout:params

(

WarpAmount type:#float ui:WarpAmount default:0.0

)

rollout params "Custom_Attributes"

(

spinner WarpAmount "WarpAmount" type:#float )

)

CustAttributes.add thePoint xxx

 

 

2. zaznaczamy wszystkie obiekty, które chcemy timewrapować i odpalamy dla nich drugi skrypt:

 

for obj in $ do (

 

ts=position_script()

theScript=("dependson $WarpNull.pos.controller \nat time (($WarpNull.position.x) as time) $"+obj.name+".pos.controller.Position_XYZ.controller.value")

obj.pos.controller = position_list ()

obj.pos.controller.Available.controller = ts

ts.script=theScript

ts=float_script()

obj.pos.controller.weight[2].controller=ts

ts.script="$WarpNull.Custom_Attributes.WarpAmount/100"

ts=float_script()

obj.pos.controller.weight[1] .controller=ts

ts.script="1-($WarpNull.Custom_Attributes.WarpAmount/100)"

 

ts=rotation_script()

theScript=("dependson $WarpNull.pos.controller \nat time (($WarpNull.position.x) as time) $"+obj.name+".rotation.controller.Euler_XYZ.controller.value")

obj.rotation.controller = rotation_list ()

obj.rotation.controller.Available.controller = ts

ts.script=theScript

ts=float_script()

obj.rotation.controller.weight[2].controller=ts

ts.script="$WarpNull.Custom_Attributes.WarpAmount/100"

ts=float_script()

obj.rotation.controller.weight[1] .controller=ts

ts.script="1-($WarpNull.Custom_Attributes.WarpAmount/100)"

 

ts=scale_script()

theScript=("dependson $WarpNull.pos.controller \nat time (($WarpNull.position.x) as time) $"+obj.name+".scale.controller.Bezier_Scale.controller.value")

obj.scale.controller = scale_list ()

obj.scale.controller.Available.controller = ts

ts.script=theScript

ts=float_script()

obj.scale.controller.weight[2].controller=ts

ts.script="$WarpNull.Custom_Attributes.WarpAmount/100"

ts=float_script()

obj.scale.controller.weight[1] .controller=ts

ts.script="1-($WarpNull.Custom_Attributes.WarpAmount/100)"

)

 

 

3. W naszym helperku zmieniamy atrybut 'WrapAmaunt' na 100 .. to siła oddziaływania TimeWrapa na oryginalną animację.

 

4. Animując helperek w osi X kontrolujemy szybkość playbacku oryginalnej animacji. I to tyle :)

 

POWODZENIA i w razie czego śmiało pisz bo u mnie działa więc damy radę.

Edytowane przez Kris_R
Napisano

Oki.. wiem gdzie boli w razie czego.

Jak wkleję oryginalny skrypt do notatnika to jest oki. Ale jak wkleję tutaj na forum to formatowanie tekstu tworzy dodatkową spację w jakiś magiczny sposób.

 

w skrypcie są trzy długie linijki zaczynające przypisywanie kontrolerów dla poszczególnych składowych transformacji.. Position, Rotation, Scale. I w każdej z tych długich linijek na końcu jest niepotrzebna spacja w słowie controller... na forum widnieje CONTRO LLER. A musi być razem. Wtedy śmiga.

Jak póbuję edytować posta to jest razem.. nie ma tam spacji. Ale jak zapiszę, to wyświetla się ze spacją.. więc... zonk :)

 

No ale jest na to rada i powinno już wszystko być oki.

 

Pozdrawiam

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