Cutscenes de câmera sem mod: keyframes, interpolação e truques de espectador
O vanilla move uma câmera de um jeito só — uma função de teleporte a cada tick — e o registro de linha do tempo define o clima ao redor. Para que serve cada um, e a suavização que evita o resultado robótico.
Não existe um objeto de câmera no vanilla, então uma cutscene é uma ilusão construída com teleportes, com uma linha do tempo para mudar o mundo ao redor.
Método 1: teleportar o jogador a cada tick
O jeito antigo e universal. Coloque o jogador em espectador e mova-o ao longo de um caminho:
gamemode spectator @s
tp @s 100.0 70.0 200.0 -90.0 10.0
um tp por tick a partir de uma cadeia de funções. Funciona em todas as versões e não precisa de nada especial. Os problemas são todos de suavidade:
- 20 keyframes por segundo. Uma cena de dez segundos são 200 linhas de
tp. - Passos lineares parecem mecânicos. Movimentos reais de câmera aceleram e desaceleram.
- A rotação dá a volta de forma problemática. Ir de yaw 170 para -170 é uma curva de 20 graus, mas a interpolação ingênua gira 340 graus no sentido errado. Normalize a diferença de ângulo para o intervalo -180…180 antes de avançar.
Gerar essas linhas é justamente para o que serve uma ferramenta de keyframes — você posiciona algumas posições e ela emite a função por tick com a suavização aplicada.
Suavização
A diferença entre amador e assistível é a curva de interpolação. Entre dois keyframes, com t de 0 a 1:
linear t
ease-in-out t < 0.5 ? 2t² : 1 − 2(1−t)²
smoothstep t² × (3 − 2t)
smoothstep é o padrão seguro. Aplique-o à posição e à rotação juntas, ou a câmera chega antes de terminar de girar.
Método 2: linhas do tempo, para tudo menos a câmera
Versões recentes adicionaram um registro de timeline, e é tentador lê-lo como uma trilha de câmera:
data/<namespace>/timeline/intro.json
Não é. Uma linha do tempo roda contra um relógio do mundo e define atributos de ambiente por keyframe — cor do céu e da névoa, som ambiente e música, luz — com interpolação nativa. Ela não consegue mover um jogador, então a câmera em si continua sendo o método 1. O que uma linha do tempo faz bem é o clima de uma cutscene: apagar o céu, mudar a névoa e trocar a música no ritmo dos teleportes, sem um comando por tick para cada coisa.
O custo é que ela só existe em versões recentes, então um mapa voltado para clientes mais antigos precisa simular o clima com /time e /weather.
Manter o jogador no lugar
O caminho de teleporte briga com duas coisas:
- Entrada do jogador. O espectador deixa o jogador voar para longe no meio da cena. Teleportar a cada tick anula isso, o que é um dos motivos pelos quais o método bruto persiste.
- Carregamento de chunks. Uma câmera voando para um lugar não carregado mostra o vazio. Use
/forceloadno caminho antes da cena e remova depois.
Esconder a HUD
O modo espectador e o F1 já resolvem a maior parte. Para um quadro limpo, um pacote de recursos que deixe os sprites da HUD em branco remove a mira e a barra de atalhos sem que o jogador precise apertar nada — veja o guia de HUD.
Posicione keyframes em um caminho e exporte a função por tick, e monte a linha do tempo que define a cena ao redor, com os Construtores de Cutscene e Linha do Tempo.