Las pantallas que utilizamos en nuestros ordenadores hace años que no hacen uso de un tubo de rayos catódicos, pero se siguen utilizando la misma forma de enviar las imágenes que antaño. ¿A qué se debe esto y que limitaciones hay para aprovechar al 100% la capacidad de las pantallas LCD y cómo se comunica la GPU con tu monitor?
Una de las habilidades que tiene toda pantalla LCD es la de poder cambiar el valor de todos sus píxeles de golpe, no obstante a día de hoy esta es una ventaja que apenas se utiliza cuando una GPU transmite la información a pantalla, aunque sería ideal ya que reduciría enormemente la latencia de cada fotograma.
Los primeros monitores que aparecieron en PC no eran más que televisores con el receptor de radiofrecuencia quitado, estos televisores estaban pensados para recibir las ondas de radio de la red de televisión y estas enviaban la información línea por línea de escaneo a tiempos exactos.
Las entradas de video de los televisores eran muy rudimentarias y utilizaban la misma circuitería que la recepción de la señal televisiva, esto significa que tenían que operar bajo los mismos tiempos y de manera correcta para mostrar la imagen de manera correcta en pantalla, si no se seguían esos tiempos la imagen se mostraba de manera incorrecta o simplemente ni se mostraba.
Con el tiempo nacieron nuevos estándares en PC que permitían resoluciones mucho mayores: EGA, VGA, etc. Hasta llegar a nuestros días donde las pantallas CRT fueron reemplazadas por las LCD, no obstante la forma de enviar los datos a pantalla no ha cambiado en todo este tiempo, ya que se siguen enviando de la misma manera que antaño.
Los tiempos de la GPU con el monitor
Para que una imagen se genere de manera correcta en una pantalla a una resolución concreta ha de seguir una serie de tiempos exactos y por tanto transmitir los datos a una frecuencia concreta, siendo los cuatro tiempos esenciales los siguientes:
- VBlank: El tiempo en líneas de escaneo en que el monitor no ha de mostrar nada de la imagen, este se puede dar
- VSync: El periodo en líneas de escaneo en el que monitor muestra una imagen completa.
- HBlank: El periodo en una línea de escaneo en que esta no es mostrada, se divide en dos periodo, uno previo a la línea de escaneo llamado Front Porch y otro posterior llamado Back Porch.
- HSync: El periodo en que se muestra la línea de escaneo.
Este terminología viene de las pantallas que hacían uso de tubo de rayos catódicos para generar la imagen , donde no existe el término pixel a nivel físico, pero con las pantallas LCD no ocurre esto, no obstante cuando salieron las primeras pantallas LCD para PC estás tenían que reproducir el contenido de la misma manera que las CRT por lo que tuvieron que hacer uso del mismo tipo de funcionamiento que las pantallas CRT, es decir, las pantallas LCD emulan en buena parte el funcionamiento de una pantalla CRT.
El VSync es el que marca realmente los tiempos
El controlador de pantalla es una pieza que se encuentra dentro de todas las GPUs, esta se encarga de leer el búfer de imagen y transmitir su contenido a la interfaz de video.
Pensad en él como una persona que lee un texto y copia línea por línea el mismo texto hacía una nueva hoja. Debido a que el VSync marca la velocidad en la que se va a copiar cada línea, su valor influencia la velocidad en la que se dibuja el fotograma en pantalla de manera coordinada entre el controlador de pantalla de la GPU y la propia pantalla.
El controlador de pantalla sigue los tiempos que son marcadas por el estándar de cada resolución, lo que puede llevar a problemas visuales por el destiempo entre ambas partes. Es en este punto donde aparecen soluciones como el G-Sync y el Adaptative Sync o FreeSync.
Transmitir un fotograma completo es más caro
A la hora de enviar cada frame desde la GPU al monitor, no se envía todo el fotograma completo sino que se envía la información en ráfagas de datos. El motivo de ello es para evitar congestionar el bus de datos que comunica la tarjeta gráfica con la pantalla, sea cual sea el tipo de interfaz de salida de video utilizada.
El motivo de ello es porque pese a que en teoría podríamos enviar los datos de un fotograma completo de golpe a la pantalla, esto supondría que dicho monitor tendría que tener una memoria interna en la que almacenar ese búfer de imagen, lo que significaría un sobrecoste adicional sobre el coste del monitor y su precio.
Es por ello que la información del búfer de imagen final, almacenado en la VRAM, no es enviada de golpe a la salida de video, pese a que las pantallas contemporáneas permitan cambiar todos los pixeles de la pantalla al mismo tiempo en vez de hacerlo línea por línea.
El caso de la Realidad Virtual
De cara a la VR es realmente importante reducir el tiempo de fotón con tal de obtener la telepresencia y el tiempo de envió al monitor del casco de realidad virtual desde la GPU es sumamente importante.
Es por ello que las unidades HMD o cascos de realidad virtual con un SoC integrado se han hecho tan famosos, ya que permiten colocar de manera directa el búfer de imagen a la pantalla de manera directa, esto permite cambiar todos los pixeles de una imagen de golpe, lo cual es crucial para mantener todo el proceso entero por debajo de los 20 ms.
Pero esto no es posible hacerlo con la realidad virtual conectada a un cable, porque dicho cable no puede transmitir una imagen completa de golpe. ¿El motivo? Si quisiéramos transmitir una imagen completa de la GPU al monitor haciendo uso de una interfaz de salida de vídeo, al estilo HDMI DisplayPort, no solamente necesitaríamos memoria para almacenar la imagen, sino que también necesitaríamos que la interfaz fuese extremadamente ancha en número de bits y por tanto un cable con una gran cantidad de pines.
Un SoC entre la GPU y el monitor
Muchos televisores de gama alta tienen un SoC que les permite hacer uso de algoritmos basados en inteligencia artificial para poder escalar la imagen o incluso hacer interpolación de fotogramas. No obstante esto no es viable en el caso del PC, el motivo de ello es que estos televisores decodifican muy rápidamente la imagen original, lo que les da un tiempo muy alto para generar una versión a más resolución o crear fotogramas intermedios.
Pero en PC el tiempo de renderizado es muy alto, el suficiente como para que en un juego sea necesaria una alta potencia con tal de paliar el poco tiempo disponible. Es por ello que tenemos el caso de las GPUs de NVIDIA y el DLSS que requieren una velocidad enormemente alta ya que han de operar en un tiempo menor a 2.5 ms.