본문 바로가기
vfxai 잡학지식 vfxai 잡학지식

애프터이펙트 loopOut의 cycle·pingpong·offset·continue 차이

vfx 잡학지식 읽는 시간 약 10분 조회 3

애프터이펙트 표현식 loopOut()은 키프레임을 반복하지만, cycle·pingpong·offset·continue 중 무엇을 고를지 막힐 수 있습니다. After Effects에서 만든 같은 0→100→30 키프레임을 아래 도구에 넣으면 네 방식의 값 그래프와 움직이는 점을 비교하고 표현식도 만들 수 있습니다.

먼저 볼 기준은 반복 뒤 값이 처음으로 돌아가는지, 반대 방향으로 되짚는지, 한 주기 차이를 누적하는지, 마지막 속도로 계속 가는지입니다. 시각화의 세 키는 0초에 0, 1초에 100, 2초에 30이며, 키 사이를 선형 보간하는 설명용 모형입니다. 실제 애프터이펙트에서 베지어 탄젠트나 이지 이즈를 쓰면 곡선과 속도는 달라집니다.

같은 키프레임을 네 가지 loopOut으로 비교

값을 바꾸면 네 그래프가 함께 갱신됩니다. 가로축은 초, 세로축은 속성값이며 점은 재생 위치입니다. 반복 구간은 마지막 키부터 센 세그먼트 수입니다.

cycle

같은 구간을 다시 재생합니다. 끝값과 시작값이 다르면 다음 주기에 값이 되돌아가며 점프합니다.

pingpong

구간을 정방향과 역방향으로 번갈아 재생합니다. 시작값으로 튀지 않고 되짚지만, 끝에서 속도가 부드럽게 이어진다는 뜻은 아닙니다.

offset

같은 구간을 반복하면서 끝값과 시작값의 차이를 주기마다 더합니다. 기본 예시의 차이는 30입니다.

continue

구간을 반복하지 않고 마지막 키프레임의 속도를 계속합니다. 반복 구간 수 선택은 적용되지 않습니다.

cyclepingpongoffsetcontinue

세 키프레임의 값과 선택한 반복 구간이 그래프에 반영됩니다.

표현식 생성기

키프레임 수를 쓰는 함수는 numKeyframes(구간 수), Duration 함수는 composition 초를 받습니다. 0은 전체 구간이며 continue는 추가 인자를 받지 않습니다.

0은 모든 키프레임 구간을 뜻합니다.

표현식을 복사해 After Effects 속성의 표현식 입력란에 붙여 넣으세요.

이 체험기는 세 키와 선형 보간을 이용한 설명용 계산입니다. After Effects에서 렌더한 결과가 아니며, 베지어 탄젠트와 이지 이즈의 실제 곡선·속도는 Graph Editor에서 확인하세요. 이 도구는 파일을 읽거나 업로드하지 않습니다.

그래프의 세로축은 같은 속성값을 뜻합니다. 기본 예시에서 첫 키와 끝 키의 값 차이는 30이고, 마지막 구간의 기울기는 초당 -70입니다. 이 두 숫자만으로 네 표현식이 다음에 어떤 값을 내는지 비교할 수 있습니다.

loopOut cycle과 offset 값 그래프 비교: 0초 0, 1초 100, 2초 30 키프레임에서 cycle은 30에서 0으로 돌아가고 offset은 차이 30을 누적
같은 키를 반복할 때 cycle은 끝값과 시작값이 다르면 경계에서 되돌아가고, offset은 끝-시작 차이만큼 값을 주기마다 누적합니다. 선형 보간 예시입니다.

loopOut의 네 방식은 다음 키프레임에서 값이 다르게 이어집니다

방식0→100→30 예시의 다음 움직임어울리는 상황
cycle0→100→30을 반복합니다. 끝값 30에서 다음 주기의 시작값 0으로 돌아가므로 경계에서 30만큼 점프합니다.처음과 끝의 값이 맞는 반복 동작, 또는 돌아가는 점프가 의도된 동작
pingpong0→100→30 다음에 100→0 방향으로 되짚습니다. 방향이 번갈아 바뀝니다.앞뒤 왕복이 필요한 동작. 원래 키프레임의 시간 간격도 역방향으로 반복됩니다.
offset반복 곡선에 끝-시작 차이 +30을 더합니다. 다음 구간은 30→130→60, 그다음은 60→160→90이 됩니다.반복마다 값이 누적되어야 하는 이동·카운터·회전값
continue반복하지 않고 마지막 키 속도를 연장합니다. 마지막 구간 기울기 -70 단위/초라면 3초 값은 30+(3-2)×(-70)=-40입니다.마지막 속도를 유지해 움직임을 이어가고 싶을 때

cycle은 같은 값을 되풀이하는 방식입니다. 처음과 끝 값이 같으면 값의 경계가 맞지만, 그래프의 속도까지 같은 것은 아닙니다. 시작·끝에서 기울기가 다르면 값은 연결돼도 움직임이 순간적으로 가속하거나 느려질 수 있습니다. 반대로 끝값이 시작값과 다르면 예시처럼 반복할 때마다 값이 되돌아갑니다.

pingpong은 끝에서 시작값으로 점프하지 않고, 선택한 구간을 반대 방향으로 재생합니다. 예시에서는 30에서 100을 거쳐 0으로 돌아갑니다. 같은 구간을 한 번 더 정방향으로 재생한 뒤 다시 반대로 갑니다. 왕복 동작에는 자연스럽지만, 이 방식이 물리적으로 튀거나 가속하는 움직임을 자동으로 만들어 주지는 않습니다.

offset은 반복할 때마다 구간의 끝값과 시작값 차이를 누적합니다. 식으로 쓰면 반복된 곡선 값에 반복 횟수 × (구간 끝값 - 구간 시작값)을 더합니다. 예시의 차이가 +30이라 첫 반복은 30만큼 위로 이동하고 다음 반복은 60만큼 위로 이동합니다. 시작과 끝값이 같으면 차이가 0이므로 값 기준으로는 cycle과 같아집니다.

continue는 반복 구간을 재생하지 않습니다. 마지막 키프레임의 속도를 이어서 Out Point까지 값을 연장합니다. 그래서 속도가 일정한 움직임을 계속할 때는 적합하지만, 끝 키에서 감속하도록 이지 이즈를 줬다면 이어지는 움직임이 기대보다 약하거나 거의 멈춰 보일 수 있습니다. 끝 키의 속도는 Graph Editor에서 확인합니다.

numKeyframes는 키 개수가 아니라 반복할 구간 수입니다

loopOut(type, numKeyframes)의 두 번째 인자는 마지막 키프레임에서 거꾸로 세는 키프레임 구간 수입니다. 기본값 0은 모든 키프레임 구간을 뜻합니다. 숫자 1은 키 하나만 반복한다는 뜻이 아니라 마지막 키와 바로 앞 키 사이의 구간 하나입니다. 숫자 3이면 마지막 키부터 네 번째 키까지, 세 구간을 선택합니다.

표현식선택하는 구간의미
loopOut("cycle", 0)마지막 키부터 전체 키전체 애니메이션 반복
loopOut("cycle", 1)마지막 키와 바로 앞 키마지막 한 구간만 반복
loopIn("cycle", 1)첫 키와 다음 키첫 한 구간을 레이어 In Point 쪽에서 반복

loopOut()은 마지막 키프레임에서 레이어 In Point 쪽으로 반복 구간을 정하고 Out Point까지 재생합니다. loopIn()은 첫 키프레임에서 Out Point 방향으로 구간을 정해 레이어 In Point에서 재생합니다. 따라서 같은 숫자라도 어느 쪽 함수에 쓰느냐에 따라 선택되는 키가 다릅니다.

Duration 함수는 프레임 수가 아니라 초를 받습니다

키 개수 대신 시간을 기준으로 반복 구간을 고르려면 loopOutDuration(type, duration)이나 loopInDuration(type, duration)을 씁니다. duration은 composition 초 단위입니다. 예를 들어 loopOutDuration("cycle", 1)은 마지막 키프레임부터 거꾸로 잰 마지막 1초를 반복하고, loopInDuration("cycle", 1)은 첫 1초를 반복합니다.

Duration 함수에서 기본값 0은 전체 레이어 애니메이션에 해당하는 구간을 뜻합니다. 반면 loopOut과 loopIn의 두 번째 인자는 키프레임 구간 수입니다. 1초를 반복하려고 numKeyframes에 1을 넣거나, 키 한 구간을 반복하려고 duration에 1을 넣는 식으로 두 단위를 바꾸어 쓰면 결과가 달라집니다.

반복 목적을 먼저 정하면 표현식을 고르기 쉽습니다

  • 처음과 끝의 값이 이어지는 반복이면 cycle부터 확인합니다. 값이 다르면 경계에서 점프하는지 그래프로 봅니다.
  • 같은 길을 앞뒤로 왕복해야 하면 pingpong을 씁니다. 되돌아가는 키프레임 타이밍도 함께 반복됩니다.
  • 반복할 때마다 같은 값만큼 계속 전진해야 하면 offset을 고릅니다. 누적량은 반복 구간의 끝값과 시작값 차이입니다.
  • 반복 없이 마지막 속도만 이어야 하면 continue를 씁니다. 인자 없이 loopOut("continue")처럼 적습니다.

이 네 방식은 대부분의 숫자나 배열 기반 속성에서 사용할 수 있지만 모든 속성에 적용되지는 않습니다. Adobe는 단순한 숫자 값으로 표현되지 않는 Source Text, 패스 모양 속성, Levels 효과의 Histogram 같은 예외를 안내합니다. 표현식이 오류를 낸다면 먼저 속성이 반복 메서드를 지원하는 유형인지 확인합니다.

표현식이 아니라 키프레임 곡선 자체가 끊겨 보이는 문제라면 반복 모드를 바꾸기 전에 키 개수보다 타이밍과 간격을 먼저 보는 글에서 문제 구간을 분리해 보세요. 움직임이 정리된 뒤 렌더 파일이 너무 크거나 업로드 화질이 깨진다면 After Effects 렌더에서 ProRes와 H.264를 고르는 기준으로 이어집니다.

참고 자료

각 표현식의 범위와 인자 정의는 Adobe After Effects 공식 표현식 문서를 기준으로 정리했습니다. Adobe Community 사례는 loopOut의 반복 시작점과 마지막 키프레임의 역할을 혼동한 질문을 확인하는 보조 자료로만 사용했습니다.

vfx 잡학지식

함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.