1 puntos por GN⁺ 2024-10-31 | 1 comentarios | Compartir por WhatsApp
  • Las sombras en los juegos 3D no aparecen automáticamente como en la realidad, sino que son un efecto visual diseñado para verse convincente dentro de un rendimiento limitado.
  • Los primeros juegos 3D manejaban las sombras con técnicas simples pero rápidas, como imágenes 2D, blob shadows bajo los pies, texturas de sombra en tiempo de ejecución y geometría proyectada sobre planos.
  • A medida que las escenas se volvieron más complejas, se usaron texturas proyectadas, shadow maps y stencil shadows, pero con limitaciones como artefactos de resolución, proyección sobre superficies incorrectas y costos de ejecución difíciles de predecir.
  • La iluminación estática de niveles almacenaba sombras grandes con vertex colors y lightmaps, y los juegos modernos siguen aprovechando variantes de técnicas tradicionales como Cascaded Shadow Maps, light probes y capsule shadows.
  • Las sombras con ray tracing son una dirección más natural, pero en escenas complejas como las de Alan Wake 2 siguen dependiendo del muestreo y de denoisers, por lo que los trade-offs aún determinan el carácter de la imagen.

Las sombras en los juegos se crean de forma distinta a la realidad

  • En la realidad, una sombra es el resultado de la obstrucción de la luz; si una única fuente de luz está lejos, aunque varias sombras se superpongan no se vuelven más oscuras.
  • En los videojuegos 3D, las sombras no existen de forma natural, así que los desarrolladores deben diseñarlas directamente equilibrando rendimiento y credibilidad visual.
  • Dentro de un juego también son posibles representaciones como las blob shadows de Metal Gear Solid, donde las sombras se oscurecen más cuanto más se superponen.

Sombras 2D dibujadas directamente sobre la pantalla

  • El método más simple consiste en dibujar primero una imagen de sombra 2D en la pantalla antes de dibujar al personaje.
  • Winter Gold y MDK usan imágenes animadas de sombras 2D sin escalado.
  • En escenas donde el personaje está por delante de todo lo demás, incluso este método simple funciona bien.

Blob shadow: un círculo oscuro bajo los pies

  • En 3D, el enfoque más simple es dibujar un disco oscuro debajo del personaje.
  • Super Mario 64 usa blob shadows para los personajes y, mediante la función de decal del hardware de Nintendo 64, en la práctica recorta la sombra para que solo se vea sobre el plano del piso.
  • Las blob shadows pueden animarse según la situación.
    • En Super Mario 64, la sombra se achica al saltar.
    • En Metal Gear Solid, la forma de la sombra cambia.
  • El problema de que la sombra se salga por un precipicio también puede tratarse proyectando el quad de la blob shadow como si fuera un decal.

Sombras planas basadas en render textures

  • Si una blob shadow es una textura simple, también se puede renderizar al personaje desde arriba en tiempo de ejecución y usarlo como textura de sombra.
  • Crash Bandicoot: Warped logra buenos resultados con una textura de sombra en tiempo de ejecución.
  • Soldier of Fortune usa el mismo método, pero la resolución de la sombra es baja y el resultado no es tan bueno.
  • Este método es distinto del shadow mapping, que crea un depth map desde el punto de vista de la luz.
    • Aquí se usa una imagen en blanco y negro como textura.
    • Es un concepto cercano a un shadow map de 1 bit.

Sombras planas creadas con geometría

  • Un método intuitivo consiste en proyectar de forma aplastada sobre un plano el objeto que proyecta sombra, en dirección opuesta a la luz, y renderizar el mismo objeto una vez más en negro.
  • Estas sombras normalmente se mantienen opacas para ocultar el problema de que algunas partes del objeto se dibujen superpuestas entre sí.
  • Funcionan bien en pisos planos, pero pierden precisión en terrenos complejos.
  • F-19 Stealth Fighter dibuja la sombra del avión sobre la pista.
  • También pueden verse sombras planas en juegos basados en GLQuake.
    • Kingpin: Life of Crime usa sombras planas negras de forma aceptable.
    • En Half-Life alpha 0.52 se evidencian problemas de transparencia.

Sombras planas sobre terreno

  • Virus, de David Braben, hace que la nave proyecte sobre el terreno una sombra vista desde arriba.
  • Interstate ’76 inclina y estira la sombra plana para ajustarla a la pendiente del suelo.
    • A veces la sombra atraviesa el suelo.
    • En general resulta bastante convincente.
    • En la versión con renderizado por software se ve una sombra algo transparente, mientras que en la versión con aceleración por hardware aparece una sombra completamente negra.
  • Interstate ’76 también intentó proyectar sombras de objetos grandes como puentes, pero el resultado no fue del todo exitoso.

Drop shadows con texturas proyectadas

  • El método de texturas proyectadas proyecta la textura de sombra creada arriba no sobre un plano, sino sobre superficies de distintas formas.
  • Conceptualmente es parecido a disparar la Bat-Señal desde el cielo hacia abajo.
  • Toy Story 3: The Video Game es un ejemplo de este método, y cuando una sombra se superpone con otra se vuelve más oscura.
  • Puede crear sombras muy nítidas, pero es sensible a las condiciones de la superficie.
    • Puede verse raro en superficies verticales.
    • En algunos casos puede aparecer también en el techo.
    • Se pueden ver casos así en videos de gameplay de Sonic Adventure 2: Battle.
  • Puede verse a través de objetos, por lo que es más adecuado para casos especiales.
  • También puede funcionar bien para sombras de árboles.

Shadow map: el método estándar de facto

  • Un shadow map es un método en el que el juego dibuja una imagen de profundidad desde el punto de vista de la luz y luego, al renderizar el mundo, lee esa imagen para decidir si hay sombra.
  • Es relativamente fácil de implementar porque puede reutilizar el código de renderizado normal.
  • La resolución limitada produce artefactos conocidos como “Peter Panning” y “shadow acne”.
  • Se han propuesto varias técnicas para asignar más área del shadow map a las superficies cercanas a la cámara.
  • Para obtener buenos resultados, normalmente hace falta ajuste fino.

Stencil shadow: un método nítido pero costoso

  • Las stencil shadows pueden dibujar sombras nítidas sobre cualquier superficie y crear una sensación de film noir difícil de imitar con shadow maps.
  • El ejemplo representativo es Doom 3, famoso por sus habitaciones oscuras.
  • Este método divide el mundo en espacios iluminados y espacios en sombra mediante shadow volumes, que son geometría invisible.
  • El juego aplica iluminación solo a los píxeles que no están dentro de un shadow volume.
  • Para funcionar, requiere dibujar el mundo varias veces.
    • Primero dibuja todo el mundo con ambient lighting.
    • Por cada light, dibuja el shadow volume y luego vuelve a dibujar el mundo, haciendo que solo se vean afectados los píxeles fuera de la sombra.
    • Configura distintas stencil operations para front faces y back faces.
  • Uno de los primeros ejemplos comerciales posibles es Severance: Blade of Darkness, que mostró buenas sombras en 2001.
  • Una de las razones por las que hoy no se usa mucho es que su costo de ejecución es difícil de predecir.
    • El costo varía mucho según qué tan grande se vea el shadow volume en pantalla.
    • Los algoritmos optimizados estaban patentados.
    • Hay un enlace relacionado que parece indicar que Id Software llegó a algún tipo de acuerdo por Doom 3.

Stencil shadows suaves

  • Una stencil shadow no tiene por qué ser necesariamente dura.
  • Silent Hill 2 dibuja stencil shadows en PlayStation 2 y luego les aplica blur para implementar sombras suaves.
  • El resultado en consola se ve casi perfecto.

Sombras de personajes simplificadas

  • Se puede hacer que un modelo más simple que el mostrado en pantalla proyecte la sombra.
  • En Zelda de Nintendo 64, solo los pies de Link proyectan sombra; las demás partes no.
  • Hyperblade usa un enfoque peculiar en el que, en una arena de hockey futurista, los jugadores proyectan sombras planas con formas animadas simples.

Sombras dentro de iluminación estática de niveles

  • Los vertex colors y los lightmaps son técnicas para almacenar la iluminación de los niveles de un juego, y en muchos juegos fueron la única forma de mostrar sombras de gran escala.
  • Vertex color

    • Ico demuestra que incluso con iluminación per-vertex antigua se pueden crear sombras sofisticadas.
    • En mapas low-poly, las sombras nítidas también pueden representarse con vertex color.
    • Tony Hawk Pro Skater 2 logra resultados impresionantes incluso con este método simple.
  • Lightmap

    • Un lightmap es una forma clásica de almacenar la iluminación y las sombras de un nivel.
    • En lugar de guardar colores por vértice, usa un segundo conjunto de texturas que solo representa la iluminación.
    • Puede variar la resolución por zona, lo que permite hacer las sombras más precisas donde hace falta.
    • Usa más memoria que vertex color.
    • Quake suele considerarse el juego que popularizó los lightmaps.

Técnicas tradicionales que siguen usándose en juegos modernos

  • Los juegos modernos siguen usando técnicas tradicionales de sombras según la situación.
  • Cascaded Shadow Maps, una variante del shadow mapping, se usa para cubrir áreas amplias rápidamente.
  • Los lightmaps pueden usarse junto con otras técnicas como light probes.
  • La idea de modelos de personajes simplificados también continúa.
    • The Last of Us crea sombras suaves de personajes con esferas alargadas.
    • Unreal Engine ofrece capsule shadows para personajes.
  • Las sombras proyectadas también siguen usándose.
    • Hot Wheels Track Attack renderiza un shadow mesh como textura y luego lo proyecta sobre la pista de carreras.
    • Se puede comprobar en la explicación del blog de los desarrolladores y en videos de gameplay.

Las sombras con ray tracing tampoco son perfectas

  • En los juegos que intentan simular iluminación físicamente correcta, las sombras aparecen de forma natural donde no hay luz.
  • A diferencia de los shadow maps, incluso los pequeños detalles de geometría pueden proyectar sombras precisas.
  • Las lámparas grandes generan naturalmente sombras suaves, y la luz indirecta puede iluminar las esquinas oscuras.
  • Para hacer realidad este objetivo, se ha invertido mucho tiempo y dinero en algoritmos y hardware de ray tracing.
  • Las escenas de los juegos modernos reales son muy complejas, por lo que hay que aproximar la simulación.
    • En las ray-traced shadows de Alan Wake 2, cada píxel recibe iluminación solo de una única light elegida al azar.
    • El resultado se envía a un denoiser, que suaviza de forma inteligente una imagen con ruido.
  • Las sombras con ray tracing tampoco son perfectas, y según los trade-offs elegidos adquieren un aspecto propio.

La opción de no tener sombras

  • Algunos juegos pueden priorizar otros elementos por encima de las sombras.
  • No implementar sombras también puede ser una decisión explícita.

1 comentarios

 
GN⁺ 2024-10-31
Opiniones de Hacker News
  • Lo que más me gusta es el hecho de que las sombras en exteriores son azules.
    No es una ilusión óptica ni una atmósfera artística: como el cielo es azul, en un día despejado las sombras se ven azules porque están iluminadas por la luz reflejada desde el cielo.
    Si miras debajo de un auto, puedes ver que en las partes donde se ve el cielo hay una sombra azul bien definida, y que se acerca al negro real en las zonas donde la carrocería bloquea incluso la luz del cielo.
    Si mezclas esa sombra solar azul intensa con una sombra de cielo AO suave y negra, puedes crear sombras bastante bonitas a bajo costo.
    • Es cierto, y es tan sutil que mucha gente ni siquiera lo nota.
      Un buen motor de renderizado gráfico hace este tipo de tratamiento. Las sombras deberían tener un ligero tinte del color del cielo.
      Por eso me molestaban algunas capturas antiguas de No Man's Sky. Creo haber visto una escena donde el cielo era verde pero las sombras eran moradas.
    • A los pintores a menudo se les enseña a pintar las sombras exteriores con un leve tono morado, para maximizar el contraste con el matiz amarillo de la luz solar.
    • Acabo de verlo también en una pintura invernal de Monet: https://news.artnet.com/art-world/monet-the-magpie-three-fac...
  • Me gusta la variante que usan hoy en los juegos de plataformas de Nintendo. Usan shadow maps, como la mayoría hoy en día, pero ajustan la sombra del personaje del jugador para que siempre caiga justo debajo, sin importar la posición real de la fuente de luz.
    Como las clásicas sombras tipo mancha, te ayuda a calcular dónde vas a aterrizar después de saltar, pero mantiene la calidad visual de una sombra correcta.
    Si no recuerdo mal, en entornos oscuros incluso hacen que la sombra sea más clara que el piso para que siga siendo visible.
  • Pensaba que la razón por la que Valorant siempre se veía medio mal era que los jugadores no proyectan sombras. Me enteré hace unos días de que, supuestamente, es porque para reducir trampas el servidor no envía al cliente la posición de los modelos de otros jugadores hasta que determina que son visibles.
    Entonces, cuando los modelos de jugadores se cargan y descargan, las sombras aparecerían y desaparecerían, así que no puedes ver la sombra a menos que también puedas ver el cuerpo del jugador.
    • Quizás viste algo que escribí yo sobre eso. No sé si Valorant desactivó las sombras de los jugadores por su sistema antitrampas, pero sin duda hace que el antitrampas sea más simple.
      Valorant simplificó deliberadamente el renderizado al extremo para lograr tasas de cuadros muy altas incluso en hardware de gama baja. No solo no hay sombras dinámicas, tampoco hay iluminación dinámica en absoluto, ni transparencia alfa en ningún lado.
      Incluso cosas como el humo, que normalmente se dibujarían con transparencia, las estilizaron para poder dibujarlas completamente opacas, porque eso es más rápido. Independientemente de las trampas, es muy probable que de todos modos hubieran quitado las sombras dinámicas por rendimiento.
    • ¿No se podría arreglar si el servidor también comprobara la visibilidad de la sombra? No conozco bien Valorant, pero parece que no esconderse con una fuente de luz a la espalda podría ser en realidad un elemento estratégico.
  • Buen artículo, con muchas referencias a juegos que despiertan nostalgia. Todavía recuerdo haberme sorprendido, hace mucho, al ver las sombras en Zelda de N64.
    Creo que, con la adopción del ray tracing, las luces de área y las sombras suaves se volverán el estándar. Si tu hardware da para eso, vale la pena mirar Quake 2 RTX para ver cómo podría verse el futuro.
    Por último, agregué este blog a mi lista de recursos gráficos: https://github.com/aaron9000/c-game-resources
    • Si con trucos de humo y espejos se pueden hacer sombras suficientemente buenas, por razones de rendimiento conviene seguir usando técnicas de engaño visual.
  • Sobre la parte que dice “el primer juego lanzado con sombras stencil probablemente fue Severance: Blade of Darkness, de 2001, y sus sombras son excelentes”, Revolte para PowerVR PCX1 usaba sombras stencil en 1996.
    https://www.youtube.com/watch?v=7BvtML5dIuI
    PowerVR PCX1 tenía soporte por hardware para volúmenes de sombra, implementado de forma más eficiente que las sombras stencil estándar. En vez de dibujar la escena varias veces, básicamente hacía en hardware un prepaso solo de profundidad hacia un búfer de profundidad/stencil on-chip para determinar los píxeles visibles, probaba los volúmenes de sombra para decidir qué píxeles estaban dentro de la sombra y luego realizaba el muestreo de texturas y el sombreado.
    El brillo de la iluminación se ajustaba según el resultado del volumen de sombra, y como solo se sombreaban los píxeles visibles, el overdraw no desperdiciaba ancho de banda en fetches de textura innecesarios.
    En Dreamcast, basada en el sucesor del PCX1, también hubo muchos juegos que usaban volúmenes de sombra. La implementación de Dreamcast era más flexible: los volúmenes podían cambiar no solo la iluminación, sino también la textura usada, el mapeo UV e incluso la ecuación de blending de polígonos transparentes.
    También hice sombras suaves en DC (https://imgur.com/a/DyaqzZD al final), pero como vuelve a un método stencil más estándar y redibuja las sombras varias veces, la carga de fill rate es bastante alta.
  • Para ver el estado del arte en técnicas de iluminación para videojuegos, miren la demo reciente de UE 5.5 MegaLights de Epic: https://youtu.be/p9XgF3ijVRQ?si=GcU0kP33iKQh_5Ge
  • Si hay más de una fuente de luz, cuando las sombras se superponen realmente se vuelven más oscuras.
    Si dos lámparas iluminan a tres personas, se crean seis sombras. Donde las seis sombras se superponen, queda “negro” o solo luz ambiental.
    En otros lugares donde se superponen menos sombras, aparece un gradiente de iluminación.
    • Eso no es correcto. En cuanto se cruzan dos sombras, una de cada fuente de luz, solo queda negro o luz ambiental.
      Si estás dentro de la sombra de la fuente A y dentro de la sombra de la fuente B, ¿de dónde recibirías luz? Solo de la luz ambiental; y si no hay, negro.
    • Buena observación, pero el artículo no está equivocado. Me pareció bastante interesante.
      Está condicionado a que “hay una sola fuente de luz y está bastante lejos, por lo que la sombra es simplemente la ausencia de luz”.
  • Sobre la parte que dice “algunos simuladores de vuelo tempranos dibujan una sombra plana vista desde arriba cuando estás en la pista. Mientras investigaba esperaba encontrar un ejemplo donde la sombra también se viera en vuelo, pero no lo encontré”, F-29 RETAL, o F29 Retaliator, F29, es ese ejemplo.
    Esa sombra era otro pequeño elemento que le daba a este juego una enorme sensación de velocidad.
    https://imgur.com/a/hOgxr7a
    https://www.mobygames.com/game/6233/f29-retaliator/
  • Mi momento de sombras más impresionante fue jugando GTA IV. Tenía una PC gamer bastante potente, y las sombras en tiempo real generadas por los faros del vehículo del jugador eran excelentes en general.
    El momento que todavía recuerdo fue de noche, cuando robaba un auto en un callejón. Justo cuando el personaje del jugador se subía al auto, un policía apareció al doblar la esquina y “vio” el robo; al mismo tiempo que sacaba el arma, se encendieron los faros y una enorme sombra del policía en movimiento se proyectó sobre una pared cercana.
  • El artículo es bueno y se lee con gusto.
    La superposición de sombras en MGS no está completamente mal. Es por la luz ambiental, la dispersión y otros fenómenos de iluminación global.
    La frase “Mirror’s Edge (2008, PC) es básicamente Lightmaps: The Game” es graciosa, pero cierta. Fue un juego impresionante en su momento y todavía lo es visto hoy.
    • Si quieres que un juego siga viéndose bien con los años, no hay nada como la iluminación global horneada. Fue el primer juego en el que vi sombras azules reales a plena luz del día. Aunque eran sombras provenientes de la geometría del nivel.
      Creo que en su momento fue injustamente infravalorado. Tal vez porque era más corto que sus competidores.