Artículos en profundidad sobre la tecnología que da forma al futuro.

Escritorios skeuomórficos: un problema de renderizado

Un escritorio Wayland skeuomórfico como DEsk exige más a la GPU que cualquier UI plana. Esto es lo que cuesta trazar rayos en un escritorio.

Un escritorio de madera con trazado de rayos iluminado por una sola lámpara, con hojas de papel brillantes y un buzón encima.
Cuando todo el escritorio es una única escena iluminada, el compositor se convierte en un motor de juegos quiera o no.

Aquí va una afirmación que molestará a ambos bandos: el skeuomorfismo no murió porque a los usuarios no les gustara. Murió porque era caro, en píxeles, en ciclos de GPU y en horas de diseño, y el diseño plano ganó por economía, no por estética. Un proyecto nuevo que circula por ahí, DEsk, un escritorio Wayland skeuomórfico completo para Linux donde las ventanas son hojas de papel sobre una mesa de nogal con trazado de rayos, es la primera prueba seria de esta tesis en años. Y demuestra el punto de forma brillante: en el momento en que decides que toda la habitación está iluminada por una lámpara de escritorio, te has apuntado a una arquitectura de renderizado que se parece más a la de un motor de juegos que a la de GNOME Shell.

Qué tiene que renderizar realmente un escritorio skeuomórfico

El diseño plano es benévolo con el renderizador. Un compositor moderno como Mutter o KWin pasa la mayor parte del tiempo haciendo composición de texturas: las aplicaciones entregan buffers, tú dibujas cuadriláteros, aplicas algún shader de esquinas redondeadas y una sombra paralela, y listo. El cuadro completo es prácticamente gratis en cualquier GPU fabricada en la última década, y por eso la UI plana se impuso: no cuesta nada y escala a cualquier resolución con una simple transformación.

El skeuomorfismo rompe cada parte de ese pacto. En el momento en que tu lenguaje de diseño dice «esta ventana es una hoja de papel couché con fibra, grosor y una esquina doblada», necesitas:

  • Sombreado de material — el papel no es un color, es una respuesta difusa tipo subsuperficie con textura de fibra. Eso es trabajo por píxel, no un rectángulo relleno.
  • Iluminación coherente — todos los objetos de la escena deben coincidir en dónde está la luz. Una lámpara de escritorio implica un único mapa de sombras (o consulta de rayos) en el que participa todo, incluido el contenido en vivo de las ventanas.
  • Sombras de contacto — una ventana «apoyada sobre una mesa» necesita oclusión ambiental allí donde el papel toca el nogal, o la ilusión se derrumba al instante.
  • Deformación — DEsk te permite levantar la esquina del papel para ver el reverso de la hoja, y arrugar las ventanas hasta hacer una bola al cerrarlas. Eso es desplazamiento de vértices sobre una textura en vivo, no una animación de escala.

Ninguna de estas cosas es individualmente difícil. Los motores de juegos llevan décadas haciéndolas. Pero un compositor de escritorio tiene restricciones que un juego no tiene: el contenido de esas «hojas de papel» es salida arbitraria de aplicaciones que se actualiza hasta a 60 fps, y no puedes precalcular nada sobre él. Estás sombreando un flujo de vídeo en vivo como si fuera tinta sobre fibra.

El compositor se convierte en un motor de juegos

La propia documentación de arquitectura de DEsk describe el cambio sin rodeos: la habitación —mesa, estantería, consola, buzón— se traza con rayos en la GPU mediante GLES 3, con un trazador por CPU como alternativa, y el resultado se cachea por tamaño de pantalla. Esa frase contiene toda la estrategia de ingeniería, y merece desgranarse, porque es la única forma sensata de hacer esto.

El truco es la división estático/dinámico. Trazar la habitación con rayos en cada fotograma sería absurdo: incluso un path tracer modesto necesita segundos por fotograma en hardware de gama media. Pero la habitación es estática. La mesa no se mueve; la lámpara tampoco. Así que se traza una sola vez al iniciar sesión («el primer inicio de sesión dibuja la habitación una vez: unos segundos en una GPU, más sin una»), se cachea la radiancia y, a partir de ahí, la habitación no es más que un fondo texturizado. Los objetos dinámicos —las ventanas de papel, el cajón, las cartas del buzón— se renderizan en directo encima, iluminados para encajar con la escena cacheada.

// 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);
}

Esto es, no por casualidad, exactamente lo que hacía Myst en 1993: escenas prerrenderizadas estáticas con sprites dinámicos compuestos encima. Varios observadores han señalado que DEsk tiene «mucho ambiente de Myst», y tienen más razón de la que creen: no es solo un parentesco estético, es la misma arquitectura de renderizado, llegada a ella por las mismas restricciones (iluminación global cara, composición barata) que siguen vigentes. Al friki de la historia que hay en mí le encanta. Treinta años de progreso en GPU, y la respuesta honesta a «¿cómo trazo con rayos mi escritorio?» sigue siendo «no lo hagas: trázalo una vez y miente al respecto».

El diseño multimonitor muestra el mismo pragmatismo. En lugar de trazar una habitación más grande para cada pantalla, las pantallas adicionales muestran «más tablones del escritorio, que continúan desde él»: el fondo estático se extiende y la escena cacheada se amortiza entre salidas. Si una pantalla se desconecta a mitad de sesión, sus ventanas simplemente se reparentan en una de las que quedan. Simple, pero esquiva el problema realmente difícil de volver a trazar en cada evento de conexión en caliente.

El skeuomorfismo grava la GPU de formas que la UI plana nunca lo hace

Seamos concretos con el coste, porque «es más pesado» hace mucho trabajo no ganado en la mayoría de discusiones sobre este estilo. Compara lo que hace un compositor plano por una ventana con lo que exige la metáfora del papel de DEsk:

Plano: enlazar el wl_buffer del cliente como textura, dibujar un cuadrilátero con un shader que la muestrea, quizá redondear las esquinas con una función de distancia con signo, aplicar una sombra barata de 9 taps. Coste por ventana: un puñado de lecturas de textura por píxel, todas de regiones amigables con la caché.

Papel: el buffer del cliente solo es la «tinta». También necesitas una capa base de papel (textura de fibra, oscurecimiento de bordes, borde de grosor), una esquina doblada que es una geometría plegada independiente con su propia iluminación, una sombra de contacto contra la mesa que depende de la posición de la ventana en la escena, e iluminación que coincida con la lámpara horneada en la caché de la habitación. Y cuando el usuario arrastra un borde para «sacar más papel», el cuadrilátero del papel se redimensiona independientemente del contenido: has desacoplado la geometría de la ventana de la geometría de la superficie, algo que ningún compositor normal hace.

Un cuadrilátero de ventana plana a la izquierda frente a una pila desplegada de capas de papel, sombra e iluminación a la derecha.
La UI plana es un único cuadrilátero; una ventana de papel es una pila de materiales, sombras y geometría deformable.

El coste real, sin embargo, no es el rendimiento: las GPU modernas se ríen de unas cuantas capas de textura extra. Es la complejidad del pipeline. El presupuesto de shaders de un compositor plano son uno o dos programas para toda la sesión. Un shell skeuomórfico necesita un pequeño sistema de materiales: papel, nogal, latón, cristal (las lentes de la lámpara del reloj), tela. Cada material es una variante de shader; cada variante es algo que puede romperse en algún driver; y cada una interactúa con la iluminación compartida de la lámpara, así que no pueden crearse de forma aislada. Por eso murió la clásica época de temas de Enlightenment y GTK2, y es el contraargumento más sólido de quienes lo han practicado: el gestor de ventanas es la parte fácil. Cada aplicación sigue dibujando su propio contenido con GTK o Qt, y ningún nogal del compositor hará que una app de libadwaita parezca que pertenece a una mesa física. DEsk resuelve esto solo en parte: las ventanas con decoración del lado del cliente «también descansan sobre papel», lo que significa que la metáfora envuelve a las apps en lugar de transformarlas.

Wayland lo hace más fácil y más difícil a la vez

Hay una razón por la que un proyecto así existe ahora y no en 2010. La apuesta arquitectónica central de Wayland —el compositor es dueño de todo el cuadro, cada píxel pasa por él— es exactamente la apuesta que necesita un shell skeuomórfico. En X11, una aplicación podía dibujar donde quisiera, y lo mejor que podías hacer era un gestor de composición reparentando ventanas desesperadamente y rezando. En Wayland, el shell recibe buffers de superficie limpios y aislados y tiene libertad total sobre cómo se presentan. Si quieres mapear una superficie sobre una hoja de papel deformable con una esquina doblada, Wayland es el primer sistema de visualización donde eso es simplemente difícil y no incoherente.

Pero Wayland también sube la factura. Un entorno de escritorio no es un renderizador; es un renderizador más veinte años de acumulación de protocolos: Xwayland para apps heredadas, puente IBus para métodos de entrada (DEsk permite escribir en el índice de la estantería y en el bloc de notas), PipeWire para el control de volumen, logind para el brillo y el cierre de tapa, MPRIS para la página multimedia del reloj, PAM para la pantalla de bloqueo. Cada una de esas es una superficie de integración que un proyecto como GNOME reparte entre cientos de contribuyentes. DEsk traza una línea clara —«lo que crea y lo que toma prestado»— delegando la red, Bluetooth, la impresión y el tematizado de otras apps en software libre existente. Esa estrategia de préstamo es la única forma en que un equipo pequeño entrega un escritorio completo, pero significa que la ilusión skeuomórfica se corta de golpe en los bordes: los ajustes de Wi-Fi son el panel plano de GTK de otro.

Conviene señalarlo para quien tenga ganas de probarlo: como la habitación se cachea por tamaño de pantalla y la capa dinámica es renderizado forward plano en GLES 3, el coste en régimen estacionario debería ser discreto, comparable al de cualquier compositor con efectos pesados. Los puntos débiles son el trazado al iniciar sesión en máquinas sin GPU (existe el respaldo por CPU, y es lento) y la aspereza general de una beta v0.1: los revisores informan de animaciones inconsistentes en controles con estado, como la tecla de encendido del Panel de Control, que en una UI skeuomórfica no es un fallo cosmético: cuando la animación de girar la llave falla, no puedes saber si la máquina realmente se va a apagar. El skeuomorfismo eleva lo que está en juego en la corrección de las animaciones, porque la animación es el indicador de estado. La gran virtud poco apreciada del diseño plano es que un interruptor tiene exactamente dos estados dibujables y ningún término medio.

Por qué dejamos de construir así

La historia oficial dice que el skeuomorfismo era una muleta —metáforas que parecen reales para enseñar a la gente las pantallas táctiles— y que, cuando los usuarios crecieron, tiramos el cuero cosido. Esa historia está mayormente equivocada, y DEsk resulta útil precisamente porque expone la economía real. El skeuomorfismo murió cuando ocurrieron dos cosas a la vez: las pantallas Retina cuadruplicaron el número de píxeles que las texturas pintadas a mano tenían que cubrir, y los móviles hicieron que la UI corriera en GPU limitadas que consumen batería. La UI vectorial plana escala gratis; una textura de metal cepillado a 1x, 2x y 3x no. El rediseño de iOS 7 de Apple no fue una evolución del gusto; fue un recorte drástico del presupuesto de renderizado. Si has leído cómo los terminales acelerados por GPU pasaron de cuadrículas de glifos TTY a pipelines de shaders completos, has visto el mismo intercambio desde el otro lado: gastamos GPU libremente dentro del contenido de una app, pero el cromo en sí se puso a dieta.

Hay además una razón más profunda que no tiene nada que ver con las GPU: la consistencia no se compone. Un diseñador puede crear una metáfora física preciosa; mil desarrolladores de terceros no pueden. La metáfora de la estantería funciona para las apps propias de DEsk. En el momento en que Firefox dibuja su propia UI gris plana sobre el papel, estás mirando una captura pegada con cinta a un atrezzo. El hilo de Hacker News lo clavó desde dos ángulos a la vez: un comentarista nostálgico de la era temeable de GTK2 y otro que señalaba que los toolkits modernos «parecen diseñados para resistirse a los temas». El escritorio puede ser un escritorio; las apps nunca lo serán. La metáfora se filtra, y todo el que ha construido un entorno temado sabe que esa filtración es fatal para la ilusión. Es la misma brecha que hace tan persistentes los antipatrones de UX: la superficie es fácil de arreglar, el ecosistema no.

Dónde se rompe la tesis contraria

Dije que el skeuomorfismo perdió por economía, y lo creo. Pero la honestidad exige concesiones, y las aristas rugosas de DEsk las proporcionan.

Primero, parte del coste no es de renderizado en absoluto: es ambigüedad de interacción. Una metáfora física toma prestadas las expectativas del mundo real del usuario, y la física no tiene deshacer. Cuando cerrar una ventana es «arrugarla en una bola y lanzarla», eso es encantador exactamente una vez y ligeramente alarmante la cuadragésima vez que cierras por reflejo la ventana equivocada. La abstracción del cromo plano es una ventaja: una pequeña × es una promesa, no una actuación. Segundo, el estado. Los objetos físicos deben parecer siempre lo que son; una animación de llave atascada no es una transición con tirones, es una mentira sobre si tu máquina se va a apagar. La UI skeuomórfica tiene que ser correcta en lugares donde la UI plana puede permitirse ser aproximada, y la corrección en animaciones es brutalmente cara en tiempo de QA, como sabe bien cualquiera que haya lanzado sistemas donde la UI debe reflejar fielmente un estado distribuido.

La gran virtud poco apreciada del diseño plano es que un interruptor tiene exactamente dos estados dibujables y ningún término medio. Una llave de latón tiene infinitos, y cada uno de ellos es un informe de error.

Tercero, accesibilidad y descubribilidad cortan en ambos sentidos. Varios comentaristas sugirieron que una metáfora de escritorio literal podría ayudar de verdad a personas mayores que nunca formaron un modelo mental de los sistemas de archivos: aprenden dónde hacer clic de memoria y no saben recuperarse cuando eso cambia, porque la UI plana «no tiene lógica inherente para ellas». Un escritorio tiene lógica: las cartas van al buzón, los documentos son papel, lo que guardas va al cajón. Es un argumento real, y descartarlo como nostalgia es perezoso. Pero la misma fisicalidad que ayuda a un usuario oculta funcionalidad a otro: ¿cómo descubres que Super+D abre el cajón, o que una ventana plegada puede guardarse en él? Las affordances físicas funcionan cuando los objetos están al alcance; los atajos de teclado son abstracción aprendida pura en cualquier caso.

Manos interactuando con objetos de escritorio físicos y brillantes: una carta, un cajón abierto y una llave.
Un escritorio tiene una lógica inherente —las cartas van al buzón— que las cuadrículas de iconos planas nunca tendrán.

Para qué sirve realmente DEsk

Sería un error leer DEsk como una propuesta para que todos trabajemos ahora en escritorios con trazado de rayos. No va a pasar, y la economía con la que abrí sigue en pie: un proveedor de plataforma que distribuye a mil millones de dispositivos no puede permitirse shaders de material por píxel en el cromo, iluminación de lámpara ajustada a mano y llaves de latón con animaciones correctas. El diseño plano sigue siendo el valor por defecto correcto para el software de sistema, igual que el hormigón es el valor por defecto correcto para los puentes.

Lo que DEsk demuestra de verdad es algo que el escritorio Linux necesitaba ver probado desde hace una década: la capa del compositor ya es lo bastante expresiva como para ser un medio. Wayland más una GPU moderna le da a un desarrollador decidido un lienzo de cuadro completo con margen suficiente para renderizar un mundo coherente, no solo para organizar rectángulos. El truco de la era Myst —hornear la luz cara, renderizar en forward la capa dinámica— cierra la brecha de rendimiento que antes hacía esto imposible. Que el mundo que alguien construya sea un escritorio de nogal nostálgico, la cabina de vuelo del Nostromo con la que soñó un comentarista, o algo que nadie ha imaginado todavía, es cuestión de gusto. La capacidad es la noticia.

Hay un patrón en la computación que se repite: una tecnología madura, su corriente principal converge en la estética adecuada más barata, y luego los aficionados redescubren las estéticas caras como una forma de artesanía. Ocurrió con los teclados mecánicos, con el arte de dithering de un bit, con los shaders de CRT en los emuladores. Los escritorios skeuomórficos son lo siguiente en esa cola. No van a desplazar nada. Solo nos recordarán —como la lámpara de escritorio única que ilumina una habitación entera con trazado de rayos de DEsk— que el rectángulo gris plano siempre fue una decisión de presupuesto, y los presupuestos, a diferencia de los gustos, se pueden discutir.