Ajustando los Archivos de Video Retro para Mostrar en la Web Moderna utilizando WebGL en React

Rate this content
Bookmark
Slides

- Antecedentes sobre por qué los archivos de video retro necesitan escalado personalizado

- Implementación de un reproductor de video WebGL en lienzo en React con hooks personalizados

- Agrupando shaders WebGL desde archivos separados para resaltar la sintaxis GLSL

- Demostración en vivo de aplicaciones para imágenes de consolas de videojuegos retro, cintas VHS, etc.

This talk has been presented at React Summit 2023, check out the latest edition of this React Conference.

FAQ

TAS significa 'Tool-Assisted Speedrun'. Se refiere a speedruns de videojuegos donde se utilizan herramientas para crear la secuencia de entradas más rápida posible, jugando el juego de manera óptima para alcanzar tiempos de finalización récord.

TaskBot actúa como un 'piano de jugadores' para consolas de juegos retro, traduciendo las speedruns asistidas por herramientas a consolas originales. Introduce las entradas de juego calculadas en la consola real para reproducir la partida de manera precisa.

Los principales problemas incluyen la subsamplificación cromática, que causa pérdida de datos de color en resoluciones bajas, y la necesidad de ampliar resoluciones pequeñas para pantallas modernas, lo que puede distorsionar la imagen si no se hace correctamente.

Se utilizan técnicas como la escala de área y la simulación de CRT en WebGL para preservar la nitidez y los detalles originales en la reproducción de video, además de codecs como AV1 y H.265 para manejar la compresión de video sin pérdida.

Se simula el efecto CRT mediante técnicas que amplían cada subpíxel rojo, verde y azul y aumentan las líneas de exploración, replicando cómo los juegos eran vistos originalmente en monitores CRT, lo que incluye la corrupción intencionada de la señal de video.

RGBScaler.com es un sitio que utiliza algoritmos avanzados y técnicas de escalado para permitir la reproducción precisa de grabaciones de videojuegos retro en alta definición. Implementa algoritmos como el de área y simulación de CRT para mostrar los juegos como fueron diseñados originalmente.

Travis McGeehan
Travis McGeehan
31 min
06 Jun, 2023

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Travis Tykemany3 McGeehan, un desarrollador full-stack en Gordon Food Services y administrador del equipo TaskBot y embajador de Task Videos, habla sobre la preservación de imágenes de juegos retro de la escena TAS para los espectadores modernos con WebGL. Explica el papel de TaskBot, un piano de jugadores para consolas de videojuegos retro, y cómo el equipo de TaskBot traduce las carreras de velocidad asistidas por herramientas para crear la secuencia de entradas más rápida posible. También destaca los problemas principales en la preservación de imágenes de videojuegos, incluyendo la submuestreo de croma y las relaciones de aspecto estiradas en resoluciones pequeñas. Los desafíos en la preservación de imágenes de juegos retro incluyen almacenar registros en las resoluciones originales sin estirar y evitar la interpolación bilineal. Diferentes algoritmos, como punto y Área, producen efectos distintos al escalar imágenes. Las técnicas utilizadas en rgbscaler.com para preservar imágenes nítidas de juegos GameBoy de baja resolución incluyen el uso del algoritmo de Área, videos codificados en AV1 y H265, y la capacidad de reproducir videos con efectos CRT. Los códecs de video AV1 y H.265 se utilizan para admitir imágenes sin pérdida y un escalado adecuado de imágenes de arte de píxeles. Se crea un lienzo personalizado con controles personalizados utilizando React para ampliar el video en WebGL, y se utiliza el algoritmo de escalado de Área en lugar de bilineal. La textura WebGL se actualiza utilizando un bucle de renderizado, y la lógica del shader recrea la máscara y las líneas de exploración basadas en la posición del píxel. La biblioteca React RGB Scaler permite resaltar la sintaxis del shader de vértices y del shader de fragmentos, lo que facilita el desarrollo. El sitio RGB scaler demuestra el valor de mejorar la calidad del video mientras se utiliza significativamente menos ancho de banda que YouTube.

1. Preservando la grabación de juegos retro con WebGL

Short description:

Travis Tykemany3 McGeehan, un desarrollador full-stack en Gordon Food Services y administrador del equipo TaskBot y embajador de Task Videos, habla sobre la preservación de la grabación de juegos retro de la escena TAS para los espectadores modernos con WebGL. Explica el papel de TaskBot, un piano de jugadores para consolas de juegos retro, y cómo el equipo de TaskBot traduce las speedruns asistidas por herramientas para crear la secuencia de entradas más rápida posible. También destaca los problemas principales en la preservación de grabaciones de videojuegos, incluyendo la subsamplificación cromática y las relaciones de aspecto estiradas en resoluciones pequeñas.

Gracias, soy Travis Tykemany3 McGeehan. Soy un desarrollador full-stack en Gordon Food Services y administrador del equipo TaskBot y embajador de Task Videos. También soy autor de TAS, así que acabo de decir la palabra TAS muchas veces. Probablemente se estén preguntando qué es un TAS. Bueno, eso es lo primero de lo que hablaremos, preservar nuestras grabaciones de juegos retro de la escena TAS para los espectadores modernos con WebGL.

Entonces, ¿quién es TaskBot y qué es el equipo TaskBot? TaskBot es como un piano de jugadores para consolas de juegos retro, especialmente las consolas de la era NES, SNES y N64 con la ayuda de la interfaz Game Boy en el Game Boy. El equipo TaskBot ayuda a traducir las speedruns asistidas por herramientas, jugando juegos de video lo más rápido posible con la ayuda de herramientas para retroceder fotograma a fotograma a través de esos juegos de video y crear la secuencia de entradas más rápida posible. Y luego tomamos esas tendencias y las traducimos a las consolas originales y, como dije, como un piano de jugadores, introducimos esas entradas en una consola real. Hemos realizado todo tipo de presentaciones para esto en MAGFest y Games Done Quick, que requieren una captura de video precisa. Y eso nos lleva directamente a hablar sobre las herramientas que estamos utilizando para esa reproducción precisa y captura de video en la web.

Un consejo, la discusión aquí será principalmente relevante para este tipo de archivo de video retro y se centrará en las grabaciones animadas, especialmente en estos juegos de video muy, muy antiguos. Será menos relevante si tienes video filmado en vivo, excepto cuando intentamos transmitir una copia archivada de dicho video a través de la web. Entonces, hay varios problemas principales que vemos en el archivo de grabaciones de videojuegos cuando intentamos documentar estos registros de speedruns en videos TAS. El primero es la subsamplificación cromática, a un nivel muy alto, es una reducción de color. En todos los códecs de video modernos, toman el aspecto del color de los datos y lo dividen del brillo, y debido a esa división que se remonta a la diferencia entre televisores en blanco y negro y en color, las consolas de juegos originalmente no hacían esa división. Simplemente emitían información de color completa junto con información de brillo, y cuando se introducen en un códec de video más moderno que tiene esa división, pierden parte de sus datos y obtienes un video de peor calidad, especialmente en estas resoluciones de juego muy bajas como 240p. Si solo tienes la mitad de los datos de color de 240, ahora solo estás hablando de 120 líneas de color y eso no es mucho color. Esto realmente no sucedió con la subsamplificación en los juegos de video hasta la era de GameCube. Entonces, en estos juegos de video muy antiguos donde estamos haciendo estos registros de speedrun, a menudo en la era de NES a N64, no vemos esta reducción de color incorporada en los juegos, y luego vemos corrupción en la grabación de video.

El segundo problema que tenemos es que estas resoluciones muy pequeñas tienen relaciones de aspecto estiradas. Estas también son resoluciones muy pequeñas para empezar, y tenemos que ampliarlas a las pantallas modernas. Hablamos de pantallas como el OLED LG G3, o el Samsung S95B, o todo tipo de... ahora están saliendo monitores de juego reales para estas pantallas extremadamente precisas en cuanto al color. Queremos poder mostrar en esas pantallas, pero no necesariamente podemos hacerlo en las resoluciones originales. Porque estas pantallas son de 1440p o 4K. Entonces tenemos que estirar hasta la pantalla completa. Y también tenemos el problema de que las resoluciones originales no tenían píxeles cuadrados. Cuando se reproducían en CRT, los CRT reproducían cada entrada como una fuente 4-3. Entonces, si el juego que llegaba era de 256x240, como en el NES y era casi una imagen cuadrada, se estiraría para convertirse en un rectángulo en la pantalla CRT resultante. Entonces, necesitamos replicar ese estiramiento en el monitor. Pero si haces eso cuando almacenas la grabación, digamos que hiciste un video de NES y lo almacenaste en 320x240, obtendrías artefactos extraños donde tal vez un píxel se vea bien, y luego el píxel a su derecha está a medio camino entre dos, y ahora tienes un artefacto allí.

2. Desafíos en la preservación de grabaciones de juegos retro

Short description:

Entonces, quieres almacenar los registros en las resoluciones originales, sin estirar y evitar la interpolación bilineal. La compresión con pérdida y la corrupción intencional de CRT en los juegos retro plantean desafíos. Diferentes algoritmos, como Punto y Área, producen efectos distintos al escalar imágenes.

Entonces, quieres poder almacenar estos registros en las resoluciones originales, sin estirar, de 256x240 y luego hacer ese estiramiento a 320 cuando llegues a la resolución final de visualización, como 1440 o 4k. También tenemos un problema cuando hacemos ese escalado en el códec de video normal, o en el reproductor de video normal, el reproductor de video HTML5, todo se hace con un algoritmo llamado Bilineal, que es genial para las grabaciones de películas, donde si quieres interpolar entre un píxel y el siguiente, tiene sentido promediar los dos. Pero en el sentido de los juegos de video de arte de píxel, no quieres tener todos esos bits de color adicionales. En el juego de video original, pasaba directamente de ser un color a otro color. Entonces, no funciona hacer esa interpolación bilineal. Podría usar otros algoritmos para el arte de píxel en su lugar.

En cuarto lugar, tenemos el problema de la compresión con pérdida. Casi todos los videos web tienen pérdida, lo que significa que hay una serie de artefactos en la compresión para poder transmitirlos a través de la web. Por lo tanto, tenemos nuestras propias técnicas para hacer cosas sin pérdida para estos videos muy antiguos y más pequeños. Y en quinto lugar, y por último, tenemos esta corrupción intencional de la señal de video CRT y compuesto como diseño de arte. Entonces, muchos de estos juegos originales de NES, SNES, no solo estaban desarrollando las señales para mostrar una imagen, sino que realmente las estaban desarrollando con la intención de que se corrompieran de la misma manera que un CRT corrompería una imagen, incluso estos monitores de color de 4k y 1440p realmente precisos todavía tienen una ligera corrupción en las imágenes. En aquel entonces, los CRT tenían mucha corrupción y esta corrupción se usaba para crear colores adicionales, como usar dithering o tener un patrón de tablero de ajedrez para hacer una transición gradual entre dos colores y tener en realidad más color del que el propio sistema podía crear aprovechando los artefactos causados por el CRT.

Entonces, teniendo en cuenta todos esos problemas, veamos cómo se ve eso en la práctica. Esto es de lo que hablé sobre el suavizado bilineal, que es el del medio en esta comparación. Así es como se reproducen casi todos los videos si solo ves un video en línea como YouTube, Twitch, todos ellos tendrán ese filtrado para adaptarlos al tamaño de tu navegador. A la izquierda, puedes ver un algoritmo diferente llamado Punto. Entre la parte superior e inferior, se ven las diferencias en dos fotogramas sucesivos de un video. En el fotograma superior, el escudo de Link en esta imagen está en un píxel, y en el siguiente fotograma está en un píxel diferente. Y debido a cómo funciona el punto, será más ancho en uno de esos fotogramas que en el siguiente si estás escalando por un factor no entero. Digamos que tu fuente es 240, como en el NES. Y estás escalando a, no 960, 4 veces, sino a 1080p, una resolución de escritorio normal, 4.5 veces. Y si aumentas desde un píxel de origen, 4.5 veces, bueno, el vecino más cercano, o punto, dice que solo puedes aumentar 4 o 5 veces. Por eso, en un fotograma del video en la parte superior, ha aumentado 5 veces en el escudo de Link, y luego en el siguiente fotograma, se ha movido y ahora solo aumenta 4 veces para esa línea. Porque a lo largo de todo el video, cada línea vertical será 4 o 5, de ida y vuelta. Y esto crea un efecto de temblor y ondulación. Y a la derecha de los tres, se ve Área, que es el algoritmo que nos gusta usar para esta reproducción de extrema precisión, es como la proyección de Mercator. En la proyección de Mercator, cuando se habla de mapas, hay toda esta distorsión de las formas de los continentes, debido a tratar de hacer que las cosas sean rectas en latitud y longitud, y eso es lo que vimos en Punto. Mientras que Área trata de comprometerse entre tener una latitud y longitud rectas, y tener formas adecuadas. Entonces, Área tiene una forma adecuada del escudo, siempre tiene el mismo número de píxeles de ancho, y eso es porque si estuviéramos aumentando como cuatro veces y media, tendría cuatro píxeles regulares, y luego para esa mitad, volvería a hacer bilineal y promediaría solo para esa línea donde sea necesario.