W naszym przykładzie anteny lub czułki postaci obcego powinny poruszać się dynamicznie i sprężysto wraz z każdym ruchem głowy. Oczywiście nasz przykład można również zastosować do kosmyków włosów, ogonów dinozaurów i wielu innych rzeczy.
W pliku roboczym "PSD_C4D_R12_IK_Dyn_Start.c4d" znajdziecie zaprojektowaną i pokrytą teksturą głowę obcego do współpracy.
Budowa rusztowania stawowego
Nasza głowa obcego składa się z poligonalnej geometrii głowy oraz dwóch obiektów kulistych na oczy. W dalszej części będziemy łączyć wszystkie obiekty hierarchicznie lub poprzez wagi z jointami, aby kompletna głowa mogła być animowana wraz z czułkami.
Zaczniemy od budowy rusztowania stawowego od pierwszego obiektu Joint dla głowy. Znajdziecie go w menu Character.
Ponieważ głowa obcego znajduje się dokładnie w środku układu współrzędnych, staw głowy może pozostać na pozycji zerowej.
Nowo utworzony obiekt Joint jest od razu zaznaczony, a następnie aktywujcie narzędzie Joint Tool z menu Character. W oknie ustawień narzędzia Joint Tool dezaktywujemy tworzenie nadrzędnego Root Null Object. Sami stworzymy go później, aby lepiej zrozumieć, jaką rolę w ogóle pełni w rusztowaniu stawowym.
Aby móc pracować symetrycznie, rozwińcie sekcję Symetria i użyjcie opcji Rysuj na płaszczyźnie Świat-YZ. Na tej płaszczyźnie, odpowiednio w tej widoku, będziemy rysować jointy.
Gdy narzędzie Joint Tool jest aktywne i przytrzymacie klawisz Ctrl podczas klikania w widok, jointy podległe głowicznemu jointowi zostaną utworzone automatycznie i symetrycznie.
Wybierzemy jeden z dwóch czułków i umieśćmy pierwszy podrzędny joint bezpośrednio przy nasadzie czułka na głowie. Joint dla drugiego czułka zostanie automatycznie umieszczony dzięki aktywowanej Symetrii.
Następnie, poprzez kliknięcie z przytrzymanym klawiszem Ctrl, stworzymy łańcuch jointów na pozycjach pokazanych na obrazie. Gdzie jest bardziej szczegółowy, jointy powinny być bliżej siebie. Nie oszczędzajmy na jointach, ponieważ tylko na tych punktach stawowych może w ogóle dojść do deformacji lub zagięcia geometrii.
Po utworzeniu wszystkich jointów, w menedżerze obiektów znajdziemy hierarchię jointów przedstawioną na obrazie. Obiekt stawu głowy zawiera dwie łańcuchy jointów jako podrzędne obiekty - jeden dla każdego czułka.
Aby dostosować pozycję jointów także parami w widoku bocznym, wybierzmy parę jointów z menedżera obiektów i przesuńmy jointy wzdłuż swojej osi z w geometrii.
W ten sposób konstrukcja stawowa do animacji czułek lub anten jest już zakończona. Niestety, nie ma ona jeszcze związku z naszą głową obcego, który pozwoliłby nam animować głowę.
Dzieje się to dopiero po połączeniu hierarchii jointów z geometrią. Aby to zrobić, zaznaczmy przez Menedżera Obiektów wszystkie obiekty Joint oraz obiekt Polygon geometrii obcego.
Połączenie hierarchii jointów z siatką poligonową odbywa się przez polecenie Wiązanie w menu Character>Polecenia.
Czym jest polecenie Wiązanie? Teraz obiekt Polygon geometrii obcego posiada teraz tag wagowy, w którego oknie ustawień znajdują się wszystkie obiekty Joint, które mogą wpływać na geometrię głowy obcego. Ta automatyczna wagowanie odnosi się do położenia jointów w stosunku do geometrii i stanowi dobry punkt wyjścia.
Ważenie jointów
Niemal idealne jest to ważenie, jednak zazwyczaj wymaga trochę poprawek. Aby poznać wagi sąsiadujące, najpierw dezaktywujmy funkcję siatki HyperNURBS przez Menedżera Obiektów. Narzędzie wagowe pokazuje wagi geometrii na niezagladzonej siatce poligonów. Dla ogólnego przeglądu, zacznijmy od zaznaczenia wszystkich obiektów Joint z geometrią w Menedżerze Obiektów.
Narzędzie Wagi znajdujemy w menu Character. Po jego aktywacji geometria głowy kosmity już nabiera koloru. Każde Joint posiada własny kolor, który wskazuje jego wpływ na geometrię.
Aby móc ocenić poszczególne Joints i ich wpływ na geometrię, wystarczy wybrać odpowiedni Joint w Managerze obiektów. Wszystkie obszary geometrii, które nie zostały objęte przez dany Joint, pozostają czarne.
Na głównym Joincie zauważamy, że czubek nosa nie jest w 100% w kolorze Jointa. Dzięki narzędziu Wagi możemy zapobiec ewentualnym błędom deformacji, zwiększając wagę dla danego Jointa za pomocą pędzla Wagi.
Również na stykach z czułkami i antenami wpływ na geometrię głowy jest zbyt duży. Aby zmniejszyć przyłożone wagi, używamy narzędzia Wagi, przytrzymując klawisz Ctrl.
Aby zakończyć pracę z wagami, zaleca się ponownie wybrać wszystkie Joints za pomocą Managera obiektów, ustawić kolor wag na Jednolity, i sprawdzić, czy cała geometria ma przypisaną wagę. Jak widać na obrazku, cała geometria kosmity jest biała, co oznacza, że każdy obszar geometrii jest obciążony wagą.
Kuliste obiekty oczu nie zostały objęte wagami. Aby obiekty te również poruszały się podczas obrotu głowy, wystarczy przypisać je do głównego Jointa w Managerze obiektów. Teraz, gdy obraca się główny Joint, obiekty oczu podążają za kierunkiem głowy.
Nadszedł czas na praktyczną weryfikację struktury Jointów i przypisanych wag. Wybieramy Joint głowy i obracamy go za pomocą narzędzia Obracanie, wzdłuż osi y. Cała geometria kosmity powinna płynnie reagować na ruchy Jointa głowy bez problemów.
Implementacja kinematyki odwrotnej z dynamiką
Po upragnionym działaniu Jointów na poszczególne obszary głowy kosmity, możemy zająć się animacją czułków i anten za pomocą kinematyki odwrotnej (IK). Aby to zrobić, musimy zdefiniować dwa łańcuchy Jointów jako łańcuchy IK.
Wybieramy te dwa łańcuchy Jointów w Managerze obiektów Pamiętaj, żeby pominąć Joint głowy!
Tutaj również CINEMA 4D oferuje specjalną komendę o nazwie Generuj łańcuch IK, która automatycznie konwertuje wybrane łańcuchy Jointów na łańcuchy IK. Znajdujemy ją w menu Character>Komendy.
Stosujemy komendę Generuj łańcuch IK i sprawdzamy, co się zmieniło w naszym łańcuchu Jointów. Dwa Jointy na górze głowy otrzymały znacznik IK. W tym znaczniku automatycznie zdefiniowano początek i koniec łańcucha IK.
Znajdziemy również dwa nowe Obiekty Null jako Obiekty docelowe w Managerze obiektów. Te dwa cele są nazwane analogicznie do końców łańcucha Jointów i pozwalają nam animować cały łańcuch IK za pomocą prostych celów sterujących.
Mimo że zazwyczaj chcielibyśmy regulować ruchy czułków i anten za pomocą właściwości dynamicznych, warto zatrzymać te dwa obiekty celów, ponieważ zapewnią one automatycznie korygowanie kierunku i ustawienie czułków i anten po każdym ruchu i deformacji.
Przejście do okna ustawień tagów IK ujawnia, jak są zdefiniowane końce lub cele łańcucha IK. Parametry w sekcji Tag można zostawić; teraz bardziej interesują nas ustawienia dynamiki.
Aby to zrobić, przechodzimy do zakładki Dynamika i aktywujemy opcję Dynamika. Teraz czułki i anteny mogą reagować na wpływy takie jak grawitacja lub ruch.
Aby czułki nie zwisały pasywnie, ale wyglądały raczej elastycznie i sprężysto, zmniejszamy siłę dynamiki do około 40-45% i drastycznie zwiększamy tlumienie do około 70%. Aby czułki bardziej starannie przywracały swoje pierwotne położenie, zwiększamy parametr Utrzymywanie kąta do około 40-45%.
Zachęcam do eksperymentowania z parametrami, aby szybko zrozumieć, jak poszczególne ustawienia wpływają na cały łańcuch kinematyki odwrotnej - to oczywiście też sprawia wiele zabawy.
Ponieważ oba wydzielone obiekty docelowe nie będą w stanie zaobserwować dynamicznej animacji czułków lub anten, musimy nauczyć IK, że te cele powinny być ruszane wraz z ruchem. W przeciwnym razie czułki bardzo łatwo by się zaplątały przy szybkim obracaniu.
Zakładka Dalsze opcje w tagu IK oferuje nam bardzo elegancką funkcję. Po prostu aktywujemy tutaj opcję Ruszanie z celem, a oba obiekty docelowe automatycznie ruszą się przy każdym ruchu.
Teraz również funkcjonalność kinematyki odwrotnej czułków lub anten jest już zabezpieczona. Uporządkujmy trochę jeszcze w Menadżerze obiektów, zmieniając odpowiednio nazwy obiektów docelowych oraz łańcuchów stawów.
Obecnie do animacji głowy obcego służy staw głowy. Niestety ten staw jest dość nieporęczny, ponieważ z powodu swoich podrzędnych łańcuchów stawów obraca się w przestrzeni.
Potrzebujemy jednak "czystego" punktu wyjściowego pod kątami, tak aby obrót i ruch głowy obcego odbywał się bez niepożądanych obraczeń wstecznych.
Oto wchodzi w grę Root-Null-Objekt, na który już wcześniej zwróciliśmy uwagę.
Dostarcza on nam zupełnie nową, nietkniętą bazę współrzędnych. Aby cała łańcuch IK został uwzględniony, musimy go podporządkować do Root-Null-Objektu.
Najpierw jednak tworzymy świeże Null-Objekt poprzez menu Obiekty. Ponieważ staw głowy znajduje się w pozycji null, nie musimy przemieszczać nowego Null-Objektu.
Nazwijmy ten nowy Null-Objekt konsekwentnie jako Root i podporządkujmy mu całą hierarchię stawów poprzez Menadżer obiektów.
Najpóźniej teraz możemy nacisnąć przycisk odtwarzania i obracać i animować obcego poprzez obracanie Root-Null-Objektu w różnych kierunkach. Czułki lub anteny będą podlegały dynamice grawitacji i naszym ruchom.
Root-Null-Objekt jest więc praktycznym pomocnikiem podczas animacji hierarchii stawów. Podczas tworzenia szkieletu stawów, przynajmniej główny staw (zazwyczaj biodro) otrzymuje takie nadrzędne Null-Objekt, aby to działo się automatycznie, musimy aktywować opcję Root-Null-Objekt w oknie dialogowym narzędzia Staw.