Cenas cinematográficas sem mods: keyframes, interpolação e truques de espectador
Duas maneiras de mover uma câmera no jogo base: uma função de teletransporte por tick ou o registro de linha do tempo. Para que cada uma serve e como suavizar o movimento para não parecer robótico.
Não existe um objeto de câmera no jogo base, então uma cena cinematográfica é uma de duas ilusões.
Método 1: teletransportar o jogador a cada tick
A forma antiga e universal. Coloque o jogador no modo espectador e, em seguida, 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 de uma cadeia de funções. Funciona em todas as versões e não precisa de nada especial. Os problemas são todos sobre a suavidade:
- 20 keyframes por segundo. Uma cena de dez segundos são 200 linhas de
tp. - Passos lineares parecem mecânicos. Movimentos de câmera reais suavizam a entrada e a saída.
- A rotação se comporta mal. Ir do yaw 170 para -170 é um giro de 20 graus, mas a interpolação ingênua gira 340 graus na direção errada. Normalize a diferença de ângulo para o intervalo -180…180 antes de dar o passo.
Gerar essas linhas é para isso que serve uma ferramenta de keyframe — você define algumas posições e ela emite a função por tick com suavização aplicada.
Suavização (Easing)
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 chegará antes de terminar de girar.
Método 2: o registro de linha do tempo (timeline registry)
Versões mais recentes adicionam um formato de linha do tempo que descreve a cena inteira como dados, em vez de centenas de teletransportes:
data/<namespace>/timeline/intro.json
Keyframes com tempos e modos de interpolação, reproduzidos com um único comando. Vantagens:
- Muito menor. Seis keyframes em vez de duzentos teletransportes.
- A interpolação é nativa, então não há matemática de suavização manual.
- Independente da taxa de quadros — não engasga como um teletransporte por tick em um servidor carregado.
O custo é que ele só existe em versões recentes, então um mapa que visa clientes mais antigos ainda precisa do método 1.
Mantendo o jogador no lugar
Ambos os métodos lutam contra duas coisas:
- Movimento do jogador. O modo espectador permite que o jogador voe para longe no meio da cena. O teletransporte repetido a cada tick anula esse movimento, uma das razões pelas quais o método de força bruta ainda é usado.
- Carregamento de chunks. Uma câmera voando para um lugar descarregado mostra o vazio. Use
/forceloadno caminho antes da cena e remova-o depois.
Escondendo o HUD
/gamerule doImmediateRespawn, modo espectador e F1 já ajudam bastante. Para obter uma imagem limpa, um pacote de recursos que deixa os sprites do HUD em branco remove a mira e a barra de acesso rápido sem que o jogador precise pressionar nada — consulte o guia do HUD.
Coloque keyframes em um caminho e exporte uma função por tick ou um JSON de linha do tempo com os Construtores de Cenas Cinematográficas e Linhas do Tempo.