Как засунуть 3D графику в терминал и не сойти с ума
Вы когда-нибудь задумывались, что находится «за» вашим терминалом? Обычно там пустота, черная бездна или обои рабочего стола. Но разработчик Orhun Parmaksız решил, что терминалу не хватает глубины в буквальном смысле. Так появился Ratty — эмулятор терминала, который умеет рендерить честное 3D прямо внутри рабочего пространства.
Я часто вижу попытки "оживить" консоль: то ASCII-арт добавят, то картинки через Kitty протокол выведут. Но Ratty идет дальше. Это проект на стыке безумия и чистого технического интереса. Автор вдохновлялся операционной системой TempleOS, а в качестве движка выбрал Bevy и Rust. Получилось нечто среднее между рабочим инструментом и демо-сценой.

Что умеет этот «крысиный» терминал
Главная фишка Ratty — поддержка протокола RGP (Ratty Graphics Protocol). Это кастомная штука, которая позволяет встраивать 3D-объекты в формате .obj или .glb прямо между строк текста. Причем это не просто статичные меши. Объекты можно анимировать, привязывать к конкретным ячейкам (анкорам) и менять им освещение.
Если нажать Ctrl+Alt+Enter, происходит магия: плоское окно терминала сгибается в трехмерном пространстве. Вы можете буквально заглянуть за край своей оболочки zsh или bash. Есть даже режим Мёбиуса — для тех, кому обычного искривления пространства мало.
Вот несколько вещей, которые реально зацепили:
- Настраиваемый 3D-курсор. По умолчанию это вращающаяся крыса (отсылка к названию), но в конфиге можно прописать любой меш.
- GPU-рендеринг текста. За отрисовку отвечает связка из Parley и Vello, что дает очень приятную картинку.
- Инлайновые объекты. Можно запустить утилиту, которая выведет в консоль крутящийся кубик Рубика или CAD-модель детали.
Под капотом: Bevy и Rust
Архитектура Ratty заслуживает отдельного разбора. Автор не стал изобретать велосипед для рендеринга и взял игровой движок Bevy. Процесс отрисовки выглядит так:
- Ratatui формирует UI-буфер на стороне процессора.
- Библиотеки Parley и Vello подхватывают это и рендерят текст на видеокарте.
- Полученная картинка копируется обратно в CPU-память, а затем пробрасывается в Bevy-сцену.
Сейчас эта «пересылка» туда-обратно между CPU и GPU — узкое место, но автор честно пишет об этом в документации. В планах — перевести все полностью на GPU-resident путь, чтобы текстуры вообще не покидали видеопамять.
Зачем это нужно на практике
С первого взгляда кажется, что это просто забавная игрушка. Но посмотрите на примеры в репозитории. Разработчики уже начали пилить софт специально под Ratty:
- Ratscad: Терминальный CAD. Вы пишете код, а справа в этом же окне крутится 3D-модель.
- ComChan: Монитор серийного порта с 3D-телеметрией. Представьте, что вы отлаживаете прошивку дрона, и прямо в консоли видите его положение в пространстве в реальном времени.
- Ratty-runner: Да, прямо в терминале можно запустить бесконечный раннер, когда скучно на длинном созвоне.
Как пощупать
Если вы на Arch Linux, вам повезло: sudo pacman -S ratty. Остальным придется либо тянуть бинарники с GitHub, либо собирать из исходников через cargo install ratty. Только учтите, что для сборки понадобятся зависимости вроде fontconfig и wayland-devel, так как Bevy довольно требователен к окружению.
Конфигурация живет в ratty.toml. Там можно настроить всё: от скорости вращения крысы-курсора до уровня искривления экрана в 3D-режиме.
[cursor.animation]
spin_speed = 1.4
bob_speed = 2.2
bob_amplitude = 0.08
Стоит ли оно того
Ratty — это не тот терминал, на который вы перейдете завтра для основной работы. Он специфичный, местами избыточный и требует современной видеокарты. Но это отличный пример того, как Rust позволяет переизобретать привычные вещи.
Проект стоит изучить хотя бы ради того, чтобы посмотреть, как реализован протокол передачи графики между приложением и эмулятором. Или если вам действительно не хватало возможности отображать 3D-телеметрию без запуска тяжелого GUI. В любом случае, крутящаяся крыса вместо обычного прямоугольника курсора — это как минимум весело.