Doom Wiki
Doom Wiki

Relacionadas:

Espectro

El Espectro, un monstruo parcialmente invisible

El Efecto de invisibilidad parcial (también conocido como el efecto fuzz) es un efecto visual que se utiliza en Doom para los Espectros y cuando el jugador recoge la Esfera de invisibilidad parcial, aunque ha sido sustituido por translucidez verdadera o basada en tablas en algunas portaciones (source ports). Está marcado como MF_SHADOW en las definiciones de cosas.

El motor es técnicamente capaz de aplicar el efecto a cualquier cosa arbitraria, pero por defecto sólo se utiliza para lo mencionado. Heretic, Hexen, Strife, la mayoría de las portaciones de Doom para consolas y algunas portaciones no utilizan este efecto en absoluto, ya sea omitiéndolo o confiando en la translucidez verdadera o basada en tablas.

Cuando se dibuja una cosa parcialmente invisible en Doom, en lugar de dibujar los datos habituales de píxeles de sprites, lo que el motor sólo tiene en cuenta es la forma básica del sprite. El espacio ocupado por el sprite se llena entonces con el efecto fuzz, que funciona mediante la copia de píxeles verticalmente adyacentes de ida y vuelta en un patrón (la tabla fuzz, que se define en una matriz en r_draw.c) dentro del buffer de cuadros mientras le aplica el sexto COLORMAP (contando desde cero) a ellos. El resultado final es que el sprite aparece como una sombra translúcida, difusa y algo más oscura que la zona de la pantalla sobre la que se dibuja.

Corte vertical[]

Dado que el efecto funciona copiando píxeles adyacentes dentro de la memoria búfer de fotogramas, los bordes de la vista del juego se convierten en un problema. Al dibujar el efecto en la fila superior de la vista del juego, obviamente no es posible copiar píxeles de una fila superior y, de la misma manera, en la fila inferior no es posible copiar píxeles de una fila inferior. Por esta razón, el motor original siempre mantiene un espacio de un píxel en los bordes superior e inferior de la vista donde el efecto difuso estará desactivado.

Esto se advierte más fácilmente cuando el jugador se ha vuelto parcialmente invisible y el objeto de su propia arma se ve afectado por el efecto fuzz: siempre hay un espacio entre el arma del jugador y la parte inferior de la vista. Esto sucede incluso si no se utiliza el modo de pantalla completa; luego aparece el espacio entre el arma del jugador y la barra de estado o el relleno del borde de la pantalla. Sin esta limitación, el código responsable de dibujar el efecto fuzz intentaría copiar píxeles desde fuera de la vista del juego. Esto provocaría que la barra de estado o el relleno del borde de la pantalla se filtraran en la vista del juego o, si el tamaño de la vista es lo suficientemente grande, la basura desde fuera del área de la pantalla se filtraría en la vista del juego. En el peor de los casos, el juego podría bloquearse debido a accesos no válidos a la memoria.

Algunas portaciones en el pasado intentaron superar esta limitación cambiando la tabla de fuzz para que los píxeles se copien horizontalmente en lugar de verticalmente, pero este enfoque todavía tiene el problema, simplemente desplazándolo de los bordes superior e inferior de la vista a los bordes izquierdo y derecho. Con esta modificación, y sin deshabilitar el dibujo difuso para las columnas más a la izquierda y más a la derecha de la vista de juego, las cosas parcialmente invisibles dibujadas cerca de los bordes izquierdo o derecho harán que los píxeles sangren desde el borde opuesto de la vista de juego o, si el ancho de la vista de juego se establece por debajo del máximo, el relleno del borde de la pantalla sangra en la vista de juego.

Este corte se mantiene en Heretic a pesar de que el efecto de translucidez de la Esfera de sombra no estaría sujeto al problema que se pretende evitar.

Efecto punteado[]

El efecto punteado (stippling) característico en objetos parcialmente invisibles se debe a un resultado del comportamiento del algoritmo que podría considerarse un error. El algoritmo funciona bajando por cada columna del sprite de arriba a abajo, copiando el valor de color del píxel de fondo inmediatamente por encima o por debajo del píxel actual, y luego oscureciendo ligeramente el valor de color aplicándole un nuevo mapa de colores. El resultado de este comportamiento es que cuando el algoritmo tiene una serie de píxeles donde cada uno se copia del que está por encima de él, como suele ocurrir, el color original copiado en el primer píxel de la serie se copia repetidamente y se oscurece en los píxeles siguientes hasta que se vuelve casi negro. Debido a la naturaleza sutil de este comportamiento, que muestra un grado de histéresis que surge de un bucle de retroalimentación positiva, parece probable que no haya sido intencional.

Animación inmóvil[]

Cuando se cambia el tamaño de la pantalla, se crean diferentes movimientos y diferentes patrones que se repiten en el arma parcialmente invisible del jugador. Puede ocurrir que a un cierto tamaño de pantalla se detenga el movimiento del efecto.

Este es el caso cuando el tamaño de la pantalla (denominados bloques de pantalla en el archivo de configuración del juego) se establece en el tamaño de borde predeterminado (que es 9; el juego dibuja un borde de un bloque de grosor) y que el arma seleccionada es la Escopeta. Si el jugador está inmóvil, el efecto fuzz detendrá su movimiento por completo. Dado que el efecto de borrosidad fue diseñado para crear un movimiento de píxeles oscurecidos, esto se considera un error.

Debido a que este error depende de la forma del sprite del arma, puede ocurrir cuando se usan WADs personalizados que modifican las armas. Este error se corrige en las portaciones en las que se reescribió el código para crear el efecto de fuzz, como Doom Retro, mientras que se agrava en algunos otros, como ZDoom, debido a las diferencias en los tamaños de pantalla y la disponibilidad de renderizado de mayor resolución.

Apariencia en portaciones y consolas[]

Debido a la tecnología de renderizado diferente, varias portaciones (especialmente las basadas en APIs 3D de aceleración por hardware como Direct3D y OpenGL) no utilizan el efecto fuzz, pero en cambio emplean translucidez = opacidad reducida de los sprites utilizados o modelos basados en mallas.

La texturización de monstruos parcialmente invisibles no es uniforme entre los diferentes ports: algunos simplemente usan la textura del monstruo de base (es decir, el Demonio para el Espectro), algunos aplican una textura animada con ruidos para acercarse al efecto fuzz original. Tampoco es homogéneo el concepto de si al matar a lso monstruos parcialmente invisibles se vuelven completamente visibles después de la muerte (lo que ocurre para algunos monstruos en ports Doom 64).

La representación de objetos translúcidos en forma correcta y eficaz no es una tarea trivial para un motor de 3D. La función Z-buffer utilizada a menudo, sólo funciona correctamente para "binary alpha" (ya sean texels completamente opacos o totalmente transparentes). Una correcta visualización de objetos translúcidos puede requerir varias pasadas de renderizado con diferentes atributos (especialmente respetar o ignorar el Z-buffer) en un orden específico para mostrar parcialmente cubierta y hasta la intersección de objetos translúcidos y sin artefactos noticable, lo que puede ralentizar la velocidad de renderizado. Este orden puede cambiar en los monstruos muertos, por lo que es posible ver a través de los charcos de sangre en el piso y las paredes producidos por un cadáver translúcido de un Espectro, dependiendo del motor 3D y del source port específico.

Esfera de invisibilidad parcial[]

La Esfera de invisibilidad parcial (llamada blur sphere en los manuales) es un elemento para recoger que se presenta bajo la forma de una esfera roja y azul que flota en el aire, con un patrón pulsante similar a un ojo.

Recoger este potenciador otorgará al jugador una invisibilidad parcial durante 60 segundos. El sprite del jugador (en modo multijugador) se verá similar al del Espectro, mientras que el jugador afectado verá sus propias armas y manos como parcialmente invisibles. Cuando queden cinco segundos, el arma comenzará a parpadear, señalando el final de los efectos del artefacto; el sprite del jugador, sin embargo, permanece completamente borroso hasta que transcurren los 60 segundos.

Recoger otro elemento de invisibilidad parcial mientras se está bajo el efecto de uno previamente recolectado restablece la duración a 60 segundos; cualquier tiempo restante se pierde. Por esta razón, es mejor no recolectar otra esfera hasta que la actual esté a punto de caducar.

A los monstruos que disparan contra el jugador invisible se les reducirá la precisión, ya que su objetivo se ve contrarrestado por un ángulo aleatorio, lo que hace que se pierdan con mayor frecuencia. Sin embargo, esto puede hacer que los jugadores experimentados esquiven inadvertidamente hacia los proyectiles entrantes, acostumbrados a que los monstruos disparen directamente hacia adelante. Sin embargo, una esfera de invisibilidad confiere una ventaja definitiva contra ataques de largo alcance, como los de Zombis o Spiderdemons.

La invisibilidad parcial también se puede invocar con el código de trucos idbeholdi.

Este elemento se incluye en el porcentaje de elementos que se muestra al final de cada nivel.

Datos técnicos[]

Invisibilidad
Esfera de Invisibilidad
Tipo de cosa 2024 (decimal), 7E8 (hex)
Actor MT_INS (58)
Aparece en Doom registrado
The Ultimate Doom
Doom II / Final Doom
Radio 20
Alto 16
Sprite PINS
Frames 4 (ABCD)
Clase Objeto recolectable

Véase también[]