Constraint használata Maya-ban

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:
image

Utána egy Gömböt, és helyezzük a Kocka egyil oldalára hasonló módon:
image

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.
image
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:
image

Majd jelöld ki a Locator-t és az Object-et ahova Matchelni szeretnéd a Transform és Rotation-t.
image

Majd
image

és távolítsd el a Scale-től a pipát majd Apply.
image
Í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.
image

A Locator-t kicsit méretezd át hogy jobban lásd.
image

Amennyiben nem jelöltél ki semmit akkor a következő hibaüzenet fog fogadni:
image

Miután meg van ez a három összetevő utána a következő lépésekre van szükség:

  1. Jelölt ki a Kockát, majd Ctrl+G (Készítsünk egy Group-ot)
    image

  2. Jelölt ki a Ball-t, majd Ctrl+G (Készítsünk egy Group-ot)
    image

  3. Válaszd ki a létrehozott Locator-t. Utána a Kockát. Majd nyomd meg a " P "-betűt.
    image
    Így hozzá Parent-áltad a Locator-t a Kockához, tehát ha a kocka elfordul akkor a Locator-t is viszi magával.

  4. Jelöld ki a Locator-t, majd a Ctrl lenyomásával a Ball_group-ot is az Outliner-ben.
    image

  5. Ha ez megvan jöhet a Parent Constraint.
    image

  6. Animáld meg a Kockát.
    Constraint-tutorial

  7. Jelöld ki a Ball_Group-ot Majd kulcsold le az első Framen. (Nálam ez a 0.-dik frame volt)
    image
    image

Channel Box-ban meg kellett jelennie a Blend Parent változónak:
image
Válaszd ki a nevét. Blend Parent 1, majd állítsd át a 0-át 1-re és kulcsold le.
image
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.
image

  1. Menj arra a frame-re ahol a kocka megáll a mozgásban. (Nálam ez a 24.-dik frame)

image

  1. 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.

image
image

  1. Jelöld ki a Ball-t és kulcsold le a 24-es framen.
    image
    image

  2. Animáld meg a Ball-t ahogy szeretnéd.
    image
    image

És készen is vagyunk.

Itt látható az eredmény.
Constraint-tutorial-end

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.
image

Ennek a “bonyolításnak” az eredménye itt található.
Constraint

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.

1 kedvelés