Guides / Commands & Data

Cảnh cắt camera không cần mod: keyframe, nội suy và các mẹo của chế độ khán giả

Hai cách để di chuyển camera trong vanilla – một hàm dịch chuyển tức thời theo từng tick, hoặc hệ thống timeline. Ưu điểm của từng cách và cách làm mượt để tránh chuyển động robot.

Trong vanilla không có đối tượng camera, vì vậy cảnh cắt (cutscene) là một trong hai ảo ảnh.

Phương pháp 1: dịch chuyển Người chơi mỗi tick

Cách cũ, phổ biến. Đặt Người chơi vào chế độ khán giả (spectator), sau đó di chuyển họ dọc theo một đường dẫn:

gamemode spectator @s
tp @s 100.0 70.0 200.0 -90.0 10.0

một tp mỗi tick từ một chuỗi hàm. Nó hoạt động trên mọi phiên bản và không cần gì đặc biệt. Các vấn đề đều liên quan đến độ mượt:

  • 20 keyframe mỗi giây. Một cảnh quay mười giây là 200 dòng tp.
  • Các bước tuyến tính trông máy móc. Chuyển động camera thực tế sẽ vào và ra một cách nhẹ nhàng.
  • Xoay bị lỗi khi vượt qua giới hạn. Đi từ góc quay 170 đến -170 là một vòng quay 20 độ, nhưng nội suy đơn giản sẽ quay 340 độ sai hướng. Chuẩn hóa sự khác biệt góc vào khoảng -180…180 trước khi thực hiện bước.

Việc tạo ra các dòng đó là mục đích của một công cụ keyframe — bạn đặt một vài vị trí và nó sẽ xuất ra hàm theo từng tick với hiệu ứng làm mượt được áp dụng.

Làm mượt (Easing)

Sự khác biệt giữa nghiệp dư và có thể xem được là đường cong nội suy (interpolation curve). Giữa hai keyframe, với t từ 0 đến 1:

linear      t
ease-in-out t < 0.5 ? 2t²  :  1 − 2(1−t)²
smoothstep  t² × (3 − 2t)

smoothstep là mặc định an toàn. Áp dụng nó cho vị trí và xoay cùng lúc hoặc camera sẽ đến trước khi nó xoay xong.

Phương pháp 2: hệ thống timeline

Các phiên bản mới hơn bổ sung định dạng timeline mô tả toàn bộ cảnh quay dưới dạng dữ liệu thay vì hàng trăm lần dịch chuyển tức thời:

data/<namespace>/timeline/intro.json

Keyframe với thời gian và chế độ nội suy, được phát bằng một lệnh duy nhất. Ưu điểm:

  • Nhỏ gọn hơn nhiều. Sáu keyframe thay vì hai trăm lần dịch chuyển tức thời.
  • Nội suy là bản địa, vì vậy không cần tính toán làm mượt thủ công.
  • Độc lập với tốc độ khung hình — nó không bị giật như cách dịch chuyển tức thời theo từng tick trên một máy chủ đang tải.

Chi phí là nó chỉ tồn tại trên các phiên bản gần đây, vì vậy một Bản đồ (Map) nhắm mục tiêu đến các máy khách cũ hơn vẫn cần phương pháp 1.

Giữ Người chơi cố định

Cả hai phương pháp đều phải đối phó với hai điều:

  • Đầu vào của Người chơi. Chế độ khán giả cho phép Người chơi bay đi giữa cảnh quay. Việc dịch chuyển tức thời lại mỗi tick sẽ ghi đè lên nó, đây là một lý do tại sao phương pháp brute-force vẫn tồn tại.
  • Tải chunk. Một camera bay đến một nơi chưa được tải sẽ hiển thị khoảng trống. /forceload đường dẫn trước cảnh quay và xóa nó sau.

Ẩn HUD

/gamerule doImmediateRespawn, chế độ khán giả và F1 sẽ giúp bạn đạt được hầu hết mục tiêu. Để có một khung hình sạch sẽ, một gói tài nguyên làm trống các sprite HUD sẽ loại bỏ dấu thập và thanh công cụ mà Người chơi không cần nhấn bất cứ thứ gì — xem hướng dẫn HUD.

Đặt keyframe trên một đường dẫn và xuất ra hàm theo từng tick hoặc JSON timeline với Cutscene & Timeline Builders.

Trình dựng cutscene & timeline →

More guides

Browse all →

Cần thêm công cụ Minecraft khác?

Bộ công cụ tạo, xem và chuyển đổi chạy ngay trên trình duyệt — tất cả đều miễn phí.