Un juego de Super Nintendo mostrado tal cual en una consola portátil moderna tiene algo extraño. Los píxeles son cuadrados perfectos, los contornos son duros, los degradados del cielo se rompen en bandas visibles. No es un defecto del emulador: es la imagen exacta que producía la consola. El entorno ha cambiado. Estos juegos se diseñaron frente a un televisor de tubo que dispersaba el haz, mezclaba los colores vecinos y dejaba una línea oscura sobre otra. Los shaders sirven para reproducir parte de este procesamiento. Tienen un coste, muy subestimado en una máquina pequeña.
Lo que hacía el tubo y que tu panel no hace
Un televisor de tubo no dibuja píxeles. Un haz barre la pantalla línea por línea e ilumina fósforos cuya luminosidad decae de inmediato. Nada tiene un borde nítido: un punto claro se desborda sobre sus vecinos, una línea sobre dos permanece oscura en 240p, y la trama de fósforos recorta cada zona coloreada en celdas rojas, verdes y azules.
La señal aportaba su parte. En composite o RF, el color y la luminosidad viajan mezclados y se contaminan. Los estudios lo aprovechaban: los cuadros de un píxel sobre dos, muy visibles hoy, se fundían en un degradado continuo. Una cascada de Mega Drive en cuadros azules y blancos se convertía en una superficie translúcida. Es una intención del autor, no un accidente. Un panel LCD u OLED hace lo contrario: cada píxel es un rectángulo iluminado de forma uniforme, sin persistencia ni desbordamiento. La imagen nunca había sido tan fiel a los datos de la consola, y por eso parece falsa.
Un shader, en una frase
Un shader es un pequeño programa ejecutado por el chip gráfico sobre la imagen calculada por el emulador, justo antes de mostrarse. Trabaja píxel de salida por píxel de salida: oscurece, mezcla, añade una trama. La emulación no se ve afectada, y puedes cambiarlo en mitad de la partida sin romper nada.
Casi nunca se carga un shader solo, sino un preset: una cadena de pasadas guardada en un archivo. La documentación de Libretro enumera tres formatos: el Cg (.cgp), obsoleto; el GLSL (.glslp), del lado de OpenGL, el de las pequeñas máquinas ARM; y el slang (.slangp), recomendado pero que requiere un controlador Vulkan o GL core. Un preset slang se niega a cargarse en un controlador que no lo admite, de ahí la mayoría de los «no pasa nada». Compruébalo según tu firmware. Recuerda sobre todo que el número de pasadas determina el coste.
Las grandes familias
El escalado entero
No es un shader, es el requisito previo para todos los demás. Multiplicar la imagen por un número entero da a cada píxel original el mismo número de píxeles de salida. Con un factor no entero, algunos píxeles ocupan dos líneas y otros solo una: los sprites se vuelven irregulares y el más mínimo shader de trama produce un efecto moiré.
Las líneas de barrido
El shader oscurece una línea de salida sobre dos, a veces con un perfil de haz que se ensancha en las zonas claras. Es la familia más útil para los juegos 240p, desde la NES hasta la PlayStation 1, y para las máquinas arcade. No tiene ningún sentido en los juegos de portátiles de la época, que nunca tuvieron líneas de barrido.
La máscara
La máscara recrea la trama de los fósforos: rejilla de apertura vertical al estilo Trinitron, o máscara de ranuras más suave. Devuelve la textura, pero cuesta luminosidad y exige espacio: crt-easymode, firmado por EasyMode, anuncia en su encabezado que se debe apuntar a 1080p o más. Por debajo, la máscara ya no encaja bien con los píxeles del panel y se convierte en un borde coloreado.
La curvatura y la geometría
Bombear la imagen y redondear las esquinas: la parte más espectacular y la más costosa. El shader crt-geom, de cgwg, Themaister y DOLLS, combina curvatura, líneas de barrido, máscara y esquinas redondeadas. El autor de crt-pi, davej, señala en su código que la curvatura ralentiza mucho las cosas. En una portátil, es el primer ajuste que hay que desactivar.
La señal composite
Los filtros NTSC simulan la cadena RF, composite o S-Video, y vuelven a fundir los cuadros en degradados. Transforman la imagen mucho más que las líneas de barrido, y solo sirven para los sistemas que pasaban por esta señal: NES, Mega Drive, Super Nintendo.
Las pantallas de cristal líquido
La familia handheld hace lo contrario que los shaders de tubo: recrea un panel de portátil de la época, su rejilla entre los píxeles, sus subpíxeles, a veces la persistencia de la Game Boy original. Es la buena elección para Game Boy, Game Boy Advance o Neo Geo Pocket.
El suavizado de pixel art
HQx, xBR, xBRZ, SABR o ScaleFX reconstruyen contornos suaves a partir de los píxeles originales. El resultado divide: sprites limpiados para unos, plástico derretido para otros. Son análisis de vecindad, por lo que son más pesados que un oscurecimiento de línea.
| Familia | Lo que hace | Cuándo se justifica | Coste |
|---|---|---|---|
| Escalado entero | Un píxel original = un bloque regular | Siempre, antes que todo lo demás | Nulo |
| Filtro bilineal | Suaviza un escalado no entero | Como apaño | Nulo |
| Líneas de barrido | Oscurece una línea sobre dos | Juegos 240p, arcade | Bajo |
| Máscara | Recrea la trama de los fósforos | Pantallas muy definidas, TV | Bajo a medio |
| Curvatura, geometría | Bombea la imagen, redondea las esquinas | TV, máquinas potentes | Alto |
| Filtro NTSC | Vuelve a fundir los cuadros, mezcla los colores | NES, Mega Drive, SNES | Medio a alto |
| Cristal líquido | Rejilla, subpíxeles, persistencia | Game Boy, GBA, Neo Geo Pocket | Bajo a medio |
| Suavizado de pixel art | Reconstruye contornos nítidos | Sprites 2D, cuestión de gustos | Medio a alto |
El coste en rendimiento, el punto que olvidamos
Para mantener 60 imágenes por segundo, la consola dispone de unos 16,7 milisegundos por imagen. La emulación ya consume una parte; el shader toma lo que queda, en el chip gráfico, el componente más débil de la mayoría de las portátiles retro. Cuando se supera el presupuesto, no siempre observas que un contador caiga: primero oyes que el sonido cruje, luego la consola se calienta y la autonomía se derrite.
Dos referencias dan la escala. El shader zfast_crt, de Greg Hogan, se presenta como un shader CRT simple y rápido y anuncia que funciona a 60 imágenes por segundo en un Raspberry Pi 3 en 1920×1080. En el extremo opuesto, crt-royale encadena doce pasadas en su preset de Libretro, y Mega Bezel apila simulación de tubo, marco y reflejos.
- Gratis: escalado entero y filtro bilineal, asegurados por el chip sin código añadido.
- Ligero: los shaders escritos para hardware modesto, zfast_crt y crt-pi a la cabeza.
- Medio: crt-easymode o crt-geom sin curvatura, los shaders de cristal líquido.
- Pesado: la curvatura, los filtros NTSC completos, ScaleFX, NNEDI3, crt-royale, Mega Bezel.
La segunda regla es más difícil de aceptar: un shader se paga primero en los sistemas que ya van al límite. En un Linux con chip Allwinner H700 o SigmaStar, la Super Nintendo tiene margen, la PlayStation 1 mucho menos, la Dreamcast nada. Nuestras recomendaciones de emuladores de PlayStation 1 sirven para una máquina sin shader; añade una trama y el mismo juego puede tartamudear.
| Máquina | Lo que pasa razonablemente |
|---|---|
| Linux de gama de entrada, juegos de 8 y 16 bits | Escalado entero, scanlines ligeras, cristal líquido |
| Linux, juegos de PS1, N64 o Dreamcast | Escalado entero solo |
| Android de gama media, juegos 2D y PS1 | crt-easymode o equivalente, sin curvatura |
| Android de gama alta y Windows | Presets completos, máscara incluida |
| Consola conectada a un televisor | Presets pesados, curvatura y marco |
Por qué la misma trama no se ve igual según la pantalla
Una línea de barrido necesita al menos dos líneas de salida por línea original: una iluminada, una oscura. Para un juego de 240 líneas, se necesitan 480 líneas en la pantalla como mínimo absoluto, y el resultado sigue siendo tosco. Una máscara exige más, ya que recorta cada píxel en tres celdas coloreadas. Eso es lo que dice el encabezado de crt-easymode al apuntar a 1080p, y la documentación de emulación recuerda que por debajo de una definición cómoda, estos shaders no funcionan correctamente.
En un pequeño panel 4:3 de baja definición, las líneas oscuras ocupan una parte enorme de la imagen y la oscurecen francamente, mientras que la luminosidad de estas pantallas ya no es su punto fuerte. Y como los píxeles son minúsculos, la trama apenas se ve desde la distancia de juego: pierdes luz sin ganar el efecto deseado.
Todo cambia en cuanto se sube la definición. La TrimUI Brick muestra 1024×768 en 3,2 pulgadas: un juego de 240 líneas cabe tres veces, es decir, 720 líneas útiles, suficientes para una trama limpia. En una pantalla Android de 5,5 pulgadas bien definida, o en un televisor por HDMI, los presets pesados recuperan su sentido. Nuestra comparación Android o Linux detalla lo que soporta cada una, y nuestro comparador da la definición de pantalla de cada modelo.
Cómo activarlos, sea cual sea el sistema
Dondequiera que esté RetroArch, el camino es estable: menú rápido en mitad de la partida, sección de shaders, carga de un preset, y luego guardarlo para el núcleo o para el juego. Guardarlo para el núcleo aplica la trama a todos los juegos del sistema: casi siempre es lo que hay que hacer. El resto de los ajustes se tratan en nuestra guía de los ajustes esenciales de RetroArch.
Los firmwares personalizados a veces añaden su propia lista de filtros en las opciones de visualización, independiente de RetroArch: práctico, sin riesgo, pero menos fino. Nuestra guía de instalación de firmwares personalizados indica dónde se encuentran estos menús. En Android, los emuladores autónomos ignoran los presets de RetroArch y ofrecen cada uno su propia lista, más corta.
Tres ajustes que funcionan
El minimalista
Escalado entero, filtro en más cercano vecino, ningún shader. Es el ajuste más nítido, el más luminoso y el único que no cuesta nada. En un Linux de gama de entrada, en una pantalla pequeña, o en cuanto el sistema emulado es exigente, también es el más razonable. Muchos jugadores vuelven a él.
El equilibrado
Escalado entero, más un shader de líneas de barrido ligero, zfast_crt o crt-pi con la curvatura desactivada. Recuperas la textura sin perder fotogramas por segundo, y la bajada de luminosidad sigue siendo soportable subiendo la pantalla un punto. Es el compromiso que recomendamos con más frecuencia.
El nostálgico
Preset catódico completo: líneas de barrido, máscara, curvatura, posiblemente filtro composite. Resérvalo para un Android de gama alta, una máquina Windows o una portátil conectada a un televisor. Pruébalo durante diez minutos de juego real, no en una pantalla de título: es en movimiento donde se ven las caídas. Mantén un preset ligero como segundo.
Ninguno de estos tres ajustes vale en absoluto: todo depende de la máquina. Nuestro comparador permite situar la tuya, y nuestros modelos están ordenados en la colección consolas retro portátiles.
¿Puede un shader dañar mi consola?
No. Es un procesamiento de visualización: no modifica ni el firmware ni los archivos de juego y se desactiva en dos manipulaciones. El único efecto real es un chip gráfico más solicitado: una consola que se calienta más y una autonomía más corta.
¿Por qué mi preset no se carga en absoluto?
La mayoría de las veces, es una cuestión de formato. Los presets slang (.slangp) requieren un controlador Vulkan o GL core, ausente en la mayoría de las pequeñas máquinas Linux; necesitan presets GLSL (.glslp). Comprueba también que el paquete de shaders se haya descargado: no siempre está presente de origen.
¿Se necesita un shader para los juegos de Game Boy Advance?
No un shader catódico, al menos: la GBA nunca tuvo líneas de barrido. Para recuperar su renderizado, ve hacia la familia de los shaders de cristal líquido, rejilla de píxeles y persistencia incluidos. Muchos jugadores prefieren a pesar de todo la imagen en bruto, más luminosa.
El shader hace que mi pantalla quede demasiado oscura, ¿qué hacer?
Es mecánico: oscurecer una línea sobre dos quita luz, y una máscara quita aún más. Baja la intensidad de las líneas en los ajustes del shader, y luego sube la luminosidad del panel. Si la imagen sigue apagada, tu pantalla no es lo suficientemente luminosa para esta familia.
¿Se puede usar un shader diferente según el sistema emulado?
Sí, y es la buena práctica. En RetroArch, se guarda el preset para el núcleo: trama catódica en los núcleos de Super Nintendo o Mega Drive, shader de cristal líquido en los núcleos de Game Boy, nada en los sistemas pesados. Un preset también puede guardarse para un solo juego.
¿Vale la pena en una pantalla de 3,5 pulgadas?
Moderadamente. A este tamaño, una trama fina apenas se ve desde la distancia de juego y cuesta luminosidad. Un shader de scanlines ligero sigue siendo agradable en los juegos de 8 y 16 bits; una máscara no tiene suficientes píxeles para expresarse.
