Blender 서랍 열고 닫기 애니메이션: Timeline·키프레임 기초 — 입문 21강

서랍을 닫은 위치를 1프레임에, 열린 위치를 40프레임에, 다시 닫힌 위치를 80프레임에 저장합니다. 이 세 시점에 Location 키프레임을 넣으면 Blender가 중간 움직임을 계산합니다. 손잡이는 서랍의 자식으로 묶고, 협탁 본체는 고정해 둡니다.

이번 예제는 Blender 5.2 LTS의 기본 Blender 키맵 기준입니다. 3D Viewport에서 Location을 골라 키를 넣는 메뉴는 K로 엽니다. I는 기본 키 채널이나 활성 Keying Set에 따라 바로 키를 삽입하므로, I를 눌렀는데 메뉴가 안 뜬다고 오류는 아닙니다.

시작 파일과 움직일 부품부터 확인

20강의 밤 방 파일을 열고 File → Save As로 blender-lesson-21-drawer-animation.blend를 저장합니다. 원본 밤 파일은 덮어쓰지 않습니다. 단위는 Metric, Unit Scale 1, 길이 Meters 기준입니다.

앞 강의의 단순한 협탁은 Nightstand_Body와 Nightstand_Handle로 구성됩니다. 손잡이가 붙었다고 속이 빈 서랍까지 만들어진 것은 아닙니다. Nightstand_Drawer가 없다면 아래 준비 단계를 먼저 진행하세요. 본체 전체를 앞으로 옮기는 것으로 서랍 열기를 대신하지 않습니다.

준비 수치는 수정된 19·20강의 협탁에 맞췄습니다. 본체의 월드 치수는 0.66 × 0.495 × 0.69m이고, 바닥은 Z 0입니다. 본체·부모 Empty의 크기와 위치를 임의로 바꾸지 않습니다. 다른 협탁 파일이라면 아래 모델링 좌표를 그대로 복사하지 말고 자기 서랍의 닫힌 위치와 안전한 이동 거리를 기준으로 잡으세요.

준비: 본체에 빈 공간을 만들고 서랍 상자 추가

이번에는 앞판만 떠 있는 모양 대신 바닥·옆판·뒤판이 있는 간단한 서랍을 만듭니다. 18강의 Boolean Difference를 본체에 한 번 더 사용합니다. 레일이나 실제 가구의 하중·강도를 설계하는 과정은 아닙니다.

  1. Object Mode에서 새 Cube를 만들고 Drawer_Cutter로 이름을 바꿉니다. Rotation은 0, 아래 표의 Dimensions와 Location을 입력한 뒤 Ctrl+A → Scale을 적용합니다. 새 Cube는 부모가 없는 상태로 둡니다.
  2. Nightstand_Body에 Boolean Modifier를 추가합니다. Difference, Solver Exact, 대상 Object를 Drawer_Cutter로 지정합니다. 본체의 앞쪽 윗부분에 서랍 공간이 뚫려야 합니다.
  3. 커터는 삭제하지 않습니다. H로 뷰포트에서 숨기고, Outliner의 카메라 아이콘도 꺼 렌더에서 제외합니다. 아이콘이 없다면 Filter에서 렌더 제한 표시를 켭니다.
  4. 아래 표의 서랍 부품 다섯 개를 새 Cube로 만듭니다. 각각 부모 없음·Rotation 0 상태에서 Dimensions와 Location을 입력하고 Scale을 적용합니다. 재질은 본체와 같은 기존 재질을 선택해도 됩니다.
새 물체 Dimensions X / Y / Z (m) Location X / Y / Z (m)
Drawer_Cutter 0.60 / 0.60 / 0.24 2.45 / 1.45 / 0.54
Drawer_Front 0.58 / 0.03 / 0.22 2.45 / 1.29 / 0.54
Drawer_Bottom 0.54 / 0.40 / 0.02 2.45 / 1.50 / 0.445
Drawer_Left 0.02 / 0.40 / 0.18 2.19 / 1.50 / 0.54
Drawer_Right 0.02 / 0.40 / 0.18 2.71 / 1.50 / 0.54
Drawer_Back 0.54 / 0.02 / 0.18 2.45 / 1.69 / 0.54

본체·손잡이·커터를 제외하고 서랍 부품 다섯 개만 선택합니다. Drawer_Front를 마지막 활성 물체로 선택한 뒤 Ctrl+J로 합칩니다. 활성 앞판의 원점이 유지되므로, 합친 물체를 Nightstand_Drawer로 이름 붙이면 닫힌 Location은 X 2.45, Y 1.29, Z 0.54m가 됩니다. Scale은 1 / 1 / 1, Parent는 없음인지 확인합니다.

새 서랍과 커터는 기존 협탁 Collection에 넣어 두면 찾기 편합니다. Collection에 넣는 것과 부모를 지정하는 것은 다릅니다. 이번 서랍은 축소된 Nightstand_Group의 자식으로 만들지 않아, 입력한 Y 차이가 월드 이동 거리와 바로 일치하도록 합니다.

1. 손잡이만 서랍을 따라오게 연결

  1. Nightstand_Handle만 선택하고 Alt+P → Clear and Keep Transformation으로 기존 부모 관계를 해제합니다. Mac의 Alt는 Option 키입니다. 화면에서 손잡이의 위치와 크기가 유지돼야 합니다.
  2. 손잡이를 먼저 선택하고, Shift를 누른 채 Nightstand_Drawer를 마지막에 선택해 활성 물체로 만듭니다. 본체는 선택하지 않습니다.
  3. 3D Viewport에서 Ctrl+P → Object를 실행합니다. 좌하단 마지막 실행 패널 또는 F9에서 Keep Transform을 켭니다. 연결 직후 손잡이가 튀거나 크기가 바뀌지 않았는지 확인합니다.
  4. 서랍만 선택해 G → Y로 조금 움직여 봅니다. 손잡이가 함께 오면 Esc로 시험 이동을 취소합니다. 본체는 움직이지 않아야 합니다.

손잡이에는 따로 키를 넣지 않습니다. 부모인 서랍이 움직이면 자식 손잡이가 함께 움직입니다. 서랍을 손잡이의 자식으로 거꾸로 연결하지 않도록 선택 순서를 확인하세요.

2. 재생 범위를 1~80프레임, 24 fps로 설정

Output Properties의 Format에서 Frame Rate를 24 fps로 맞춥니다. Frame Range는 Start 1, End 80, Step 1입니다. Timeline의 Start·End에서도 같은 장면 범위를 바꿀 수 있습니다. Auto Keying의 빨간 녹화 버튼은 꺼 둡니다.

1~80을 모두 출력하면 80장이라 약 3.33초입니다. 첫 키에서 마지막 키까지의 시간 간격은 79프레임 간격, 약 3.29초입니다. 이번에는 영상 파일을 출력하지 않고 열림·닫힘 동작과 저장된 키를 확인합니다.

3. 세 시점에 Location 저장

Nightstand_Drawer 하나만 선택합니다. 아래 표의 순서대로 현재 프레임 변경 → Location Y 입력 → K → Location을 반복합니다. K를 누를 때 마우스는 3D Viewport 위에 둡니다. 메뉴로 찾으려면 Object → Animation → Insert Keyframe with Keying Set을 사용합니다.

프레임 상태 예제 Location Y (m) 다른 모델의 원리
1 닫힘 1.29 닫힌 기준 Y₀
40 24cm 열림 1.05 Y₀ − 이동 거리
80 다시 닫힘 1.29 처음과 같은 Y₀

예제의 X는 2.45m, Z는 0.54m로 고정합니다. 1프레임에서 Y 1.29를 입력하고 K → Location, 40프레임에서 Y 1.05를 입력하고 같은 메뉴로 저장합니다. 80프레임에서는 Y 1.29로 되돌린 뒤 다시 저장합니다. 값만 고치고 키를 넣지 않으면 다른 프레임으로 갔을 때 수정값이 남지 않을 수 있습니다.

이번 예제는 부모 없는 서랍·Unit Scale 1 조건에서 Y를 0.24m 줄여 앞쪽으로 24cm 당깁니다. 예전 파일의 -0.705 / -1.900 같은 로컬 좌표를 새 모델에 그대로 대입하지 않습니다. 다른 부모·축척·제약이 있는 모델에서는 채널 값 차이가 실제 이동 거리와 같지 않을 수 있습니다.

Location 키 세트는 X·Y·Z 채널을 대상으로 합니다. 별도 재현에서는 키가 놓인 시점은 세 곳, 채널별 키 점은 총 9개였습니다. 다만 Needed처럼 필요한 키만 넣는 옵션에 따라 고정된 X·Z의 키 개수는 달라질 수 있습니다. 점의 합계보다 Y에 1·40·80의 값이 저장되고 X·Z는 고정되는지를 확인하세요.

4. 재생하고 Dope Sheet에서 확인

Timeline에 마우스를 두고 Spacebar로 재생·정지합니다. 파란 Playhead가 움직이면서 1에서는 닫힘, 40에서는 열림, 80에서는 다시 닫힘이어야 합니다. 중간 프레임은 Blender가 보간합니다. 별도 검증에서는 기본 Bezier 보간을 사용했으며, 속도 변화는 다음 Graph Editor·보간법 강의에서 다룹니다.

Rendered 표시가 무거우면 Z → Solid에서 움직임부터 확인하세요. 장면의 설정이 24 fps라고 화면 재생도 항상 실시간 24 fps가 나오는 것은 아닙니다. 최종 조명·재질은 필요한 프레임에서 F12로 확인합니다.

Timeline의 Editor Type을 Dope Sheet로 바꾸고 View → Frame All 또는 Home을 사용해 키 전체를 봅니다. 서랍을 선택한 상태에서 Nightstand_Drawer의 Location 채널을 펼쳐 Y에 1·40·80의 키가 있는지, X·Z의 값은 그대로인지 확인합니다. 키가 안 보이면 Only Show Selected나 검색 필터도 확인합니다.

Dope Sheet의 키가 노란색이면 선택된 키이고, 회색이면 선택되지 않은 키일 수 있습니다. 노란 점이 아니라고 키 삽입 실패는 아닙니다. 모양도 핸들 종류 등에 따라 달라질 수 있으므로, 색이나 마름모 모양 하나보다 시점과 채널·실제 움직임을 함께 확인합니다.

별도 재현한 서랍의 1프레임 닫힘, 40프레임 24cm 열림, 80프레임 다시 닫힘을 세로로 비교한 실제 렌더
Codex가 별도 Blender 장면에서 실제 렌더한 1·40·80프레임입니다. 서랍 상자와 손잡이는 함께 움직이고 협탁 본체는 고정됩니다. 형태를 보기 위한 별도 근접 카메라를 사용했으며, 저장한 강의 파일의 기존 방 카메라는 유지했습니다. 필자의 직접 실습 캡처는 아닙니다.

5. 잘못 넣은 키를 지우거나 갱신

예를 들어 35프레임에 잘못 저장했다면 Dope Sheet에서 서랍 채널만 표시한 뒤, 35프레임에 있는 Location 키를 선택해 X 또는 Delete로 지웁니다. 다른 시점의 키는 남겨야 합니다. 마우스가 3D Viewport에 있을 때 X를 누르면 물체를 삭제할 수 있으니, 키를 지울 편집기 위치부터 확인하세요.

40프레임의 열린 위치만 고치려면 40으로 이동해 Y를 수정하고 다시 K → Location을 실행합니다. 같은 채널의 같은 프레임에 있는 키 값이 갱신됩니다. 삭제한 뒤에는 세 시점이 남았는지, 갱신한 뒤에는 1과 80의 닫힌 위치가 그대로인지 확인합니다.

Alt+I는 현재 편집기와 선택 대상에 따라 현재 프레임의 키를 지우는 방법입니다. 입문 단계에서는 삭제할 시점과 채널이 보이는 Dope Sheet를 사용하면 범위를 확인하기 쉽습니다. 전체 애니메이션을 지우는 Clear Keyframes와 혼동하지 않습니다.

결과가 다를 때 확인할 순서

  • K 메뉴가 안 열린다: 마우스를 3D Viewport로 옮기고 Object Mode인지 확인합니다. 기본 Blender 키맵과 다른 설정이면 Object → Animation 메뉴를 사용하세요. I가 자동으로 여러 채널에 키를 넣는 것은 5.2 기본 동작일 수 있습니다.
  • 손잡이만 남거나 크기가 바뀐다: 손잡이의 Parent가 Nightstand_Drawer인지 확인합니다. Keep Transform을 켜서 현재 모양을 유지하고, 서랍 자체는 Parent 없음인지 봅니다.
  • 서랍이 없거나 앞판만 움직인다: 준비 단계의 다섯 부품을 합쳤는지 확인합니다. 협탁의 속이 막혔다면 Boolean 대상 커터와 Difference·Exact 설정을 확인합니다. 커터는 삭제하지 않습니다.
  • 값을 바꿨는데 움직이지 않는다: 현재 프레임, 선택 물체, K → Location 저장 여부를 봅니다. 다른 물체나 Rotation에 키를 넣지 않았는지 Dope Sheet에서 확인합니다.
  • 본체까지 움직인다: Nightstand_Group 또는 Nightstand_Body를 선택했을 수 있습니다. 시험 이동은 Esc로 취소하고 Nightstand_Drawer만 선택합니다.
  • 서랍이 뒤로 들어간다: 예제에서는 음수 Y 방향이 앞입니다. 40프레임은 Y 1.05입니다. 다른 방향의 협탁에는 이 좌표를 그대로 적용하지 않습니다.
  • 키가 너무 많이 생긴다: Auto Keying을 끄고, 서랍의 1·40·80 외 시점만 골라 지웁니다. 같은 시점에 X·Y·Z 점이 있는 것은 정상입니다.

저장하고 다시 열어 마무리

Ctrl+S로 저장한 뒤 파일을 다시 열어 Start 1 / End 80 / 24 fps, 손잡이의 부모, 세 시점의 Location 키를 확인합니다. 40프레임에 서랍만 앞으로 나오고 1과 80에서 같은 위치로 돌아오면 이번 목표에 도달한 것입니다.

이 글의 별도 검증은 Python(bpy)으로 모델과 키를 구성했습니다. 1~80 모든 정수 프레임에서 손잡이가 같은 변위로 따라오고 본체가 고정되며, 서랍과 본체 표면이 교차하지 않는지 확인했습니다. 35프레임 키의 삽입·삭제, 40프레임 키 갱신, 저장 후 재열기도 시험했고 1·20·40·60·80의 실제 정지 렌더 전체를 확인했습니다. 실제 GUI 단축키 입력·실시간 재생이나 필자의 원본 프로젝트를 시험한 기록은 아닙니다.

이번에는 MP4를 출력하지 않습니다. 열림 키를 25프레임으로 옮겨 빠르게 열고 천천히 닫히게 하거나, 열린 위치를 조금 덜 당기는 응용은 가능합니다. 다른 위치로 바꿀 때도 협탁 안에 남는 길이를 확인하세요. 다음 22강에서는 Graph Editor와 보간, 이후 강의에서는 카메라와 영상 출력을 이어갑니다.

공식 참고: 5.2 키 삽입·삭제와 K 메뉴, Timeline, Dope Sheet의 키와 선택 색상, Dope Sheet 편집, 부모 지정과 Keep Transform.