Sziasztok,
Egyszer minden leendő/kezdő animátor életében el jön az az idő ami majdnem minden animátor rémálma, a Constraint.
Ezt szeretném egy kicsit könnyebbé tenni számotokra ezzel a bejegyzéssel.
Kezdjük az elején!
Mi az a constraint?
"A Constraint segítségével egy objektum helyzetét, tájolását vagy léptékét más objektumokra korlátozhatjuk. Továbbá a megszorításokkal meghatározott korlátokat állíthatunk be az objektumokra, és automatizálhatjuk az animációs folyamatokat."
Használati példa:
Szeretnénk csinálni egy “Nap”-ot(Gömb) ami körül a “Föld”(Gömb) forog. Ha ezzel a módszerrel csináljuk meg a Nap-ot és a Föld-et akkor a Nap forgása nem írja fölül a Föld forgását, tehát mind a két test tud forogni a saját tengelye körül.
Több Constraint is létezik, viszont azokat most nem emelném ki. Ami nekünk fontos az a Parent Constraint egyelőre.
Hogyan használjuk helyesen?
Nos itt jön a képbe még pár apróság lépésekre bontva. Képekkel kiegészítve.
Hogy megértsük egy egyszerű példát hozok fel.
Nyugodtan készítsd el és szórakozz vele.
Készítsünk egy Kockát, majd nagyjából állítsuk be a paramétereit képen látható módon:
Utána egy Gömböt, és helyezzük a Kocka egyil oldalára hasonló módon:
Készítettem a CHATGPT segítségével egy egyszerű kis script-et (lentebb megtalálható) ami létrehoz egy Locatort a kijelölt Object középpontjába és ugyan úgy elforgatja ahogy a kijelölt Object van forgatva.
A script használata nem kötelező, de jól jöhet. Spórolunk pár kattintást.
Amennyiben nem használod a script-et:
Majd jelöld ki a Locator-t és az Object-et ahova Matchelni szeretnéd a Transform és Rotation-t.
Majd
és távolítsd el a Scale-től a pipát majd Apply.
Így a Locator a Ball pozícióját és Rotation-jét vette fel.
Script:
import maya.cmds as cmds
def create_locator_on_selected():
# Get the selected object
selected_objects = cmds.ls(selection=True)
if not selected_objects:
cmds.confirmDialog(title='Warning', message='Please select an object.', button='OK', defaultButton='OK')
return
# Get the position and rotation of the selected object
position = cmds.xform(selected_objects[0], query=True, worldSpace=True, translation=True)
rotation = cmds.xform(selected_objects[0], query=True, worldSpace=True, rotation=True)
# Create a locator at the position of the selected object
locator = cmds.spaceLocator()[0]
cmds.xform(locator, worldSpace=True, translation=position)
# Rotate the locator to match the selected object's rotation
cmds.xform(locator, worldSpace=True, rotation=rotation)
cmds.select(locator)
cmds.confirmDialog(title='Success', message='Locator created on the selected object.', button='OK', defaultButton='OK')
# Call the function
create_locator_on_selected()
Ha kijelölted az Object-et utána le futtathatod a script-et (amit a shelf-re is ki rakhatsz bátran hiszen sokat fogod használni.)
Létre jött a Locator a kijelölt Object helyén és forgástengelyén.
A Locator-t kicsit méretezd át hogy jobban lásd.
Amennyiben nem jelöltél ki semmit akkor a következő hibaüzenet fog fogadni:
Miután meg van ez a három összetevő utána a következő lépésekre van szükség:
-
Jelölt ki a Kockát, majd Ctrl+G (Készítsünk egy Group-ot)
-
Jelölt ki a Ball-t, majd Ctrl+G (Készítsünk egy Group-ot)
-
Válaszd ki a létrehozott Locator-t. Utána a Kockát. Majd nyomd meg a " P "-betűt.
Így hozzá Parent-áltad a Locator-t a Kockához, tehát ha a kocka elfordul akkor a Locator-t is viszi magával. -
Jelöld ki a Locator-t, majd a Ctrl lenyomásával a Ball_group-ot is az Outliner-ben.
-
Ha ez megvan jöhet a Parent Constraint.
-
Animáld meg a Kockát.
-
Jelöld ki a Ball_Group-ot Majd kulcsold le az első Framen. (Nálam ez a 0.-dik frame volt)
Channel Box-ban meg kellett jelennie a Blend Parent változónak:
Válaszd ki a nevét. Blend Parent 1, majd állítsd át a 0-át 1-re és kulcsold le.
Lentebb a Channel Box-ban szintén válaszd ki a Locator 1W0-át majd a 0.-át írd át 1.-re és kulcsold le.
- Menj arra a frame-re ahol a kocka megáll a mozgásban. (Nálam ez a 24.-dik frame)
- Majd menj át az egyel előtte lévő frame-re. (Jelen esetben 23)
Jelöld ki a Ball_group-ot és kulcsold le. Majd írd át a Blend Parent 1-et 0-ra.
-
Jelöld ki a Ball-t és kulcsold le a 24-es framen.
-
Animáld meg a Ball-t ahogy szeretnéd.
És készen is vagyunk.
Itt látható az eredmény.
Ha tovább szeretnéd egy kicsit bonyolítani akkor ugyan ezeket a lépéseket csináld meg egy másik kockával és Locator-ral. (Vagy az elején duplikáld le őket Ctrl+D-vel.)
Jelöld ki a Ball_group-ot, és nézd meg a Channel Box-ban hogy megjelent-e egy újabb Parent.
Ez esetben a BW1. A két Locator között kell kapcsolgatni.
Ennek a “bonyolításnak” az eredménye itt található.
A hivatalos Autodesk weboldalon további infókat tudtok olvasni a többi Constraint típusról.
https://help.autodesk.com/view/MAYAUL/2023/ENU/?guid=GUID-7665A291-FAA7-44C0-BDEB-A6C83482116C
Az ötlet hogy le írjam ezt nektek Szabó Dániel-től, és Sir Wade-től jött.
Remélem mindenkinek hasznos volt, ha bármi kérdésed felmerül, kérdezz nyugodtan.