2010-10-03 26 views
14

Hace poco creé un código de paisaje y agregué un poco de luz difusa a la escena, sin embargo, para mi decepción, no hay sombras. Miré alrededor de la web durante horas buscando formas de obtener sombras en OpenGL, sin embargo, todas parecían terriblemente complicadas; y muy exclusivo para sus propios programas de demostración.¿Hay alguna manera fácil de obtener sombras en OpenGL?

¿Hay maneras simples de hacer sombras?

+3

No realmente. Las sombras no están incorporadas en la tubería. Tienes que generarlos tú mismo (hay muchas formas de hacerlo, cada uno con sus propios pros y contras) y renderízalos tú mismo. – GManNickG

+0

OpenGL no tiene sombras, que rinde cada punto como si no se obstaculizan entre el punto y la fuente de luz –

+1

A menos que quiera aprender las entrañas de la programación de gráficos, es posible que desee utilizar un motor de gráficos (como Horde3D) o motor de juego (Ogre o Irrlicht) en lugar de OpenGL puro. Le evitará volver a inventar la rueda (bueno, muchas ruedas, probablemente) y le permitirá saltar directamente a lo que desea lograr. OpenGL es una API de bajo nivel. – Kos

Respuesta

26

Nº rasterización es muy mala en esto (incluso los últimos juegos AAA tienen artefactos perceptibles sombra), pero todo el mundo vive con ella.

Las soluciones incluyen (aprox desde el más fácil/más pobre de la mejor/más difícil.):

  • No hay sombras. Simplemente tome en cuenta la oclusión con colores más oscuros. xNormal, Blender.
  • Si desea una sombra aproximado para un personaje, un polígono plano simple en el suelo con una textura transparente y borrosa va a hacer. Ver capturas de pantalla de Zelda, por ejemplo. Incluso algunos juegos recientes todavía usan esto.
  • Mapas de luz. Geometría estática solamente, pero iluminación perfecta (precalculada). Razonablemente simple de implementar. Existen muchas herramientas.
  • Volúmenes de sombra, popularizados por Carmack. Pixel perfecto, razonablemente simple de implementar, bastante lento. Bueno para algunos objetos. Sin sombras suaves.
  • Mapas de sombras. Un poco difícil de implementar si nunca hiciste OpenGL. Es difícil hacerlo bien. Sombras pixeladas Trata con muchos polígonos. No trata con grandes mundos.
  • Myriads of Shadow maps variants. Mucha investigación estos últimos años. Lo mejor de la actualidad es Mapas en Sombra en Cascada: Difícil, todavía es difícil hacer que se vea bien, pero rápido, se ocupa de montones de polígonos y mundos enormes.
  • sombras Raytraced: Esta puede ser la próxima generación. Nadie realmente usa eso a excepción de algunos trabajos de investigación. Muy complicado, no le va bien con mundos dinámicos (todavía), grandes escenas estáticas bien. Píxeles perfectos o sombras suaves, dependiendo de la cantidad de GPU de repuesto que tenga. Several variants; a partir de 2014, esto todavía no se hizo en ningún juego for performance reasons.

Así que el truco habitual es mezclar enfoques hermosos pero estáticos con enfoques dinámicos pero no tan buenos. Por ejemplo, vea mis tutoriales en lightmapping y shadowmapping.

+0

Si intentas obtener sombras de las montañas con un sol estático, los mapas de luz son el camino a seguir. Exporte su mapa en cualquier formato 3D, abra en Blender, siga cualquier tutorial: tiene su mapa de luz. Mezclar con la textura con un sombreador (o directamente en Photoshop si eres perezoso), listo. – Calvin1602

+0

Lo siento, el pedante en mí me hace comentar: los volúmenes de las sombras se propusieron por primera vez en 1977 por Frank Crow. Son una técnica, como los árboles BSP o la raíz cuadrada rápida que se ve alrededor, que Carmack ha popularizado para los juegos, pero definitivamente no inventó. – Tommy

+0

Gracias por el comentario, no sabía. Mensaje actualizado en consecuencia. – Calvin1602

5

La forma más sencilla que conozco implica el uso de una textura de sombra pregenerated que se superpone al terreno usando multitexturas. La parte complicada está generando esta textura, pero si no usas iluminación direccional, un simple "gran punto borroso" suele ser mejor que nada.

+0

Oh, la forma más fácil es usar un motor con lo que ya incorporada, pero supongo que no está interesado en sólo la construcción de modelos para el motor de otra persona (justo lo suficiente, ni yo). – Zooba

+0

No, no quiero construir modelos para el motor de alguien más. En cuanto a la respuesta anterior, ¿dónde podría averiguar cómo hacer esto? –

+0

Cualquier introducción básica a la multitextura lo cubrirá. El truco es establecer la textura para envolver (con bordes transparentes) y colocarla usando los parámetros de UV en el terreno. Alternativamente puede hacer una superficie extra para la sombra, que es fácil en una superficie plana, pero un poco más involucrada en un terreno ... – Zooba

Cuestiones relacionadas