Gimbal lock, czyli problem blokowania osi obrotu, który prędzej czy później dopadnie każdego artystę w najmniej oczekiwanym momencie.
Gimbal lock? O co chodzi?
W programach 3D mamy trzy osi współrzędnych – X, Y i Z – wokół których cały czas się poruszamy. Czy to przemieszczając czy obracając obiekt. Gimbal lock powstaje, gdy dwie z tych osi nałożą się na siebie. Warto zauważyć, że „lock” to określenie potoczne. Nie ma żadnej blokady. Dalej możemy obracać każdą osią. Jednak dwie osi obrotu niwelują się wzajemnie i ruch nie jest taki jakiego się spodziewaliśmy.
Przekładając matematykę na realia animatorskie – gimbal lock powstaje, gdy nie możesz obrócić np. ramienia do następnej pozy. Po prostu nagle się okazuje, że obracasz kontrolką, ale ona albo w ogóle się nie porusza, albo porusza się w totalnie inną stronę. To jest gimbal lock. Wtedy zalewasz się łzami i przyjmujesz pozycję embrionalną.
Jak zapobiegać gimbal lock?
…zapytasz. Najlepszym rozwiązaniem jest ciągłe obserwowanie wartości kontrolek. Żarówka w głowie powinna nam się zaświecić, gdy zobaczymy, że osi obrotu mają zdecydowanie za duże wartości (180, 365+). Żeby uniknąć takich niespodzianek polecam wyzerowanie rotacji na kontrolce (jeżeli jest taka potrzeba; ruch nie jest zbyt duży) i ustawienie pozy od nowa. W ten sposób upewniamy się, że obrót będzie po osiach jakie chcemy, a nie jakie program sam sobie ustawi.
Możemy także w ustawieniach narzędzia do obrotu przestawić Axis Orientation z World/Object (domyślnie) na Gimbal. W ten sposób automatycznie limitujemy się do obrotu tylko wokół jednej osi na raz. Zobaczymy także po jakich płaszczyznach rozkładają się osi obrotu – pomoże to w zauważeniu potencjalnego problemu. ALE nie polecam tego wyjścia do codziennej pracy. Czas na upozowanie postaci wydłuży się kilkukrotnie. Oczywiście każdy pracuje jak chce, ale uwierzcie – to nie jest najlepsze wyjście.
Często w rigach spotkamy atrybut Rotate Order. Zmiana tego atrybutu z X,Y,Z na np. Z,X,Y (właściwie to oś, która pasuje do wykonywanego ruchu) często szybko rozwiąże problem. Warto skorzystać!
A jak naprawić animację?
Jak już się mleko rozlało to jeszcze nic nie jest stracone! W Autodesk Maya z pomocą przychodzi nam Euler filter! Jest to narzędzie, które rozplącze nasze spaghetti w graph editorze. Euler filter sprawi, że rotacje na każdym kanale nie będą przekraczać 360 stopni. To powinno automatycznie naprawić nasze problemy z np. dziwnie skręcającą stopą przy dynamicznych obrotach.
Euler filter używam prawie na każdym kroku. Pozwala mi to na nieustanną kontrolę animacji oraz spokój psychiczny przed niechcianymi niespodziankami. Używam go na tyle często, że pod skrót ctrl + e dodałem sobie prosty MELowy skrypt: filterCurve `ls -sl`;
Jeżeli stary dobry Euler nie pomaga to niestety trzeba ręcznie poprawić to i owo. ALE! Na całe szczęście zdarza się to niezwykle rzadko.
Być może sprawę załatwi też zmiana rotate order. Przy odrobinie szczęścia pozostanie nam poprzesuwanie kilku krzywych w graph editor.
Słowem podsumowania
Kontrola najwyższą formą zaufania. Ciągle wspominam, że nie można ufać programom. Niespodzianki typu gimbal lock niestety wszędzie mogą się pojawić. Szczególnie przy przejściu z bloku do spline, gdzie wcześniej praktycznie w ogóle nie spoglądaliśmy w krzywe. Dodatkowo, obracanie po wszystkich osiach na raz to najszybsza droga do gimbal lock.
Dlatego uczulam, żeby od samego początku już zwracać uwagę na wartości atrybutów. Po pewnym czasie powinno nam to wejść w krew i gimbal lock będzie tylko rzadką i niegroźną niespodzianką.
A jako bonus doskonały materiał o gimbal lock od Kennego Roya: