Skocz do zawartości

[3ds max] Collapsing animation of linked object


Pierzak

Rekomendowane odpowiedzi

Mam maly problem w 3ds max 2009. Mam animowana kamere ktora chcialem przeniesc w inne miejsce. W tym celu narzedziem "Select and Link" polaczylem kamere z obiektem Dummy i przesunalem obiekt w inne miejsce. Teraz chce pozbuc sie "linku" i miec niezalezna kamere ale zeby prouszala sie bez zmian. Jak uzyje narzedzia "Unlink Selection" to zmieniaja mi sie trajektorie.

Macie jakis pomysl??

 

Probowalem zapisac animacje (File>Save Animation) a poziej ja zaladowac na nowa kamere ale okazalo sie ze same bledy w ruchu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 13
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

A możesz powiedzieć czy masz długą tą animację? Chodzi mi o liczbę kluczy. Jeśli dobrze rozumiem to na początku kamera nie była zlinkowana, tylko dopiero po pewnym czasie, chcąc ją przesunąć nie zmieniając animacji ją zlinkowałeś?

Mam pewien pomysł, tylko potrzebowałbym szerszy obraz twojej sceny.

Odnośnik do komentarza
Udostępnij na innych stronach

Najpierw mialem animacje bez zlinkowania. Pozniej musialem ja przesunac i obrucic powniewaz obiekt dookola ktorego kamera leciala zostal przeniesiony i powiekszony. Calosc ma okolo 50 kluczy.

 

Znasz moze inny sposob na przeniesienie animaji. inny niz zlinkowanie kamery do obiektu dummy i przesuniecie.

Odnośnik do komentarza
Udostępnij na innych stronach

Może zanim podam gotowe rozwiązanie to trochę wyjaśnienia co i jak.

Pomimo tego, że zlinkowałeś kamerę do innego obiektu i animowałeś je 2, to transformacje globalne transformacje kamery są takie same, niezależnie czy ona jest zlinkowana czy nie. Mówiąc inaczej, pozycje kamery w odniesieniu do punktu 0,0,0 nie zmienia linkowanie.

Dobra teraz to na co Czekasz:)

Zrobiłem Ci narzędzie, które robi dokładnie to co chciałeś. kod który tu podam wklejasz to maxscript edytora (znajdziesz go w: MAXScript>>MAXScript Editor). Następnie wciskasz ctrl+e (lub Tools>>Evaluate all)

Pokazuje się okienko. Sądzę, że nie trzeba go wyjaśniać, ale dla pewności:

- klikasz na "Pick Dumny" i wybierasz swojego dumny

- klikasz na "Pick Camera" i wybierasz swoją kamerę

- klikasz na "Begin" i zaczyna się magia kodu ;)

 

Mam nadzieję, że pomogłem. Jakby coś nie działało to daj znać, u mnie wszystko jest ok.

 

Oto kod:


try(destroydialog klucze)catch()
rollout klucze "klucze"
(
   local obiekty,cameraObiekt,dumnyObiekt
   group "Dumny"
   (
   pickbutton pickDumnyB "Pick Dumny"
   edittext curDumny "Current Dumny:"   readOnly:true
   )
   group "Camera"
   (
   pickbutton pickCameraB "Pick Camera"
   edittext curCamera "Current Camera:"   readOnly:true
   )
   group "Let's magin begin"
   (
   button traslateKeys "Begin"
   edittext magicStatus "Status:"   readOnly:true    
   )
   on pickDumnyB picked elem do
   (
       curDumny.text=elem.name
       append obiekty elem
       dumnyObiekt=elem
   )
   on pickCameraB picked elem do
   (
       curCamera.text=elem.name
       append obiekty elem
       cameraObiekt=elem
   )
   on traslateKeys pressed do
   (
       if obiekty.count>0 then
       (
       --ustalam zbior w ktorym zapisuje czasy w jakich znajduje sie klucz
       czasZKluczem=#()
       --ustalam zbior w ktorym bede przechowywal transformacje
       transformacje=#()
       for w in obiekty do
       (
           --znajduje wszystkie klucze
           --dla pozycji
           if (numKeys w.pos.controller)>0 then
           (
               for o=1 to (numKeys w.pos.controller) do
               (
                   if (findItem czasZKluczem (getKeyTime w.pos.controller o))==0 then
                       (
                           append czasZKluczem (getKeyTime w.pos.controller o)
                       )
               )
           )else()
           --dla obrotu
           if (numKeys w.rotation.controller)>0 then
           (
               for o=1 to (numKeys w.rotation.controller) do
               (
                   if (findItem czasZKluczem (getKeyTime w.rotation.controller o))==0 then
                       (
                           append czasZKluczem (getKeyTime w.rotation.controller o)
                       )
               )
           )else()
           --dla skali
           if (numKeys w.scale.controller)>0 then
           (
               for o=1 to (numKeys w.scale.controller) do
               (
                   if (findItem czasZKluczem (getKeyTime w.scale.controller o))==0 then
                       (
                           append czasZKluczem (getKeyTime w.scale.controller o)
                       )
               )
           )else()
       )
           for p in czasZKluczem do
           (
           append transformacje (at time p cameraObiekt.transform)
           )
           deleteKeys cameraObiekt.pos.controller
           deleteKeys cameraObiekt.rotation.controller
           deleteKeys cameraObiekt.scale.controller
           deleteKeys dumnyObiekt.pos.controller
           deleteKeys dumnyObiekt.rotation.controller
           deleteKeys dumnyObiekt.scale.controller
           --unlink elementow
           cameraObiekt.parent=undefined
           --wstawiam klucze spowrotem ale do jednego obiektu
           animate on
           (
               if czasZKluczem.count>0 then
               (
               for x=1 to czasZKluczem.count do
               (
                   at time czasZKluczem[x] (cameraObiekt.transform=transformacje[x])
               )
               dumnyObiekt.transform=matrix3 1
               )else()
           )
       magicStatus.text="Done"
       print czasZKluczem
       )else()
   )
   on klucze open do
   (
       obiekty=#()
   )
)
createdialog klucze

 

EDIT:

Do zmieniania całej animacji gdy ta już jest gotowa, można wykorzystać warstwy (Ewentualnie tego skryptu;)). Musisz poczytać o "Animation layers". Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Hej..

Dzieki za skrypt.

Przetestuje go jutro w pracy.

Jesli chodzi o warstwy to probowalem nimi to rozwiazac i nie wyszlo.. tzn kamera zostala przeniesiona ale rotacja sie nie udala. Kamera dostala obrotu (Roll) zamiast rotacji kamery i Target-u.

 

Twoj sktrypt wyglada imponujaco... ale czy sie udalo to napisze jutro :) tzn dzis ale pozniej.

Odnośnik do komentarza
Udostępnij na innych stronach

Mam maly problem w 3ds max 2009. Mam animowana kamere ktora chcialem przeniesc w inne miejsce. W tym celu narzedziem "Select and Link" polaczylem kamere z obiektem Dummy i przesunalem obiekt w inne miejsce. Teraz chce pozbuc sie "linku" i miec niezalezna kamere ale zeby prouszala sie bez zmian. Jak uzyje narzedzia "Unlink Selection" to zmieniaja mi sie trajektorie.

Macie jakis pomysl??

 

Probowalem zapisac animacje (File>Save Animation) a poziej ja zaladowac na nowa kamere ale okazalo sie ze same bledy w ruchu.

 

link constraint

 

 

 

.

Odnośnik do komentarza
Udostępnij na innych stronach

pchela1313. Niestety nie podzialalo... tzn moze logika skryptu jest dobra ale wyrzucilo mi bledem jak na obrzaku. Nie mialem czasu zeby zajzec w skrypt wiec zalatwilem wszystko recznie

 

 

Mr Pank.

I co ze LINK CONSTRAINT??

Mozesz pelnym zdaniem?

Odnośnik do komentarza
Udostępnij na innych stronach

Czy tak trudno panie Pietrzak wpisać hasło "LINK CONSTRAINT" do helpa maxa i przeczytać sobie tuturalka

 

Animation > Constraints > Link Constraint

 

1. zaznaczasz kamerę (free)

2. wybierasz Animation > Constraints > Link Constraint i łączysz kamerę z np. dummy

3. zaznaczasz kamerę w Motion panel masz Link Params, zaznacz Key Nodes

4. wybierz auto key, przejdź do klatki 30, zaznacz Dummy i zmień jego pozycję

5. cofnij sie do klatki 15, zaznacz kamerę i w Link Params kliknij na Link to World

6. wyłącz auto key,

 

jeśli np chcesz z powrotem zlinkować kamerę do Dummy albo jakiegoś innego obiektu na danym kluczu

w Link Params wybierasz Add Link i zaznaczasz obiekt

Odnośnik do komentarza
Udostępnij na innych stronach

Ja polecam po prostu Animation Layer. Na warstwie wstawiasz klucz zerowy, jak chcesz w inne miejsce to przesuwac w nie i wstawiasz klucz, a jak chcesz wrocic do starego miejsca, to znowu wstawiasz klucz zerowy.

 

Tak ale dochodzi do tego rotacja. tzn i target i kamera musza byc obrocone i zachowac ten sam dystans.

Odnośnik do komentarza
Udostępnij na innych stronach

mozesz to zrobic nastepujaco, kopiujesz klucze z rot, poz, do dumiego podpinasz kamere do tego co chcesz a nastepnie plotujesz kamere do naszego dumiego

 

albo plotujesz damiego do kamery podpinasz kamere i spowrotem plotujesz z damiego na kamere.

 

albo ustawiasz w twoim obiekcie locala zgodnie z gimbalem twojej kamery i linkujesz :)

 

pzdr

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