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

24·30·60fps는 왜 느낌이 다를까: 나란히 재생 체험

vfx 잡학지식 읽는 시간 약 16분 조회 1

프레임레이트가 24fps·30fps·60fps로 달라지면 같은 동작도 느낌이 달라집니다. FPS 하나로 설명되지는 않습니다. 움직임을 몇 장으로 나누는지, 한 장에 흐림이 얼마나 남는지, 화면이 그림을 보여 주는 간격이 함께 작용합니다. 먼저 도구에서 같은 경로와 시간을 유지하고 이동 거리와 흐림 조건을 하나씩 바꿔 보세요. 다만 이 브라우저 체험은 실제 24fps 영상을 모니터에 정확히 재생한다고 보장하지 않으므로 최종 판단은 렌더 파일에서도 확인해야 합니다.

먼저 같은 움직임으로 24·30·60fps를 비교하세요

비교를 시작할 때는 세 줄의 속도를 따로 조절하지 마세요. 대상이 움직이는 경로, 이동 거리, 한쪽 끝까지 가는 시간을 같게 둔 상태에서 샘플의 수만 다르게 해야 합니다. 아래 도구는 세 원형 마커가 같은 수평 경로를 편도 1초에 이동하고, 다시 1초 동안 돌아오도록 구성했습니다. 방향이 바뀌는 순간은 속도가 불연속적으로 바뀌는 단순 모형이므로 왕복 중간의 직선 이동 구간을 중심으로 비교하세요.

기본 설정에서는 셔터각을 180°로 두고 시작을 누르세요. 24fps 행에서 마커가 다음 위치로 옮겨가는 폭, 30fps 행의 중간 정도 점프, 60fps 행의 더 촘촘한 움직임을 비교합니다. 이때 세 마커가 목적지에 도착하는 시간은 같습니다. 움직임의 차이가 작게 보이면 이동 거리를 늘려 보세요.

다음에는 이동 거리를 고정한 채 셔터각을 0°로 낮추고 다시 180°, 270°로 올려 보세요. 마커 중심이 한 샘플에서 다음 샘플로 이동하는 간격은 그대로지만, 마커 뒤에 그린 흐림 길이가 바뀝니다. 정지 화면에서 흔적 길이를 먼저 보고, 재생 중 위치 점프를 확인하는 순서가 비교하기 쉽습니다.

세 줄의 이동 시간은 같습니다. 편도 1초, 왕복 2초이며 각 FPS마다 시간 샘플만 다르게 계산합니다.

일시정지 상태 · 출발 위치
24fps 같은 거리 · 같은 왕복 시간
표본 간격41.67 ms
샘플당 이동량0 px
셔터 노출시간20.83 ms
근사 블러 길이0 px
30fps 같은 거리 · 같은 왕복 시간
표본 간격33.33 ms
샘플당 이동량0 px
셔터 노출시간16.67 ms
근사 블러 길이0 px
60fps 같은 거리 · 같은 왕복 시간
표본 간격16.67 ms
샘플당 이동량0 px
셔터 노출시간8.33 ms
근사 블러 길이0 px

설명용 계산: 이동 거리는 각 행의 화면 가로폭을 기준으로 잡으며 px 수치는 실제 촬영 측정값이 아닙니다. 움직임은 프레임 시간으로 양자화합니다. 실제 모션 블러는 픽셀별 노출 누적 결과지만, 여기서는 일정 속도의 선형 흔적(trail)으로만 근사합니다. 0°에서는 흔적을 표시하지 않습니다. 브라우저 갱신과 모니터 표시는 별개이므로 네이티브 FPS 출력 실험으로 해석하지 마세요.

프레임레이트 차이는 위치 샘플의 간격부터 읽어야 합니다

프레임레이트(FPS)는 1초 동안 새로 만들어지거나 재생되는 시간 샘플의 개수입니다. 1초를 FPS로 나누면 샘플 사이의 시간 간격이 나옵니다. 따라서 24fps는 1/24초, 30fps는 1/30초, 60fps는 1/60초마다 새 위치를 기록합니다. 아래 값은 측정치가 아니라 이 정의에서 계산한 수치입니다.

FPS간격 / 고정 60Hz 표시180° 노출시간
24fps41.67ms / 2·3회 교대20.83ms = 1/48초
30fps33.33ms / 2회16.67ms = 1/60초
60fps16.67ms / 1회8.33ms = 1/120초

같은 화면 속도를 v(px/초)라고 두면 프레임 사이 이동량은 v ÷ FPS입니다. 예를 들어 원형 마커가 1초 동안 화면상의 240px을 움직이는 가상의 샷이라면, 24fps에서는 한 샘플에 10px, 30fps에서는 8px, 60fps에서는 4px씩 위치가 바뀝니다. 세 경우 모두 1초 뒤에는 같은 240px에 도착합니다. 도구의 실제 px 출력은 현재 화면 폭과 슬라이더 비율에 따라 달라집니다.

이 차이는 객체가 빠르게 움직일 때나 카메라가 수평으로 패닝할 때 눈에 잘 띌 수 있습니다. 프레임마다 배경의 모서리가 얼마나 멀리 옮겨지는지 살펴보세요. 샷에 들어 있는 화면상 이동 속도를 먼저 확인하는 편이 유용합니다.

셔터각은 샘플 수가 아니라 샘플 안의 흐림을 바꿉니다

셔터각은 그 프레임이 얼마 동안 빛과 움직임을 누적하는지 나타내는 기준입니다. 계산식은 노출시간 = (셔터각 ÷ 360) × (1 ÷ FPS)입니다. 셔터각 180°는 한 프레임 간격의 절반만 노출한다는 뜻입니다. 24fps에서는 약 1/48초, 30fps에서는 약 1/60초, 60fps에서는 약 1/120초가 됩니다.

이 관계는 RED의 셔터각 안내에서도 설명합니다. 셔터각이 커질수록 프레임 안에서 움직임이 누적되는 시간이 길어지고, 작아질수록 개별 위치가 더 또렷하게 분리됩니다. 180°가 흔한 비교 출발점인 것은 맞지만 모든 장면에 적용해야 하는 미학적 정답은 아닙니다.

같은 화면 속도와 같은 셔터각이라면 프레임당 흐림 거리도 FPS에 반비례합니다. 움직임이 일정한 직선 운동이라고 가정할 때, 근사 블러 길이는 v × 노출시간으로 볼 수 있습니다. 180° 설정의 24fps와 60fps를 비교하면 노출시간은 각각 1/48초와 1/120초입니다. 따라서 같은 속도에서 24fps의 프레임별 이동 흔적은 60fps의 2.5배 길게 계산됩니다. 이는 길이 계산이지 사람이 느끼는 블러가 2.5배라는 뜻은 아닙니다.

도구의 가느다란 trail은 블러를 설명하기 위한 선입니다. 실제 렌더의 모션 블러는 물체의 가림 관계, 질감, 조명, 픽셀별 노출 누적, 셔터의 시간 분포에 따라 달라집니다. 실제 CG 렌더의 블러가 끊겨 보이면 셔터 앵글과 모션 샘플 점검 순서도 확인하세요. 이 도구에서 셔터각 0°는 흔적을 제거하는 개념적 극한값으로 쓰며, 이를 모든 실물 카메라에서 정확히 0초 노출할 수 있다는 뜻으로 해석해서는 안 됩니다.

특히 ‘24fps의 분위기를 유지하려고 60fps로 올린 뒤 180°만 유지한다’는 방법은 같은 블러 길이를 보존하지 않습니다. 프레임 사이 점프를 줄이는 문제와 한 프레임의 흐림을 정하는 문제를 분리해야 합니다. 셔터각을 조정하면 흔적의 길이를 변경할 수 있지만, 그것만으로 24fps의 샘플 배치를 60fps 안에 복제하는 것은 아닙니다.

모니터의 Hz와 영상의 FPS를 같은 숫자로 취급하지 마세요

FPS가 시간에 따라 만들어지는 새 영상 샘플의 수라면, Hz는 디스플레이가 1초 동안 화면을 갱신하는 횟수입니다. 둘은 같은 단위처럼 보일 때도 있지만 의미가 다릅니다. 이때 각 프레임을 몇 번의 화면 갱신 동안 보여 주는지가 표시 cadence입니다.

고정 60Hz 화면이라는 단순 조건을 가정하면 24fps의 프레임 하나에는 평균 60 ÷ 24 = 2.5번의 갱신이 배정됩니다. 반 번의 갱신을 사용할 수 없으므로, 단순 반복 방식에서는 어떤 프레임을 두 번, 다음 프레임을 세 번 보여 주는 식의 2·3 cadence가 생길 수 있습니다. 유지시간이 달라져 패닝에서 judder가 나타날 수 있습니다. 반면 같은 60Hz에서 30fps는 프레임마다 두 번, 60fps는 한 번씩 갱신에 배치할 수 있습니다.

120Hz로 산술을 바꾸면 24fps는 한 프레임당 5회, 30fps는 4회, 60fps는 2회 갱신이 됩니다. 이렇게 정수로 나누어떨어지는 조건에서는 앞의 2·3 반복 불균형을 피할 수 있습니다. 그러나 이것이 ‘120Hz 모니터에서는 24fps가 60fps처럼 부드럽다’는 뜻은 아닙니다. 화면 유지시간을 고르게 만드는 것과 원래 영상의 시간 샘플을 늘리는 것은 별개입니다.

60Hz와 120Hz 비교는 고정 주사율에서 영상 프레임을 단순 반복해 표시한다는 산술 예시입니다. 실제 기기에는 VRR(가변 주사율), 영상 보간, 출력 경로의 변환, 운영체제 합성, 브라우저 스케줄링 같은 변수가 있습니다. 재생 기기에서 다른 결과가 보이면 숫자가 틀렸다고 판단하기 전에 출력 방식을 먼저 확인하세요.

브라우저 체험과 실제 영상 재생의 경계를 알아야 합니다

위 체험 도구는 애니메이션의 경과 시간을 읽고, 각 FPS의 프레임 간격에 맞추어 위치를 계단식으로 계산합니다. 하지만 계산한 위치가 곧바로 독자의 눈앞에 정확한 간격으로 나타나는 것은 아닙니다. 시간 샘플링을 흉내 낸 것과 표시 장치에 그 시간표대로 출력한 것은 서로 다른 작업입니다.

MDN의 requestAnimationFrame 문서에 따르면 이 콜백은 다음 화면 repaint 전에 실행을 요청하며, 호출 빈도는 대체로 화면 주사율을 따릅니다. 60Hz뿐 아니라 75Hz, 120Hz, 144Hz 등도 사용됩니다. 백그라운드 탭이나 숨겨진 iframe에서는 대부분 일시정지됩니다. 따라서 이 도구는 24fps를 선택했다고 해서 브라우저나 디스플레이를 정확한 24Hz의 화면 출력 장치로 바꾸지 않습니다. 기기가 다른 시점에 그리면 일부 계산 샘플이 화면에 나오지 않을 수도 있습니다.

영상 프레임에 맞춘 다른 브라우저 API가 있다는 이유만으로 출력 문제가 해결되는 것도 아닙니다. MDN의 requestVideoFrameCallback 설명은 콜백 빈도가 비디오 프레임과 브라우저 페인트 빈도 중 낮은 쪽에 제한되며, 엄격한 동기화를 보장하지 않고 한 번의 vsync만큼 늦게 실행될 수도 있다고 안내합니다. 이 글의 체험기는 해당 API로 동영상을 디코딩하는 플레이어가 아닙니다.

브라우저 창을 다른 탭으로 옮겼다가 돌아오면 애니메이션이 멈추거나 타이밍이 달라 보일 수 있습니다. 창 크기를 바꾸면 실제 px 이동 거리도 바뀝니다. 비교할 때는 같은 창 크기, 같은 슬라이더 값, 같은 표시 환경을 유지하세요. 그리고 60Hz와 120Hz 장치를 모두 쓸 수 있다면 표시 차이를 참고하되, 이 브라우저 화면만으로 하드웨어의 실제 cadence를 판정하지 마세요.

실제 VFX 샷은 이 순서로 결정하고 검증하세요

1. 납품 프레임레이트와 타임라인부터 고정하세요

가장 먼저 확인할 대상은 ‘느낌이 좋아 보이는 FPS’가 아니라 프로젝트의 납품 규격입니다. 클라이언트가 요구한 프레임레이트나 이미 편집에서 확정된 타임라인을 먼저 확인하세요. 동일한 1초를 작업한다는 기준이 흔들리면 움직임 비교 자체가 달라집니다.

2. 같은 샷, 같은 이동 거리, 같은 시간을 준비하세요

VFX에서는 카메라 패닝, 화면을 가로지르는 물체, 가까운 전경 요소처럼 프레임 간 위치 변화가 잘 보이는 구간을 고르면 차이를 확인하기 쉽습니다. 같은 시작 위치와 끝 위치, 동일한 전체 이동 시간, 같은 카메라 구도와 렌더 조건을 사용하세요. 테스트는 가능하면 동일한 샷의 짧은 구간을 반복해서 만드세요.

3. FPS와 셔터각은 하나씩 바꾸세요

먼저 셔터각을 180°에 놓고 24·30·60fps로 샘플링한 결과를 비교하세요. 프레임을 한 장씩 넘겨 마커나 피사체가 화면에서 얼마나 이동했는지 관찰합니다. 그다음 프레임레이트 하나를 고정하고 셔터각을 바꿔 한 프레임의 윤곽과 흐림을 확인하세요. 재생 중에는 전체 움직임 인상을, 멈춘 프레임에서는 블러의 모양을 따로 기록하면 선택 이유가 명확해집니다.

4. 뷰포트 대신 실제 렌더와 최종 출력으로 다시 확인하세요

DCC의 viewport playback은 장면 계산이나 표시 성능 때문에 제때 갱신되지 않을 수 있습니다. 그런 상황에서 화면이 끊긴다고 판단해 프레임레이트를 바꾸는 것은 근거가 약합니다. 실제 렌더를 만들어 목표 타임라인에 배치하고 원래 의도한 속도로 재생하세요. 한 프레임씩 살펴볼 때는 블러를, 연속 재생할 때는 위치 점프와 패닝의 리듬을 봅니다.

합성 단계와 최종 인코딩·출력에서는 frame rate와 timebase가 의도대로 유지되는지 따로 점검하세요. 같은 프레임들이 들어 있어도 다른 시간 기준으로 해석되면 재생 속도와 타이밍이 달라질 수 있습니다. 소스, 합성 타임라인, 렌더 파일, 최종 파일의 프레임레이트 표기를 차례로 대조하세요.

작업 종류에 따라 무엇을 우선할지도 달라집니다

실사 합성 샷이라면 우선 소스 영상과 합성 타임라인의 시간 기준이 맞는지 확인하세요. 촬영된 움직임의 샘플 간격과 블러가 이미 정해져 있는 경우에는 CG 요소의 셔터각을 무조건 180°로 고정하기보다, 해당 샷의 실제 인상을 맞추는 것이 비교의 목적입니다. CG만으로 만든 샷이라면 샘플 수와 노출 설정을 함께 설계할 여지가 더 크지만, 그래도 최종 재생 조건을 무시하고 숫자만 고를 수는 없습니다.

빠르게 지나가는 소품이나 글자가 많은 모션그래픽에서는 24fps의 큰 프레임 간 점프가 가독성에 영향을 줄 수 있습니다. 그렇다고 항상 60fps로 바꾸라는 뜻은 아닙니다. 화면상 이동 거리와 시간을 먼저 줄이거나 바꾸는 편이 맞을 수도 있고, 셔터각을 조절해 윤곽을 어떻게 보일지 결정할 수도 있습니다. 어떤 조합이 적절한지는 움직임을 읽게 할 것인지, 빠른 동작의 인상을 강조할 것인지에 따라 달라집니다.

게임이나 실시간 렌더에서는 또 다른 확인 항목이 생깁니다. 프레임을 얼마나 자주 만들어 내는지뿐 아니라, 만들어진 프레임이 화면에 얼마나 일정한 간격으로 도착하는지인 frame pacing도 확인해야 합니다. 평균이 60fps에 가까워도 프레임 간 시간이 들쭉날쭉하면 끊김이 느껴질 수 있습니다. 모니터 주사율과 VRR 여부, 실제 출력 경로를 함께 확인하세요.

혼동하기 쉬운 두 가지 현상은 분리하세요

마차 바퀴가 실제 회전 방향과 반대로 돌거나 잠시 멈춘 것처럼 보이는 현상은 주기적 회전을 시간 샘플로 잘라 읽을 때 나타나는 aliasing 문제입니다. 이 글에서 비교하는 직선 이동의 샘플 간격과 관련된 개념은 있지만, 바퀴의 반복 무늬나 회전 주기를 계산하는 체험은 아닙니다.

또 23.976fps와 24fps를 긴 시간 재생했을 때 발생하는 누적 싱크 차이는 timebase와 시간축 해석을 따져야 하는 별도 문제입니다. 이 도구는 그 누적 싱크를 계산하지 않습니다. 화면의 움직임이 어떻게 보이는가와 시간이 얼마나 정확히 누적되는가를 같은 질문으로 취급하지 마세요.

최종 선택은 샷의 목적과 출력 조건으로 내리세요

마지막으로 24·30·60fps 체험을 한 번 더 실행하세요. 이동 거리를 높여 위치 점프를 보고, 셔터각을 낮춰 흔적을 줄인 뒤 다시 올리세요. 같은 시간에 같은 거리를 간다는 사실은 변하지 않습니다. 달라지는 것은 위치를 얼마만큼 촘촘히 샘플링하는지와 각 샘플 안에서 움직임을 얼마 동안 누적하는지입니다. 이후 실제 렌더를 목표 화면에서 재생해 표시 cadence까지 확인하면, 프레임 차이를 단순한 취향 논쟁이 아니라 재현 가능한 작업 선택으로 설명할 수 있습니다.

FPS는 샘플 간격, 셔터각은 블러, 디스플레이는 표시 시간입니다. 느낌은 이 셋의 조합에서 결정됩니다.

vfx 잡학지식

함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.