Скевоморфный рабочий стол: проблема рендеринга, а не шутка
Скевоморфный Wayland-рабочий стол вроде DEsk нагружает GPU сильнее плоского UI. Разбираем, во что обходится трассировка лучей для рабочего стола.

Вот утверждение, которое разозлит обе стороны: скевоморфизм умер не потому, что пользователи его ненавидели. Он умер, потому что был дорогим — в пикселях, в циклах GPU и в часах дизайнеров — и плоский дизайн выиграл по экономике, а не по эстетике. Новый проект, которым сейчас все делятся, — DEsk, полноценный скевоморфный Wayland-рабочий стол для Linux, где окна — это листы бумаги на ray-traced ореховом столе, — первая серьёзная проверка этого тезиса за много лет. И он блестяще подтверждает мысль: как только вы решаете, что всю комнату освещает одна настольная лампа, вы подписываетесь на архитектуру рендеринга, которая гораздо ближе к игровому движку, чем к GNOME Shell.
Что на самом деле должен рендерить скевоморфный рабочий стол
Плоский дизайн милостив к рендереру. Современный композитор вроде Mutter или KWin большую часть времени занимается текстурной композицией: приложения отдают буферы, вы рисуете квады, применяете пару шейдеров со скруглёнными углами и тень — и всё. Весь кадр практически бесплатен на любом GPU последнего десятилетия, именно поэтому плоский UI и победил: он ничего не стоит и масштабируется до любого разрешения простым преобразованием.
Скевоморфизм ломает эту сделку по всем пунктам. Как только ваш язык дизайна говорит «это окно — лист плотной бумаги с волокнами, толщиной и загнутым уголком», вам нужны:
- Материальное затенение — бумага — это не цвет, а что-то вроде диффузного отклика с подповерхностным рассеянием и текстурой волокон. Это работа на уровне пикселя, а не заливка прямоугольника.
- Согласованное освещение — все объекты сцены должны сходиться во мнении, откуда падает свет. Одна настольная лампа означает одну карту теней (или один запрос трассировки), в которую включено всё, в том числе живое содержимое окон.
- Контактные тени — окну, «лежащему на столе», нужна ambient occlusion там, где бумага встречается с орехом, иначе иллюзия мгновенно рушится.
- Деформация — в DEsk можно приподнять угол листа, чтобы заглянуть на его обратную сторону, а закрытые окна скомкать в шарик. Это смещение вершин на живой текстуре, а не анимация масштаба.
Ни одна из этих задач сама по себе не сложна. Игровые движки делают это уже десятилетиями. Но у компоновщика рабочего стола есть ограничения, которых нет у игры: содержимое «листов бумаги» — это произвольный вывод приложений, который обновляется до 60 кадров в секунду, и ничего заранее не посчитать. Вы по сути затеняете живое видео так, будто это чернила на волокнистой бумаге.
Компоновщик превращается в игровой движок
Архитектурные документы DEsk описывают этот переход прямо: комната — стол, полка, консоль, почтовый ящик — трассируется на GPU через GLES 3, с CPU-трассировщиком в качестве запасного варианта, а результат кешируется для каждого размера экрана. В этом одном предложении заключена вся инженерная стратегия, и её стоит разобрать, потому что это единственный разумный способ сделать такое.
Ключевой трюк — разделение на статическое и динамическое. Трассировать комнату каждый кадр было бы абсурдом: даже скромный трассировщик путей требует секунды на кадр на железе среднего уровня. Но комната статична. Стол не двигается, лампа не двигается. Поэтому комнату трассируют один раз при входе в систему («первый вход отрисовывает комнату один раз: несколько секунд на GPU, дольше без него»), кешируют излучение, и дальше комната — это просто текстурированный фон. Динамические объекты — бумажные окна, ящик, письма в почтовом ящике — рисуются поверх в прямом проходе и освещаются в соответствии с закешированной сценой.
// Sketch of the two-layer architecture a skeuomorphic shell converges on
struct frame {
// Layer 1: the room. Traced once at login, cached per output size.
texture room_cache; // desk, shelf, post box, baked lamp light
// Layer 2: dynamic objects, forward-rendered each frame.
vector<object> paper_windows; // app buffers mapped onto paper quads
vector<object> drawer_items;
vector<object> notifications;
};
void render(frame *f) {
blit(f->room_cache); // one textured quad, nearly free
for (auto &o : f->paper_windows)
draw_paper(o); // fibre shader + fake AO + dog-ear
composite(f->drawer_items, f->notifications);
}
Это, не случайно, в точности то, как работал Myst в 1993 году: предварительно отрисованные статичные сцены с динамическими спрайтами поверх. Несколько наблюдателей отметили, что DEsk излучает «сильную атмосферу Myst», и они правы сильнее, чем догадываются: это не просто эстетическое родство, а та же архитектура рендеринга, пришедшая из тех же ограничений — дорогое глобальное освещение и дешёвая композиция. Меня, любителя истории, это восхищает. Тридцать лет развития GPU, а честный ответ на вопрос «как трассировать лучи для моего рабочего стола» всё тот же: «не надо — трассируйте один раз и немного схитрите».
Дизайн с несколькими мониторами демонстрирует ту же прагматичность. Вместо того чтобы трассировать большую комнату для каждого экрана, дополнительные дисплеи показывают «больше досок стола, продолжающихся от него» — статичный фон просто расширяется, а закешированная сцена амортизируется между выходами. Экран, отключённый посреди сессии, просто переносит свои окна на оставшийся. Просто, но это обходит по-настоящему сложную задачу — повторную трассировку при каждом горячем подключении.
Скевоморфизм нагружает GPU так, как плоский UI никогда не делает
Давайте конкретно о «налоге», потому что фраза «это тяжелее» в большинстве обсуждений этого стиля работает на неоправданных основаниях. Сравните, что плоский композитор делает для одного окна, и что требует бумажная метафора DEsk:
Плоский: привязать wl_buffer клиента как текстуру, нарисовать один квад с шейдером, который её семплирует, возможно, скруглить углы через signed-distance функцию, применить дешёвую 9-tap тень. Стоимость на окно: горстка чтений текстуры на пиксель, и все из кешируемых областей.
Бумага: буфер клиента — это лишь «чернила». Нужен ещё базовый слой бумаги (текстура волокон, затемнение краёв, толщина кромки), загнутый уголок, который представляет собой отдельную складную геометрию со своим освещением, контактная тень на столе, которая зависит от положения окна в сцене, и освещение, согласованное с лампой, запечённой в кеше комнаты. А когда пользователь тянет край, чтобы «вытянуть больше бумаги», квад листа меняет размер независимо от содержимого — вы отделили геометрию окна от геометрии поверхности, чего не делает ни один обычный композитор.

Но настоящая цена — не пропускная способность: современные GPU легко справляются с парой лишних текстурных слоёв. Цена — это сложность конвейера. Шейдерный бюджет плоского композитора — одна-две программы на всю сессию. Скевоморфная оболочка требует небольшой системы материалов: бумага, орех, латунь, стекло (линзы лампы в часах), ткань. Каждый материал — это вариант шейдера, каждый вариант может сломаться на каком-то драйвере, и каждый взаимодействует с общим освещением от лампы, так что их нельзя писать изолированно. Именно поэтому классическая эпоха тем в Enlightenment и GTK2 умерла, и это самый сильный контраргумент практиков: менеджер окон — лёгкая часть. Каждое приложение всё равно рисует своё содержимое через GTK или Qt, и никакое количество ореха на стороне композитора не заставит libadwaita-приложение выглядеть так, будто оно стоит на настоящем столе. DEsk решает это лишь частично: окна с декорациями на стороне клиента «тоже лежат на бумаге», то есть метафора оборачивает приложения, а не преобразует их.
Wayland одновременно упрощает и усложняет задачу
Есть причина, по которой такой проект существует сейчас, а не в 2010 году. Ключевая архитектурная ставка Wayland — композитор владеет всем кадром, каждый пиксель проходит через него — это именно та ставка, которую должна делать скевоморфная оболочка. В X11 приложение могло рисовать где угодно, и лучшее, что можно было сделать, — это менеджер композиции, отчаянно переподчиняющий окна и надеющийся на лучшее. В Wayland оболочка получает чистые изолированные буферы поверхностей и полную свободу в том, как их показать. Если вы хотите наложить поверхность на деформируемый лист бумаги с загнутым уголком, Wayland — первая дисплейная система, где это просто сложно, а не бессмысленно.
Но Wayland и повышает планку. Рабочий стол — это не рендерер, а рендерер плюс двадцать лет наслоений протоколов: Xwayland для старых приложений, мост IBus для методов ввода (в DEsk можно печатать в указателе книжной полки и в блокноте), PipeWire для регулятора громкости, logind для яркости и крышки ноутбука, MPRIS для страницы медиа на часах, PAM для экрана блокировки. Каждая из этих интеграций — точка соприкосновения, которую проект вроде GNOME распределяет между сотнями контрибьюторов. DEsk проводит жёсткую черту — «что он делает сам и что заимствует» — делегируя сеть, Bluetooth, печать и темизацию других приложений существующему свободному ПО. Такая стратегия заимствования — единственный способ для маленькой команды выпустить целый рабочий стол, но это означает, что скевоморфная иллюзия резко обрывается по краям: настройки Wi-Fi — это чужая плоская панель GTK.
Стоит отметить тем, кто подумывает попробовать: поскольку комната кешируется для каждого размера экрана, а динамический слой — это обычный прямой проход GLES 3, стационарная стоимость должна быть невысокой — сравнимой с любым композитором с тяжёлыми эффектами. Болевые точки — это трассировка при входе на машинах без GPU (запасной CPU-вариант есть, но он медленный) и общая шероховатость версии v0.1 beta: обозреватели сообщают о неровных анимациях у контролов с состоянием, например у кнопки питания в Панели управления. В скевоморфном UI это не косметический баг: когда анимация поворота ключа срабатывает неправильно, вы не можете понять, выключится ли машина на самом деле. Скевоморфизм повышает ставки на корректность анимации, потому что сама анимация и есть индикатор состояния. Недооценённое достоинство плоского дизайна в том, что тумблер имеет ровно два состояния для отрисовки и ничего между ними.
Почему мы перестали так строить
Стандартная история гласит, что скевоморфизм был костылём — реалистичные метафоры, чтобы научить людей пользоваться сенсорными экранами, — а когда пользователи повзрослели, кожаную строчку выбросили. Эта история в основном неверна, и DEsk полезен как раз тем, что раскрывает реальную экономику. Скевоморфизм умер, когда произошли две вещи одновременно: Retina-дисплеи учетверили количество пикселей, которые должны были покрывать нарисованные вручную текстуры, а мобильные устройства заставили UI работать на слабых GPU, питающихся от батареи. Плоская векторная графика масштабируется бесплатно; текстура матового металла в 1x, 2x и 3x — нет. Редизайн iOS 7 от Apple был не эволюцией вкуса, а резким сокращением бюджета рендеринга. Если вы читали о том, как GPU-ускоренные терминалы прошли путь от сеток глифов TTY до полноценных шейдерных конвейеров, вы видели тот же компромисс с другой стороны: GPU мы тратим щедро внутри содержимого приложения, а вот хром сел на диету.
Есть и более глубокая причина, не связанная с GPU: последовательность не масштабируется по композиции. Один дизайнер может создать великолепную физическую метафору; тысяча сторонних разработчиков — нет. Метафора книжной полки работает для собственных приложений DEsk. Как только Firefox нарисует свой плоский серый UI поверх бумаги, вы увидите скриншот, приклеенный скотчем к реквизиту. В обсуждении на Hacker News это подметили с двух сторон сразу: один комментатор ностальгировал по темизируемой эпохе GTK2, другой заметил, что современные тулкиты, похоже, «специально разработаны, чтобы не поддаваться темам». Рабочий стол может быть столом; приложения — никогда. Метафора протекает, и каждый, кто создавал тематическую среду, знает, что такая протечка убивает иллюзию. Это тот же разрыв, из-за которого UX-антипаттерны так живучи: поверхность исправить легко, экосистему — нет.
Где контрарианский тезис перестаёт работать
Я говорил, что скевоморфизм проиграл по экономике, и в это я верю. Но честность требует уступок, и шероховатости DEsk их и подсказывают.
Во-первых, часть цены вообще не в рендеринге, а в неоднозначности взаимодействия. Физическая метафора заимствует реальные ожидания пользователя, а у физики нет отмены. Когда закрытие окна — это «скомкать и выбросить», это мило ровно один раз и слегка тревожно на сороковой раз, когда вы машинально закрываете не то окно. Абстрактность плоского хрома — это достоинство: маленький крестик — это обещание, а не спектакль. Во-вторых, состояние. Физические объекты обязаны выглядеть так, как они есть; застрявшая анимация поворота ключа — это не дёрганый переход, а ложь о том, выключится ли ваш компьютер. Скевоморфный UI должен быть точным там, где плоскому UI можно быть приблизительным, а точность анимации безжалостно дорога по времени QA — как знает каждый, кто выпускал системы, где UI должен честно отражать распределённое состояние.
Недооценённое достоинство плоского дизайна в том, что тумблер имеет ровно два состояния для отрисовки и ничего между ними. У латунного ключа их бесконечно много, и каждое из них — потенциальный баг-репорт.
В-третьих, доступность и обнаруживаемость работают в обе стороны. Несколько комментаторов предположили, что буквальная метафора стола может реально помочь пожилым пользователям, которые никогда не строили ментальной модели файловых систем: они запоминают, куда нажимать, наизусть и не могут восстановиться, когда всё меняется, потому что у плоского UI «нет внутренней логики для них». В столе логика есть: письма кладут в почтовый ящик, документы — это бумага, нужное храните в ящике. Это весомый аргумент, и отмахиваться от него как от ностальгии — лень. Но та же физичность прячет функциональность от других: как узнать, что Super+D открывает ящик или что свёрнутое окно можно туда положить? Физические подсказки работают, когда предметы под рукой; клавиатурные сочетания в любом случае — чистая выученная абстракция.

Для чего на самом деле DEsk
Было бы ошибкой читать DEsk как предложение всем работать за ray-traced столами. Этого не случится, и экономика, с которой я начал, по-прежнему в силе: платформенный вендор, поставляющий миллиард устройств, не может позволить себе поштучные материальные шейдеры для хрома, вручную настроенное освещение от лампы и корректно анимированные латунные ключи. Плоский дизайн остаётся правильным выбором по умолчанию для системного ПО — так же, как бетон — правильный выбор по умолчанию для мостов.
DEsk наглядно показывает то, что Linux-десктопу нужно было доказать лет десять: слой композитора теперь достаточно выразителен, чтобы быть средой. Wayland плюс современный GPU дают одному упорному разработчику полнокадровый холст с запасом мощности, достаточным, чтобы отрисовать цельный мир, а не просто расставить прямоугольники. Трюк эпохи Myst — запечь дорогой свет и прямым проходом рисовать динамический слой — закрывает разрыв в производительности, из-за которого это раньше было невозможно. Будет ли мир, который кто-то построит, ностальгическим ореховым столом, пультом «Ностромо», о котором мечтал один комментатор, или чем-то, что никто ещё не придумал, — дело вкуса. Новость — возможность.
В вычислительной технике есть повторяющийся сюжет: технология созревает, мейнстрим сходится к самой дешёвой достаточной эстетике, а энтузиасты заново открывают дорогие эстетики как форму ремесла. Так было с механическими клавиатурами, с однобитной графикой с дизерингом, с CRT-шейдерами в эмуляторах. Скевоморфные рабочие столы — следующие в этой очереди. Они ничего не вытеснят. Они лишь напомнят нам — как одна настольная лампа, освещающая целую ray-traced комнату в DEsk, — что серый плоский прямоугольник всегда был бюджетным решением, а бюджеты, в отличие от вкусов, можно оспаривать.


