Cutscenes de caméra sans mod : keyframes, interpolation et astuces de spectateur
Le vanilla déplace une caméra d'une seule façon — une fonction de téléportation à chaque tick — et le registre de timeline donne l'ambiance autour. Ce pour quoi chacun est bon, et le lissage qui évite l'effet robotique.
Il n'existe pas d'objet caméra en vanilla, donc une cutscene est une illusion construite à partir de téléportations, avec une timeline pour changer le monde autour.
Méthode 1 : téléporter le joueur à chaque tick
La méthode ancienne et universelle. Placez le joueur en spectateur, puis déplacez-le le long d'un chemin :
gamemode spectator @s
tp @s 100.0 70.0 200.0 -90.0 10.0
un tp par tick depuis une chaîne de fonctions. Cela fonctionne sur toutes les versions et ne nécessite rien de spécial. Les problèmes concernent tous le lissage :
- 20 keyframes par seconde. Un plan de dix secondes représente 200 lignes
tp. - Les étapes linéaires paraissent mécaniques. Les vrais mouvements de caméra ont des accélérations et décélérations.
- La rotation s'enroule mal. Passer d'un yaw de 170 à -170 est une rotation de 20 degrés, mais une interpolation naïve tourne de 340 degrés dans le mauvais sens. Normalisez la différence d'angle dans l'intervalle -180…180 avant de progresser.
Générer ces lignes est le rôle d'un outil de keyframes — vous placez une poignée de positions et il émet la fonction par tick avec l'easing appliqué.
Easing
La différence entre amateur et regardable, c'est la courbe d'interpolation. Entre deux keyframes, avec t de 0 à 1 :
linear t
ease-in-out t < 0.5 ? 2t² : 1 − 2(1−t)²
smoothstep t² × (3 − 2t)
smoothstep est la valeur par défaut sûre. Appliquez-la à la position et à la rotation ensemble, sinon la caméra arrive avant d'avoir fini de tourner.
Méthode 2 : les timelines, pour tout sauf la caméra
Les versions récentes ont ajouté un registre timeline, et il est tentant de le lire comme une piste de caméra :
data/<namespace>/timeline/intro.json
Ce n'en est pas une. Une timeline s'exécute sur une horloge de monde et définit des attributs d'environnement par keyframes — couleur du ciel et du brouillard, sons d'ambiance et musique, lumière — avec une interpolation native. Elle ne peut pas déplacer un joueur, donc la caméra elle-même reste la méthode 1. Ce qu'une timeline fait bien, c'est l'ambiance d'une cutscene : faire passer le ciel en fondu, décaler le brouillard et changer la musique en rythme avec les téléportations, sans une commande par tick pour chacun.
Le coût, c'est qu'elle n'existe que sur les versions récentes, donc une map ciblant des clients plus anciens doit simuler l'ambiance avec /time et /weather.
Garder le joueur en place
Le chemin de téléportation se heurte à deux choses :
- Les entrées du joueur. Le mode spectateur permet au joueur de s'envoler en plein plan. Le retéléporter à chaque tick écrase cela, ce qui est l'une des raisons pour lesquelles la méthode brute persiste.
- Le chargement des chunks. Une caméra volant vers une zone non chargée montre du vide.
/forceloadle chemin avant le plan et retirez-le après.
Masquer l'interface
Le mode spectateur et F1 vous amènent déjà loin. Pour une image propre, un pack de ressources qui vide les sprites de l'interface retire le réticule et la barre d'action sans que le joueur ait à appuyer sur quoi que ce soit — voir le guide de l'interface.
Placez des keyframes sur un chemin et exportez la fonction par tick, puis construisez la timeline qui plante le décor autour, avec les Cutscene & Timeline Builders.