마야와 파이썬을 활용한 VFX 프로그래밍 50가지 예제 – 고급 단계 예제 21. 정교한 기어구조 애니메이션 스크립팅


마야와 파이썬을 활용한 VFX 프로그래밍 50가지 예제 – 고급 단계 예제 21. 정교한 기어구조 애니메이션 스크립팅

>>> 전체 커리큘럼으로 돌아가기.

안녕하세요, 여러분!
오늘은 정교한 기어구조 애니메이션 스크립팅에 대해 알아보겠습니다.
이 예제를 통해 마야에서 파이썬을 사용하여 두 개의 톱니바퀴를 생성하고 서로 맞물려 돌아가는 애니메이션을 만들어볼 것입니다.

 

기어 생성 및 애니메이션

1. 톱니바퀴 생성

먼저 파이썬 스크립트를 사용하여 톱니바퀴를 생성해봅시다. 아래의 스크립트를 복사하여 마야 스크립트 에디터에 붙여넣고 실행하세요.

import maya.cmds as cmds

def createGear(name, radius, teethSize, teethCount):
    # 기본 실린더 생성
    gear = cmds.polyCylinder(r=radius, h=0.5, sx=teethCount, n=name)[0]

    # 각 톱니를 extrude
    for i in range(teethCount):
        face = f'{gear}.f[{i * 2}]'
        cmds.polyExtrudeFacet(face, ltz=teethSize)

    return gear

# 기어 생성
gear1 = createGear("gear1", radius=1, teethSize=0.1, teethCount=10)
gear2 = createGear("gear2", radius=0.8, teethSize=0.1, teethCount=8)

# 기어 배치
cmds.move(1.8, 0, 0, gear2)

 

2. 애니메이션 설정

이제 생성한 톱니바퀴에 애니메이션을 설정해봅시다. 아래 스크립트를 이용하여 각 톱니바퀴의 회전 애니메이션을 설정할 수 있습니다.

# 키프레임 설정
frame_start = 1
frame_end = 100

# 기어1 애니메이션 설정
cmds.cutKey(gear1, cl=True)
cmds.setKeyframe(gear1, attribute='rotateY', v=0, t=frame_start)
cmds.setKeyframe(gear1, attribute='rotateY', v=360, t=frame_end)

# 기어2 애니메이션 설정 (기어1과 반대 방향으로)
cmds.cutKey(gear2, cl=True)
cmds.setKeyframe(gear2, attribute='rotateY', v=0, t=frame_start)
cmds.setKeyframe(gear2, attribute='rotateY', v=-360 * (10.0/8.0), t=frame_end) # 기어1과 맞물리기 위해 속도 조정
cmds.confirmDialog(title='완료', message='프로세스가 성공적으로 완료되었습니다!', button='확인')

 

최종 코드

# 최종 코드 통합
import maya.cmds as cmds

def createGear(name, radius, teethSize, teethCount):
    # 기본 실린더 생성
    gear = cmds.polyCylinder(r=radius, h=0.5, sx=teethCount, n=name)[0]

    # 각 톱니를 extrude
    for i in range(teethCount):
        face = f'{gear}.f[{i * 2}]'
        cmds.polyExtrudeFacet(face, ltz=teethSize)

    return gear

# 기어 생성
gear1 = createGear("gear1", radius=1, teethSize=0.1, teethCount=10)
gear2 = createGear("gear2", radius=0.8, teethSize=0.1, teethCount=8)

# 기어 배치
cmds.move(1.8, 0, 0, gear2)

# 키프레임 설정
frame_start = 1
frame_end = 100

# 기어1 애니메이션 설정
cmds.cutKey(gear1, cl=True)
cmds.setKeyframe(gear1, attribute='rotateY', v=0, t=frame_start)
cmds.setKeyframe(gear1, attribute='rotateY', v=360, t=frame_end)

# 기어2 애니메이션 설정 (기어1과 반대 방향으로)
cmds.cutKey(gear2, cl=True)
cmds.setKeyframe(gear2, attribute='rotateY', v=0, t=frame_start)
cmds.setKeyframe(gear2, attribute='rotateY', v=-360 * (10.0/8.0), t=frame_end) # 기어1과 맞물리기 위해 속도 조정
cmds.confirmDialog(title='완료', message='프로세스가 성공적으로 완료되었습니다!', button='확인')