Tu antigua consola de hace años ejecuta ciertos juegos mucho mejor que tu PC más nuevo y más moderno. ¿Por qué ocurre esto? Es por ello que os vamos a introducir el concepto de Draw Call, el cual tiene que ver con la mala optimización de los juegos para ordenador en comparación con otros sistemas. Y a qué se debe dicha tendencia generalizada.
Muchos videojuegos a día de hoy son de mundo abierto, esto significa que en vez de tener una serie partes que hemos de ir superando de manera secuencial, lo que tenemos es un mapa unificado donde ocurren varias cosas al mismo tiempo. El hecho de tener que calcular todos los elementos al mismo tiempo resultaría ahogar al procesador central. Por lo que el mapa, aunque está unificado, se divide en pequeñas secciones con una pantalla de carga donde o una cinemática por el medio. Lo cual le permite a nuestro procesador cargar solo aquello que se encuentra en esa zona y descartar al resto de los elementos. Sin embargo, muchas veces están optimizaciones, no están bien hechas.
¿Qué es un Draw Call y cómo afecta al rendimiento en juegos?
El problema es que la CPU no tiene un concepto visual de lo que se ve y lo que no se ve, simplemente tiene una lista de objetos de los que ha de solventar su interacción con el resto de un fotograma a otro. Por cada objeto en escena lo que se realiza es lo que llamamos un Draw Call. Es decir, usar una API gráfica como DirectX, OpenGL o Vulkan para que la tarjeta gráfica dibuje dicho objeto en escena. Por lo que la generación de los gráficos del juego empieza siempre en el procesador central.
Con tal de reducir los costes, lo que se hace a día de hoy es que cada Draw Call se refiera a «un grupo de polígonos que comparten las mismas propiedades». Gracias a ello, si por ejemplo necesitamos que se dibuje la hierba de un prado, no nos hace falta una llamada a la GPU vía API por cada brizna de hierba, sino que podemos unificarla. A esto se le llaman batches o empaquetados en español. El hecho de unificarlas en un solo grupo pasa a tener sentido, ya que no es lo mismo esperar varios envíos seguidos donde el procesador se ha de parar para cada uno de ellos y enviarlos a la GPU, que hacer un solo envío y olvidarse.
Por ejemplo, en la imagen de esta sección podemos ver una gran cantidad de bolas que usan el mismo modelado, pero diferente color. Podemos hacer que cada una de ellas sea una llamada a la API gráfica, que todas las de un color lo sean o agruparlas todas ellas en un único envió.
¿Cómo influencia el uso de una API Gráfica u otra?
Si un procesador tiene que realizar muchos Draw Call, entonces la mejor solución es coger y dividir el trabajo entre varios núcleos. Sin embargo, esto no es posible hacerlo, dado que lista de dibujado que crea la CPU es solo una. ¿La forma de reducir el sobrecoste? Quitar todas aquellas llamadas al sistemas que pueden funcionar independientes al dibujado de la escena y colocarlas en listas aparte. Esto se traduce en que pueden ser llevadas por núcleos diferentes. Sin embargo, la lista de pantalla va a correr siempre en el mismo núcleo.
El hecho de separar gráficos y computación en dos partes distintas es algo que hemos visto en DirectX 12 en adelante y Vulkan. Si el juego se está ejecutando en modo DirectX 11 o anteriores, o en su defecto en OpenGL. Entonces la cantidad de Draw Call será mayor, aunque buena parte de ello serán para computación y no gráficos. A nivel simplista, no son más que llamadas para que la tarjeta gráfica realice una serie de cálculos. Pero es importante con tal de reducir la cantidad de llamadas a la gráfica, dado que según el tipo de sistema para el que funcione el juego, la cantidad de Draw Call puede ser un problema para su rendimiento.
Los Draw Call y la tarjeta gráfica
Lo habitual es que sea la unidad DMA dentro de la GPU la que copie las listas de pantalla desde la RAM del sistema a la RAM de la gráfica (VRAM) usando para ello la interfaz PCI Express. Sin embargo, Resizable BAR le permite al procesador central proceder el caso contrario, enviar los datos de manera directa a la gráfica. No obstante, el ideal sería un modelo de memoria unificada de cara al acceso, pero esto no lo tenemos ni en PC, ni en consolas a día de hoy.
Una de las cosas que ha de hacer la tarjeta gráfica es determinar la visibilidad de los objetos, esto significa que ha de ir eliminando todos los objetos que en dicho fotograma no se ven. Es decir: los que están demasiado alejados, los que están fuera de cámara o los que se encuentran tapados por otros objetos más grandes. El procesador central no sabe si esos objetos cumplen dichas condiciones o no, simplemente sabe que están en escena y será la GPU de la tarjeta gráfica la encargada de realizar el proceso de descarte.
¿Por qué en PC los juegos parecen estar peor optimizados?
Lo habitual es que si la tasa de fotogramas es lo suficientemente alta, entonces los programadores del juego no se preocuparán si el número de Draw Call resulta demasiado alto. Esto en PC es un problema, ya que el hardware evoluciona continuamente y se tiende a la falta de optimización. Mientras que en consolas, se tiende a ir reduciendo la cantidad de llamadas a la API con tal de mantener la tasa de frames alta y estable.
Curiosamente, los juegos que mejor optimizados están en este aspecto son los juegos como servicio, aunque no todos, el motivo es que se basen en el dejar jugar gratis y se financian a través de pagos esporádicos de sus usuarios. Para estos es sumamente importante tener la mayor cuota de mercado posible. Lo que ha llevado a un dominio de esta clase de títulos en el mercado. Simple y llanamente la mayoría del público los puede ejecutar sin problemas. En cambio, los juegos con alta carga gráfica por una optimización pésima en PC pueden llegar a pedir el doble de potencia que en consola para ofrecer la misma calidad.
Esto no algo que ocurra también en PC, ya que puede ser que un estudio encargado de hacer la conversión de un juego a una consola en concreto caiga en el mismo problema de falta de optimización. Por lo que al final, buena parte de la culpa de que ese juego no funcione bien en tu ordenador es humano y no del hardware que tienes.
La realidad
Una vez explicados los motivos técnicos nos toca hablar de los políticos que influencian mucho más de los que os pensáis. Los fabricantes de consolas tienen departamentos de calidad que prueban los juegos para sus consolas y miran que funcionen de manera adecuada. Sin embargo, cuando un título es muy importante, esto lleva a una carrera contrarreloj que se traduce en parches día 1 e incluso en desastres como Cyberpunk 2077.
En PC no existe eso, ni la Epic Store y tampoco Valve con Steam tienen un proceso de calidad que certifique que los juegos están bien optimizados. Tampoco se puede con la gran cantidad de configuraciones distintas de hardware en el mercado. ¿Para que preocuparme de que el PC de hoy no ejecute un juego bien si lo hará sin problemas el de mañana?