En algunos juegos, veo luces brillando a través de las paredes, incluso si configuro la calidad de video en niveles altos.
Un par de ejemplos de juegos que jugué recientemente son Borderlands 2 (explosiones de misiles) y Call of Cthulhu (linternas; el juego incluso usa Unreal Engine 4).
¿Es esto un error o hay razones de rendimiento?
Ejemplo Borderlands 2: https://youtu.be/9bV83qA6_mU?t=419 (pocas veces, pero rápidamente)
Pregunta adicional: en el último caso, ¿hay alguna forma de que el trazado de rayos se pueda utilizar de forma económica para resolver el problema? Supongo que la RT costosa definitivamente resolvió el problema, pero me pregunto si también se puede usar de forma "barata" para resolver este problema específico.
lighting
shadows
raytracing
Marcus
fuente
fuente
Respuestas:
Ampliando la respuesta correcta de TomTsagk, pensé que podría ser útil describir un poco más sobre por qué los juegos funcionan así.
La luz en los juegos realmente no "viaja" desde la fuente, a la superficie, a la cámara, obstruyéndose en el camino.
Para determinar qué tan brillante es dibujar cada píxel de una superficie en función de una luz dada, usamos (o aproximamos) una fórmula matemática que usa la dirección de la superficie y la dirección desde este punto en la superficie hasta la fuente de luz. Eso es todo, solo la dirección desde la que está brillando: normalmente no emitimos un rayo para verificar si la luz realmente alcanza este píxel, porque hacer eso para cada píxel en la pantalla y verificar el rayo contra toda la geometría detallada de la escena es por lo general, sigue siendo demasiado caro para juegos en tiempo real.
Entonces, por defecto, ninguna luz del juego proyecta sombras. La dirección hacia una luz se mantiene igual incluso si hay un emisor de sombras en el camino, por lo que las matemáticas nos dan el mismo valor de brillo.
Si queremos simular sombras, tenemos que hacerlo por separado. Una forma común es con lo que se llama un Mapa de sombras. En esta versión, antes de sombrear nuestra escena, primero renderizamos la escena desde la perspectiva de cada luz, como si esa luz fuera una cámara, almacenando la profundidad de cada píxel que ve en una textura fuera de la pantalla.
Luego, cuando sombreamos la escena, podemos comparar la distancia matemática de este píxel desde la fuente de luz con la profundidad que registramos en el píxel correspondiente en el mapa de sombras. Si la profundidad del mapa de sombras es menor, significa que hay otra superficie entre aquí y la luz, y dibujamos este píxel en la sombra.
Hay muchas técnicas geniales para hacer que estas sombras basadas en mapas se vean más bonitas, con menos artefactos / alias, pero las pasaré por alto por ahora. Baste decir que, en general, tampoco son libres.
Debido a que esto requiere renderizar (hasta) toda la escena nuevamente desde la perspectiva de cada luz, hasta seis veces si es un punto de luz que brilla en todas las direcciones {norte, sur, este, oeste, arriba, abajo}, y necesitamos volver - Entregue el mapa de sombras cada vez que algo se mueva, esto puede ser muy costoso.
Por lo tanto, los juegos a menudo centrarán su presupuesto de renderizado en las luces más importantes de la escena, como la luz solar direccional, para garantizar que tengan sombras atractivas. Las pequeñas luces pequeñas, de corta duración, como el destello de una explosión, a menudo son perdonables si se escapan un poco de los oclusores. A menudo, esto es más aceptable para los jugadores que un problema en la velocidad de fotogramas debido a un aumento repentino en el costo de representación de todos los cálculos y la representación adicional del mapa de sombras. Especialmente si es una escena de acción ocupada donde la fluidez es más importante que la perfección de píxeles.
fuente
En pocas palabras, esto sucede por razones de rendimiento.
Cuando hay una luz en la pantalla, por defecto brilla en todos los objetos (obstruidos o no), por lo que el juego necesitaría hacer cálculos adicionales para ver qué objeto se ve afectado por qué.
Esto es más fácil de resolver en objetos estáticos mediante el uso de iluminación estática y horneada, pero esto no es lo mismo en luces dinámicas, como las explosiones como notó.
Para su pregunta adicional, el trazado de rayos y barato no van juntos en la misma oración. La única razón por la que el trazado de rayos no se ha generalizado hasta ahora es el rendimiento. Suponiendo que todas las luces usan trazado de rayos, entonces este problema se "resolvería", pero a expensas del rendimiento.
fuente