Keyframe, nội suy và đường cong chuyển động (easing) cho người mới
Keyframe quyết định nhân vật ở đâu, còn easing quyết định nó đến đó như thế nào. Hiểu ba khái niệm này là bạn đã nắm được nửa nghề diễn hoạt 3D.
Mở bất kỳ phần mềm diễn hoạt nào, bạn cũng sẽ thấy một thanh thời gian với những dấu chấm nhỏ. Đó là keyframe. Nhiều người học được cách đặt keyframe chỉ trong vài phút, nhưng mất rất lâu mới hiểu vì sao chuyển động của mình vẫn trông "điện tử". Câu trả lời thường nằm ở phần nằm giữa các keyframe.
Bài này giải thích ba khái niệm gắn chặt với nhau: keyframe, nội suy và easing, cùng một quy trình làm việc giúp bạn kiểm soát chúng.
Keyframe là gì?
Keyframe (khung khoá) là một mốc thời gian mà tại đó bạn khẳng định: "ở khung này, giá trị phải đúng như thế này". Giá trị có thể là vị trí, góc xoay của một khớp xương, độ mở của miệng, cường độ đèn…
Ví dụ: bạn muốn tay nhân vật vẫy chào.
- Khung 0: tay buông xuôi.
- Khung 12: tay giơ lên ngang vai.
- Khung 18: bàn tay nghiêng sang trái.
- Khung 24: bàn tay nghiêng sang phải.
Bạn chỉ đặt bốn mốc. Mọi khung còn lại do máy tính tự tính. Đó là nội suy.
Nội suy là gì?
Nội suy (interpolation) là cách phần mềm điền giá trị vào các khung giữa hai keyframe. Có ba kiểu cơ bản:
- Bậc thang (step/constant): giá trị giữ nguyên đến khi gặp keyframe tiếp theo thì nhảy ngay. Chuyển động trông giật cục, nhưng rất hữu ích ở giai đoạn đầu để xem tư thế và nhịp.
- Tuyến tính (linear): giá trị thay đổi đều đặn, tốc độ không đổi. Hợp với máy móc, băng chuyền, kim đồng hồ, nhưng làm người và động vật trông như robot.
- Đường cong (bezier/spline): giá trị tăng tốc và giảm tốc mềm mại. Đây là kiểu mặc định cho diễn xuất nhân vật.
Timing và spacing: hai thứ hay bị nhầm
Timing là bao nhiêu khung cho một hành động. Spacing là khoảng cách vật đi được giữa các khung liên tiếp.
Hình dung một quả bóng lăn qua mười khung. Nếu mỗi khung nó đi một đoạn bằng nhau, đó là spacing đều, tức tuyến tính. Nếu các khung đầu nó đi rất ít rồi nhích dần lên, quả bóng đang tăng tốc. Cùng timing mười khung, chỉ đổi spacing, cảm giác đã hoàn toàn khác. Easing chính là công cụ điều khiển spacing.
Easing: ease in, ease out
- Ease out (slow out): rời khỏi keyframe chậm rồi nhanh dần. Như xe máy vừa vặn ga.
- Ease in (slow in): tiến vào keyframe nhanh rồi chậm dần. Như xe máy phanh trước đèn đỏ.
- Ease in-out: cả hai đầu đều mềm. Phù hợp với phần lớn cử động bình thường.
Hai lưu ý quan trọng:
- Không phải chỗ nào cũng cần ease. Một cú đấm chạm mục tiêu, quả bóng chạm đất, cái tát… cần dừng gắt. Nếu bạn để ease in ở khoảnh khắc va chạm, cú đấm sẽ mềm nhũn như đang vuốt má.
- Mức độ ease thể hiện trọng lượng. Vật nặng như cái tủ lạnh cần ease out dài vì khó đẩy cho chạy. Chiếc lá rơi có ease rất kỳ lạ vì gió tác động liên tục.
Đọc đường cong chuyển động
Hầu hết phần mềm có một cửa sổ biểu đồ (graph editor): trục ngang là thời gian, trục dọc là giá trị. Cách đọc nhanh:
- Đường dốc = chuyển động nhanh.
- Đường nằm ngang = đứng yên.
- Đoạn cong thoai thoải ở hai đầu = có easing.
- Góc nhọn = đổi hướng đột ngột, đúng cho va chạm nhưng sai cho cử động mềm.
- Đường vọt quá rồi quay lại = overshoot, thường do tay cầm bezier kéo quá dài. Đôi khi bạn muốn hiệu ứng này (đầu lắc nhẹ sau khi quay), đôi khi đó là lỗi khiến tay "trôi" qua vị trí rồi kéo về.
Một mẹo nhỏ: khi chuyển động bị "lơ lửng", không có điểm nhấn, hãy nhìn biểu đồ. Thường bạn sẽ thấy mọi đường cong đều tròn trịa như nhau. Hãy làm sắc lại vài chỗ.
Quy trình làm việc: blocking, splining, polish
Đây là quy trình mà nhiều animator chuyên nghiệp áp dụng, dù tên gọi có thể khác nhau.
Bước 1: Blocking bằng nội suy bậc thang
Chỉ đặt các tư thế chính kể câu chuyện: tư thế bắt đầu, đón đà, đỉnh hành động, kết thúc. Để chế độ bậc thang. Lúc này bạn chỉ trả lời: tư thế có rõ ý không? nhịp có đúng không?
Đừng vội chuyển sang đường cong. Đường cong làm mọi thứ trông mượt và đánh lừa bạn rằng cảnh đã xong.
Bước 2: Thêm tư thế chuyển tiếp (breakdown)
Giữa hai tư thế chính, đặt một tư thế quyết định cách nhân vật đi từ A sang B. Đầu quay sang trái có thể cúi xuống ở giữa (như liếc nhìn sàn) hoặc ngẩng lên (như nhìn trời). Breakdown là chỗ cá tính chuyển động hiện ra.
Bước 3: Chuyển sang đường cong (splining)
Đổi nội suy sang bezier, xem lại. Lúc này sẽ lòi ra đủ thứ vấn đề: tay trôi, chân trượt, chuyển động đều quá. Sửa từng chỗ bằng cách chỉnh tay cầm đường cong hoặc thêm keyframe.
Bước 4: Đánh bóng (polish)
Lệch keyframe các bộ phận để tạo chồng lớp, thêm chớp mắt, thêm rung nhẹ ở tay, kiểm tra quỹ đạo theo đường cong. Đây là phần tốn thời gian nhất nhưng tạo khác biệt lớn nhất.
Ví dụ: nhân viên quán cà phê đặt ly xuống bàn
- Khung 0: tay cầm ly ngang ngực.
- Khung 8: tay hơi nhấc lên (đón đà nhỏ, rất nhẹ).
- Khung 20: ly chạm mặt bàn.
- Khung 26: tay buông khỏi ly, các ngón duỗi nhẹ.
Easing: từ khung 8 đến 20 dùng ease out ở đầu và ease in ở cuối, vì người ta đặt ly cẩn thận để không đổ cà phê. Nếu đây là người đang tức giận đập ly xuống, bạn bỏ ease in, để ly chạm bàn với tốc độ cao, còn thêm vài khung rung sau va chạm. Cùng bốn keyframe, chỉ đổi easing là đổi cả tâm trạng nhân vật.
Lỗi thường gặp
- Quá nhiều keyframe. Đặt key ở mọi khung khiến đường cong lổn nhổn, rất khó sửa. Hãy dùng ít key nhất có thể.
- Key mọi bộ phận vào cùng một khung. Nhìn rõ trên thanh thời gian: một cột thẳng hàng các dấu chấm. Hãy lệch chúng.
- Tư thế giữ (hold) chết cứng. Khi nhân vật đứng yên vài giây, nếu không có chuyển động nào thì trông như bị đóng băng. Dùng "moving hold": một vài thay đổi rất nhỏ ở thân, đầu, mắt.
- Chân trượt. Đường cong làm bàn chân đáng lẽ đứng yên lại nhích nhẹ. Dùng IK để khoá chân trên mặt đất.
- Dùng easing mặc định cho tất cả. Mặc định là điểm xuất phát, không phải đáp án.
Checklist
- Đã blocking bằng tư thế chính và kiểm tra nhịp trước khi làm mượt chưa?
- Mỗi điểm va chạm có dừng gắt không, mỗi cử động mềm có ease không?
- Biểu đồ có đoạn vọt quá ngoài ý muốn không?
- Các bộ phận có bắt đầu và dừng lệch nhau vài khung không?
- Khi giữ tư thế, nhân vật có còn "thở" không?
- Chân có bị trượt ở những khung lẽ ra đứng yên không?
Làm điều này trong adayroi studio
Studio diễn hoạt trong Director Studio làm việc theo đúng tư duy trên: bạn đặt keyframe trên timeline, dùng IK để khoá tay chân, rồi nhờ AI làm mượt xử lý phần nội suy trước khi tự tinh chỉnh. Nếu muốn điều khiển chuyển động bằng công thức, ví dụ một vật dao động theo hàm toán học, bạn có thể dùng script chuyển động viết bằng JavaScript. Để thực hành nguyên lý gốc, xem thêm bài 12 nguyên lý hoạt hình.