¿Por qué los juegos de hoy tienen tantos glitches?

Conoce la explicación detrás de los errores más ridículos de la industria


Con todas las noticias y videos ridículos de glitches en juegos actuales, especialmente aventuras de mundo abierto (Assassin's Creed: Unity, Watch_Dogs, GTA, The Witcher: Wild Hunt), nos pusimos a pensar: ¿cómo ocurren los glitches en los juegos actuales? ¿qué rayos es lo que provoca monstruos sin cara, polígonos congelados, puertas al infinito y NPC atorados en la misma animación una y otra vez? ¿por qué el género de mundo abierto es tan vulnerable a ellos? En este artículo, intentaremos explicar un poco sobre los bugs en el gaming contemporáneo y en qué son similares y diferentes a los viejos bugs del gaming clásico con el que todos estamos más o menos familiarizados.

¿Qué son los bugs y los glitches?

Todos estamos familiarizados con los bugs y los glitches y vagamente los agrupamos como errores de software. Sin embargo, hay una diferencia. Oficialmente, bug se refiere a un error en el código de un programa que provoca un efecto indeseable y persistente. Dicho efecto indeseable puede repetirse una y otra vez bajo las mismas condiciones y no es temporal. Ejemplo: el error de guardado en The Legend of Zelda: Twilight Princess que te dejaba atrapado en un cuarto toda la eternidad y arruinaba tu save. Gracias a los parches y actualizaciones, hoy los bugs pueden ser solucionados para evitar que se rompa tu juego.

Sanic
Sanic

Los glitches se definen como errores temporales en un sistema. En su caso, se asume que la falla es temporal y no provoca un error persistente ni fatal en la ejecución, pero sí efectos indeseables como malas gráficas, errores de sonido, ruptura de mecánicas de juego, etcétera. Los glitches pueden ser resultado de errores en el código de un programa y también en el funcionamiento del hardware. Ejemplo: los errores visuales generados por una mala conexión entre los pines de los viejos cartuchos de NES y la consola. Sin embargo, también hay glitches que son resultado de errores de código, pero son temporales. Los glitches pueden ser aprovechados por los jugadores para obtener ventajas: a esto se le llama exploit. En general, existe una ambigüedad o confusión entre glitch y bug, ya que, técnicamente, un glitch es un tipo de bug.

¿Qué tipos de bugs y glitches existen?

En realidad, no existe hasta hoy una clasificación universalmente aceptada de los bugs. Sin embargo, un primer intento de clasificación fue elaborado por los programadores Chris Lewis, Jim Whitehead y Noah Wardrip-Fruin de la Universidad de California. Existen fallos "temporales" y "no-temporales", es decir, aquellos que requieren un estado previo contra aquellos que pueden ocurrir en cualquier momento. Entre los bugs no-temporales existen: objetos fuera de límites (atravesar el piso, por ejemplo), objetos fuera de límite en un estado (salirte de un cuarto donde hay un cutscene), representaciones gráficas inválidas (jugadores monstruosos en NBA 2K15), valores inválidos (por ejemplo, Mario saltando hasta la Luna), estupidez artificial (un enemigo que no ataque), información inválida (ver a través de las paredes), falta de información (no poder ver la ciudad en The Witcher: Wild Hunt), información fuera de orden (por ejemplo, el juego te presenta el final después de la primera escena) ejecutar una acción no permitida (duplicar oro en Diablo III), acción imposible (no poder agarrar un ítem).

Entre los fallos temporales se encuentran: posición inválida en una secuencia (por ejemplo, autos voladores en GTA V), estados incorrectos (que a Mario no se le acabe la invencibilidad), reocurrencias inválidas (saltos infinitos en Sonic Boom), eventos interrumpidos (una puerta no se abre en un cutscene y la cinemática no puede seguir), mala implementación de respuestas (lag en un FPS).

Sin embargo, esta clasificación sólo nos dice qué tipo de efectos indeseables podemos encontrar, pero no nos dicen cómo ocurren. El problema es que las causas de los bugs y glitches son completamente diferentes dependiendo de las épocas y plataformas. A continuación explicaremos cómo ocurren los errores más espectaculares y comunes en los juegos actuales de mundo abierto.

¿Cómo pasan los errores en los juegos actuales?

En los juegos contemporáneos, especialmente los de mundo abierto, los bugs y glitches tienden a ocurrir más por exceder la capacidad de procesamiento y la problemática integración entre la unidad de procesamiento (CPU) y la unidad gráfica (GPU). Generalmente, lo que ocurre son cuellos de botella debido al número masivo de objetos e instrucciones, lo que termina provocando efectos ridículos y contradictorios.

Por ejemplo, los glitches más ridículos y que han llenado encabezados son aquellos asociados con la generación de gráficas: los hombres lobo de Assassin's Creed, los Geralts de 2 cabezas de The Witcher, las abominaciones de Eldritch de NBA2K15 y un largo etcétera. ¿Cómo se producen estas grotescas pesadillas? El concepto de draw call (petición de trazado) es lo que nos ayuda a entender el porqué.

¿Qué es un draw call? En los juegos tridimensionales modernos, la generación de gráficos implica básicamente el procesamiento de datos de vértices y texturas. La conversión de estos datos sin procesar en gráficos es una tarea del CPU y el GPU. El proceso se divide en varias etapas. En primer lugar, los datos son copiados de tu disco duro a tu memoria RAM y las texturas y polígonos son cargados a la memoria de tu tarjeta gráfica o VRAM. En segundo lugar, el CPU debe establecer los valores globales que describen cómo los meshes o mallas poligonales deben ser rendereados o visualizados. A este proceso se le llama Render State, y establece las texturas, iluminación, transparencia, etc., que lleva cada malla poligonal o mesh. Finalmente, tras estos preparativos, el CPU puede llamar al GPU y decirle qué quiere trazar. A esto se le llama draw call o petición de trazado.

Un draw call es una orden para hacer la visualización o render completo de un mesh o malla poligonal. El GPU recibe estas órdenes y realiza la orden. Todos los datos estarán cargados en la VRAM en este punto. La GPU tomará los datos y los valores del Render State para convertir esta información en hermosos gráficos para tus ojos mediante el proceso llamado Pipeline. El GPU básicamente se dedica a la creación, iluminación y texturización de miles de triángulos.

Ahora bien, en nuestros tiempos modernos los procesadores y unidades gráficas pueden realizar muchas tareas al mismo tiempo gracias a los múltiples núcleos que los forman. Asimismo, el CPU no tiene que esperar al GPU para terminar su trabajo antes de mandar nuevas órdenes gracias al búfer de comando, que hace posible el almacenamiento y emisión de instrucciones en todo momento. Todo esto permite mantener la capacidad de procesamiento y evitar la redundancia de instrucciones o mala comunicación entre el CPU y el GPU.

¿Cuál es el problema? En algunas ocasiones, el CPU puede crear más peticiones de trazado o draw calls que las que el GPU puede procesar y exceder la capacidad del búfer. Como las API, drivers y demás también están integradas en este proceso, la comunicación puede ser afectada fuertemente por ellas. El resultado es que no siempre pueden ser procesadas todas las peticiones de trazado... el GPU carga cualquier cosa que se le ocurra y... comienza la pesadilla.

Tomemos el caso de Assassin's Creed Unity y el ridiculizado bug "sin cara". ¿Qué pasaba? Ubisoft nunca explicó exactamente el asunto, pero gracias a una investigación del sitio WCCF Tech se pudo conocer qué ocurría:

"El juego, en su primera versión, ordenaba aproximadamente 50,000 peticiones de trazado a la API de DirectX 11. El problema es que DirectX 11 sólo puede manejar hasta 10,000 peticiones de trazado a lo mucho. Lo que pasa después es un severo cuello de botella en el que la mayor parte de las peticiones de trazado eran ignoradas o visualizadas incorrectamente, lo que resultaba en texturas y NPC con problemas constantes. Por otro lado, las consolas tienen acceso directo al hardware y poca redundancia por API, pero su hardware significativamente menos poderoso no es capaz de resistir el estrés de la multitud de polígonos. Poniéndolo en palabras simples, Assassin's Creed Unity es un muy muy mal port para la PC y un título muy mal optimizado (no terminado) en consolas." Con el exceso de instrucciones, el GPU comienza a hacer malos renderings de objetos, NPC y modelos, lo que resulta en abominaciones de Eldritch como ojos flotantes, seres sin cara, modelos estáticos que flotan, seres de 2 cabezas y mil errores más.

Sin embargo, el aspecto visual no es el único afectado por los cuellos de botella. Otro problema común es la detección de colisiones: Aiden Pierce de Watch_Dogs cayendo por el piso, tu asesino atravesando el espacio hacia el vacío infinito, etc., etcétera. Cuando ocurren cuellos de botella puede pasar que el CPU tenga problemas para acceder a las mallas poligonales (meshes) para efectuar la detección de colisiones entre objetos. ¿El resultado? Los bordes de los polígonos no efectúan la detección y pronto la realidad se rompe, lo que provoca escenas ridículas como protagonistas que corren en el mismo sitio una y otra vez, paredes invisibles, montones de heno que se vuelven trampas mortales y un largo etcétera.

Los juegos de mundo abierto son una víctima predilecta de estos errores por la cantidad colosal de datos que necesitan procesar para dar la ilusión de inmersión en ambientes gigantescos. De ahí la mayor cantidad de inconsistencias gráficas y glitches en juegos como Watch_Dogs, Assassin's Creed Unity, Grand Theft Auto V o The Witcher: Wild Hunt comparados con títulos cerrados como The Witcher 2 o Wolfenstein. El problema es justamente que el salto cualitativo en términos de contenido procesado y la necesidad de gráficos cada vez más espectaculares provocan una propensión mayor a los bugs que la que existía en los juegos de la vieja escuela. El hardware inferior de las consolas, una pobre optimización en PC, la mala integración con los API y la proliferación de drivers con problemas potenciales agrava la situación. Como vimos con Assassin's Creed, el juego sufría en consolas por el hardware y en PC por ser un port de consolas con API problemáticos.

CONCLUSIÓN

Los bugs y glitches actuales son un resultado de la filosofía de diseño de los juegos modernos unidos a un contexto problemático. Sumados los problemas técnicos a los deadlines que exigen las entregas actuales debido al marketing, las ventanas de lanzamiento o las entregas anualizadas, el resultado son pesadillas llenas de errores. Sin embargo, no debemos culpar tanto a los programadores, que de hecho son los encargados de resolver eventualmente estos problemas mediante parches, sino al contexto de producción industrial que provoca la proliferación de errores mediante expectativas poco razonables en términos de tiempo, escala y trabajo sobre los equipos de desarrollo. Una consecuencia natural para evitar estos cuellos de botella son los famosos 'downgrades', que reducen la carga de procesamiento en títulos que no lograron una optimización suficiente antes de su salida. Curiosamente, parece que, de seguir el contexto actual, donde las exigencias gráficas y la expectativa de mundos cada vez más grandes crecen a pasos agigantados, estos problemas empeorarán antes de mejorar.

Comentarios

 
 
  • Mejores

  • Nuevos