Cắt cảnh camera không cần mod: keyframe, nội suy và thủ thuật spectator
Vanilla chỉ di chuyển camera theo một cách — hàm dịch chuyển tức thời mỗi tick — còn registry timeline tạo không khí xung quanh. Mỗi cách phù hợp với việc gì, và phép làm mượt nào giúp nó không trông máy móc.
Trong vanilla không có đối tượng camera, nên một đoạn cắt cảnh là ảo giác dựng từ các lần dịch chuyển tức thời, kèm một timeline để thay đổi thế giới xung quanh.
Cách 1: dịch chuyển Người chơi mỗi tick
Cách cũ, phổ quát. Đặt Người chơi vào spectator, rồi 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ó chạy trên mọi phiên bản và không cần gì đặc biệt. Vấn đề nằm ở độ mượt:
- 20 keyframe mỗi giây. Một cảnh mười giây là 200 dòng
tp. - Bước tuyến tính trông máy móc. Chuyển động camera thật thường tăng tốc và giảm tốc.
- Góc quay bị quấn sai. Đi từ yaw 170 sang -170 là rẽ 20 độ, nhưng nội suy ngây thơ sẽ xoay 340 độ sai hướng. Chuẩn hoá hiệu góc về khoảng -180…180 trước khi bước.
Sinh ra những dòng đó chính là việc của một công cụ keyframe — bạn đặt vài vị trí và nó xuất ra hàm mỗi tick đã áp dụng easing.
Easing
Khác biệt giữa nghiệp dư và đáng xem nằm ở đường cong nội suy. 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à lựa chọn mặc định an toàn. Áp dụng nó cho cả vị trí lẫn góc quay, nếu không camera sẽ tới nơi trước khi quay xong.
Cách 2: timeline, cho mọi thứ trừ camera
Các phiên bản gần đây thêm một registry timeline, và thật dễ tưởng đó là track camera:
data/<namespace>/timeline/intro.json
Không phải. Một timeline chạy theo đồng hồ thế giới và đặt keyframe cho thuộc tính môi trường — màu trời và sương mù, âm thanh và nhạc nền, Ánh sáng — với nội suy gốc. Nó không thể di chuyển Người chơi, nên camera vẫn phải dùng cách 1. Điều timeline làm tốt là không khí của đoạn cắt cảnh: làm mờ dần bầu trời, đổi sương mù và hoán nhạc khớp với các lần dịch chuyển, mà không cần lệnh mỗi tick cho từng thứ.
Cái giá là nó chỉ tồn tại trên các phiên bản gần đây, nên bản đồ nhắm tới client cũ phải giả không khí bằng /time và /weather.
Giữ Người chơi cố định
Đường dẫn dịch chuyển đối đầu với hai thứ:
- Nhập liệu của Người chơi. Spectator cho phép Người chơi bay đi giữa cảnh. Dịch chuyển lại mỗi tick sẽ ghi đè, đó là một lý do cách thô bạo vẫn tồn tại.
- Nạp chunk. Camera bay tới nơi chưa nạp sẽ hiện khoảng không.
/forceloadđường dẫn trước khi quay và xoá sau đó.
Ẩn HUD
Chế độ spectator và F1 đã lo phần lớn. Để có khung hình sạch, một resource pack làm trống các sprite HUD sẽ xoá tâm ngắm và thanh nóng mà Người chơi không cần bấm gì — xem hướng dẫn HUD.
Đặt keyframe trên một đường dẫn rồi xuất hàm mỗi tick, và dựng timeline tạo bối cảnh xung quanh, với Cutscene & Timeline Builders.