Ecetia explica: ¿Qué es Clipping?

Llegó el martes y, con él, una nueva entrega de la serie de artículos Ecetia explica en la cual hablamos sobre los tecnicismos que inundan el mundo del videojuego, con palabras tan usadas, y no siempre entendidas, como Bump Mapping, Aliasing, Scroll Parallax, Cel Shading, o Modo7.

Clipping

Esta semana trataremos sobre un concepto que trae de cabeza a los programadores, porque por más que se dediquen a evitar sus efectos siempre acaba dando algún problema, es el conocido Clipping. A grosso modo consiste en dibujar en pantalla únicamente lo que es visible para el jugador, liberando el procesador de mostrar algo que no se va a poder ver.

Este algoritmo, de uso en videojuegos esencialmente en 3D, al obviar texturas y polígonos que están fuera de nuestro ángulo de visión, ayuda a potenciar lo que sí vemos, con un mejora en el frame rate porque lo que no vemos no se renderiza. Imaginemos un escenario abierto, como Liberty City en GTA, Santa Destroy en No More Heroes, o el Castillo Peach en Mario 64, donde el personaje estará en un lugar concreto y a nuestra visión ciertos objetos serán invisibles, como la cara posterior de los edificios. Lo que hará esta técnica es calcular que es lo que no podemos ver según nuestro punto de vista, y ahorrarse ese trabajo para centrarse en los elementos visibles, con sus texturas, sombreados, etc.

En los tiempos que corren, donde todos se han subido al carro de la espiral gráfica y hay que generar cuantos más polígonos mejor, cualquier detalle que ayude a optimizar el aspecto visual beneficiará a todo el juego. Allí es donde actúa y es interesante el clipping al acelerar el renderizado poligonal. Lo complicado de la técnica es determinar con seguridad qué polígonos son visibles y cuales no desde un determinado punto de vista.

El problema surge cuando el algoritmo tiene alguna laguna y nos deja ver algo que no deberíamos. En el siguiente vídeo de Burnout Paradise se aprecia claramente, nuestro coche se queda atravesado en un muro, y más allá de la pared no hay nada porque se supone que es algo que no veríamos normalmente y la CPU se ahorra ese trabajo.

En el vídeo se muestra también el conocido como error de clipping, que es la definición de clipping conocida por todo el mundo, pero un tanto incorrecta porque son cosas distintas. Dos o más polígonos se superponen, en este caso el coche y el muro, cuando tendrían que ser elementos sólidos que impactasen, pero no se atravesasen mutuamente. Es bastante común la situación en la cual un personaje acaba hundiendo sus brazos en una pared, o directamente el personaje entero y literalmente se come el muro. También la cámara atraviesa un polígono que no debería haber podido cruzar, y se queda bloqueada al no encontrar el agujero por el que entró por error.

El error de clipping (o no-clipping) es un bug consecuencia de varios factores, fundamentalmente clipping (obvio), pero también debido a fallos en el motor de detección de colisiones. Esto da lugar a situaciones tan curiosas como las vistas en Sonic Adventure 2, donde la sombra del personaje se refleja en todos los pisos tras él, en vez de solamente en el inmediatamente posterior. Esto sucede porque el algoritmo del clipping decide mal que polígonos mostrar, y por otro el detector de colisiones falla produciendo polígonos fantasma que pueden ser atravesados. Al intentar solucionarlo se puede ocasionar el problema contrario, y nos chocaremos contra la nada.

A veces está provocado, no por la máquina, sino por el propio jugador que hace uso de diversos códigos en Game Genie o similares. Un ejemplo muy claro en el siguiente vídeo de Super Mario 64, provocando los bugs en el juego para cruzar puertas a voluntad y ocasionando clipping por doquier:

También en escenarios bidimensionales hace acto de presencia un bug similar, aunque no sea debido al clipping. Sólo así podría explicarse que en juegos como Megaman 2, o Super Mario Bros se puedan atravesar paredes según que circunstancia, lo cual en ocasiones es un error de programación, y otras tantas un fallo intencionado que oculta algún mundo secreto o atajo como en el primer Metroid de NES.