You Want 3D Graphics In Your Linux Terminal

Ratty est un terminal expérimental intégrant un moteur 3D (Bevy) qui permet d’afficher et de manipuler des objets 3D dans le terminal, avec un curseur 3D animé, le tout basé sur le protocole Ratty Graphics Protocol (RGP) et la bibliothèque Ratatui.

Voir la source

SYNTHÈSE STRUCTURÉE

Un terminal 3D, pas un simple émulateur

Ratty n’est pas un terminal classique : il embarque un moteur de jeu (Bevy) pour rendre des objets 3D dans l’espace du terminal. L’intervenant précise : “This is very much a tech demo to show what can be done if you put your mind to it rather than something that is sort of meant to be daily driven in its current state.” Le terminal peut basculer entre un mode 2D standard et un mode 3D où le terminal lui-même devient un objet 3D manipulable (rotation, zoom, panoramique).

Les raccourcis clavier pour la 3D

  • CTRL+ALT+ENTER : bascule entre le mode 2D et le mode 3D.
  • CTRL+ALT+M : active le mode Möbius (déformation en ruban de Möbius).
  • CTRL+ALT+UP / CTRL+ALT+DOWN : augmente ou diminue la déformation en mode Möbius.
  • Ces modes restent fonctionnels : “in this 3D mode, in the Mobius mode, in both these modes, this is still functioning totally fine as a terminal.”

Les démos fournies avec Ratty

Le projet inclut plusieurs applications de démonstration :

  • draw : un canvas 2D/3D où le dessin en 2D est automatiquement transformé en objet 3D. Les touches : clic droit efface, C efface tout, Q quitte.
  • BigRat : un visualiseur de modèles 3D (fichiers .obj ou .glb). Contrôles : flèches pour déplacer, +/- pour l’échelle, A pour arrêter l’animation, [/] pour la luminosité, C pour cacher le modèle.
  • Document : un éditeur de documents inspiré de Temple OS avec objets 3D inline et rendu d’images via le protocole Kitty.

Configuration du terminal

Le fichier de configuration se trouve dans ~/.config/ratty/ratty.toml. L’intervenant précise : “You can do a lot of the general normal stuff here, like changing the default settings for the terminal, how many columns you want, obviously the shell, the name of the terminal, the term variable, the font you want to be using.” Les sections spécifiques à la 3D sont cursor.model et cursor.animation :

[cursor.model]
# Chemin vers un fichier .obj ou .glb
model = "/path/to/model.obj"
brightness = 1.0
x_offset = 0.0
plane_offset = 0.0
visible = true

[cursor.animation]
speed = 1.4

Le curseur 3D animé

Le curseur est un objet 3D (par défaut un rat) qui tourne sur lui-même. La vitesse d’animation se règle via cursor.animation.speed. L’intervenant a testé des valeurs extrêmes : “Let’s go 25,000. And if this causes a problem and breaks the video, well, we’re going to find out. No, it seems like it’s fine.” Il note que la rotation peut sembler immobile si la vitesse est un multiple du taux de rafraîchissement.

Le Ratty Graphics Protocol (RGP)

Pour permettre le rendu 3D, le développeur a créé le RGP, un protocole documenté sur GitHub. L’intervenant explique : “It is a relatively simple protocol, all things considered. It’s pretty much just a consistent way of loading in a 3D object.” Un exemple d’implémentation est fourni dans le dépôt ratatui-ratty.

Performances et limitations

Ratty est gourmand en ressources : “I know sacrificing 300 megabytes of RAM just to run a terminal emulator is a lot, but everything comes with a cost, especially the spinning rat cursor.” L’intervenant compare avec les terminaux Electron qui consomment autant sans fonctionnalités 3D. Il note aussi des artefacts de rendu, surtout lors du redimensionnement, et que KDE ralentit à 3 FPS dans ce cas.

La 3D dans d’autres terminaux

Le protocole Kitty permet déjà de rendre des images, et par extension des objets 3D. L’intervenant montre un exemple dans Ghostty : “Did you know that with the Kitty image protocol you actually can render 3D objects? Ghostty is faster than Kitty so it’s just going to run better.” Ratty va plus loin en dédiant son architecture à cette fonctionnalité.

Un projet expérimental, pas un terminal quotidien

Le développeur assume le caractère exploratoire : “My ultimate goal with Ratty is to explore the possibilities of what a terminal can be and inspire new ideas and projects in the terminal space.” L’intervenant conclut : “Do I think this is really going to be a new future for terminals? We’re going to see 3D image rendering, 3D model rendering for everything in the future? No, probably not.”

CONCEPTS CLÉS

  • Ratatui : bibliothèque Rust pour créer des interfaces utilisateur dans le terminal, utilisée comme base pour Ratty.
  • Bevy : moteur de jeu Rust utilisé par Ratty pour le rendu 3D.
  • RGP (Ratty Graphics Protocol) : protocole propriétaire pour charger et afficher des objets 3D dans le terminal.
  • Kitty image protocol : protocole existant pour afficher des images dans les terminaux, que Ratty étend à la 3D.

CONCLUSION

Ratty est une expérience technique fascinante qui repousse les limites de ce qu’un terminal peut faire, mais ce n’est pas un outil de production. Son intérêt principal est d’inspirer de nouvelles idées et de montrer qu’avec une architecture adaptée (moteur 3D, protocole dédié), on peut intégrer des fonctionnalités auparavant réservées aux applications graphiques. Pour l’administrateur système, c’est une démonstration de la puissance de Rust et de la modularité des terminaux modernes, mais pas une solution à déployer en production.

Du même canal

Tout voir