Как засунуть 3D графику в терминал и не сойти с ума

24 Jul, 2026
3,140
🔱 86
👥 11

Вы когда-нибудь задумывались, что находится «за» вашим терминалом? Обычно там пустота, черная бездна или обои рабочего стола. Но разработчик Orhun Parmaksız решил, что терминалу не хватает глубины в буквальном смысле. Так появился Ratty — эмулятор терминала, который умеет рендерить честное 3D прямо внутри рабочего пространства.

Я часто вижу попытки "оживить" консоль: то ASCII-арт добавят, то картинки через Kitty протокол выведут. Но Ratty идет дальше. Это проект на стыке безумия и чистого технического интереса. Автор вдохновлялся операционной системой TempleOS, а в качестве движка выбрал Bevy и Rust. Получилось нечто среднее между рабочим инструментом и демо-сценой.

Ratty Logo

Что умеет этот «крысиный» терминал

Главная фишка Ratty — поддержка протокола RGP (Ratty Graphics Protocol). Это кастомная штука, которая позволяет встраивать 3D-объекты в формате .obj или .glb прямо между строк текста. Причем это не просто статичные меши. Объекты можно анимировать, привязывать к конкретным ячейкам (анкорам) и менять им освещение.

Если нажать Ctrl+Alt+Enter, происходит магия: плоское окно терминала сгибается в трехмерном пространстве. Вы можете буквально заглянуть за край своей оболочки zsh или bash. Есть даже режим Мёбиуса — для тех, кому обычного искривления пространства мало.

Вот несколько вещей, которые реально зацепили:

  • Настраиваемый 3D-курсор. По умолчанию это вращающаяся крыса (отсылка к названию), но в конфиге можно прописать любой меш.
  • GPU-рендеринг текста. За отрисовку отвечает связка из Parley и Vello, что дает очень приятную картинку.
  • Инлайновые объекты. Можно запустить утилиту, которая выведет в консоль крутящийся кубик Рубика или CAD-модель детали.

Под капотом: Bevy и Rust

Архитектура Ratty заслуживает отдельного разбора. Автор не стал изобретать велосипед для рендеринга и взял игровой движок Bevy. Процесс отрисовки выглядит так:

  1. Ratatui формирует UI-буфер на стороне процессора.
  2. Библиотеки Parley и Vello подхватывают это и рендерят текст на видеокарте.
  3. Полученная картинка копируется обратно в CPU-память, а затем пробрасывается в Bevy-сцену.

Сейчас эта «пересылка» туда-обратно между CPU и GPU — узкое место, но автор честно пишет об этом в документации. В планах — перевести все полностью на GPU-resident путь, чтобы текстуры вообще не покидали видеопамять.

Зачем это нужно на практике

С первого взгляда кажется, что это просто забавная игрушка. Но посмотрите на примеры в репозитории. Разработчики уже начали пилить софт специально под Ratty:

  • Ratscad: Терминальный CAD. Вы пишете код, а справа в этом же окне крутится 3D-модель.
  • ComChan: Монитор серийного порта с 3D-телеметрией. Представьте, что вы отлаживаете прошивку дрона, и прямо в консоли видите его положение в пространстве в реальном времени.
  • Ratty-runner: Да, прямо в терминале можно запустить бесконечный раннер, когда скучно на длинном созвоне.

3D Demo

Как пощупать

Если вы на 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. В любом случае, крутящаяся крыса вместо обычного прямоугольника курсора — это как минимум весело.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.