Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





lightmap y objetos dinamicos

Iniciado por race, 05 de Enero de 2008, 02:15:29 PM

« anterior - próximo »

race

buenas.

estoy programando un pequeño motor en xna, pero tengo problemas con la iluminacion,  quiero utilizar lightmap pero no tengo ni idea de como hacer que el lightmap le influlla a los personajes y objetos dinamicos que hay en la pantalla.

gracias.

BeRSeRKeR

Cita de: "race"estoy programando un pequeño motor en xna, pero tengo problemas con la iluminacion,  quiero utilizar lightmap pero no tengo ni idea de como hacer que el lightmap le influlla a los personajes y objetos dinamicos que hay en la pantalla.
Hola.

Yo estoy algo oxidado con el tema pero posibilidades que se me vienen a la cabeza.

Utilizando las mismas luces que utilizas para el cálculo de los lightmaps, o utilizando un setup especial de luces en el caso de que tengas un rigging de luces específico para la generación de lightmaps (por ejemplo porque utilices iluminación global):

  • Utiliza un sistema como el de quake3. Un grid 3D que cubría todo el nivel e indicaba en cada voxel la iluminación debía haber.
    Link
  • Utiliza lightmaps dinámicos a.k.a proyección de texturas. (creo que es lo que utiliza Doom III)
    Link1
    Link2
  • Utiliza algún BRDF. Si la geometría es lo suficientemente densa, evalua el BRDF per-vertex. Si no, y además quieres normal mapping, evalua per-pixel.
    Link1
    Link2
  • Utiliza texturas 3D para los lightmaps. Esto tiene la ventaja de que te serviría para iluminar los objetos dinámicos y además sobre ellos se proyectarían las sombras (que además podrían ser soft-shadows si así lo deseas) del escenario (la geometría estática). La desventaja es que evidentemente necesitarías calcular los lightmaps 3D por tí mismo. Otro problema podría ser el consumo de memoria de las texturas 3D, pero dependiendo del hardware base y teniendo en cuenta que las texturas 3D no tendrían que tener mucha resolución, podría ser aceptable.
    Link
Evidentemente, ninguno de los casos te soluciona las sombras de los objetos dinámicos. Ahí no tienes más remedio que echar mano de cualquiera de los métodos existentes para el cálculo de sombras (shadow maps, shadow volumes, ...).

Con lo que te he puesto creo que tienes para empezar a buscar información sobre las diferentes opciones.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

senior wapo

Un lightmap es en esencia una tabla precalculada de la ecuación de iluminación, y por tanto, depende de la posición y orientación del polígono.

Por tanto, no puedes aplicarlo a un objeto móvil a menos que almacenes todos los posibles valores, para cada posición y orientación, o al menos una aproximación.

Berserker ya te ha comentado como: Con un array 3D que muestreas por vértice (rejilla 3D) o array 3D que muestreas por pixel (textura 3D). Ambos son exactamente lo mismo aunque con una calidad ligeramente superior en el caso de la textura a mismo tamaño y resolución que el array 3D. La diferencia de calidad viene de que puedes muestrear en cada punto y no sólo en cada vértice.

De doom 3 pasa que no usa lightmaps para nada.

Francamente, ya que usas XNA y te obligas a que el usuario  soporte shader model 2, yo que tu pasaría de lightmaps y usaria shaders.

Si te empeñas en usar lightmaps para el entorno, usa iluminación por vértice activando las 3 luces más cercanas al dibujar tu objeto móvil y no te compliques más la vida.

BeRSeRKeR

Cita de: "senior wapo"De doom 3 pasa que no usa lightmaps para nada.
Sí, es cierto, toda la iluminación es dinámica pero por lo que he podio ver (y ciertamente no estoy seguro al 100%), creo que el diffuse se consigue con proyección de texturas (no se hace el NdotL, por lo que he podido ver en el "uber-shader" que viene con Doom III), aunque el specular sí se calcula utilizando Blinn-Phong. De ahí que comentara lo de que la proyección de texturas es una opción. Pero vamos, como digo no pongo la mano en el fuego... :P

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

race

la verdad es que el efecto que necesito es oscurecer el jugador ( por ejemplo)  cuando  pase por una sombra.
la idea es utilizar el lightmap que lo realizo con vray, para crear toda la iluminacion  del escenario. las luces por shanders las utilizo para los objetos dinamicos y no para el escenario para conseguir una relacion buena de fps, que no se si sera buena idea, pero creo que es la mejor para poner todas la luces que uno quiera (claro que solo para iluminacion estatica). el efecto de oscurecer a los personajes y objetos lo he visto en algunos juegos de hay mi curiosidad, y como todavia no domino mucho el tema ya que estoy aprendiendo gracias al  motor hadd    " que berserker conoce bien (gracias por compartir vuestra sabiduria)"   me esta dando muchos dolores de cabeza.
mirare bien esos lik a ver si me sale de una vez que me tiene desesperado. Gracias por  vuestra ayuda.

Pogacha

Cita de: "BeRSeRKeR"
Cita de: "senior wapo"De doom 3 pasa que no usa lightmaps para nada.
Sí, es cierto, toda la iluminación es dinámica pero por lo que he podio ver (y ciertamente no estoy seguro al 100%), creo que el diffuse se consigue con proyección de texturas (no se hace el NdotL, por lo que he podido ver en el "uber-shader" que viene con Doom III), aunque el specular sí se calcula utilizando Blinn-Phong. De ahí que comentara lo de que la proyección de texturas es una opción. Pero vamos, como digo no pongo la mano en el fuego... :P

Saludos.
En realidad proyecta texturas para mantener compatibilidad con placas viejas donde no hay shaders, las texturas tienen una forma exponecial decresiente para que se respete que F(x) * F(y) * F(z) = 1/e^(K*(x^2+y^2+z^2)) donde K es una constante arbitraria.
Con lo que se utiliza al final un par de texturas Tex1(x,y) = e^-(K*(x^2)) * e^-(K*(y^2)) y Tex2(z) = e^-(K*(z^2))
Con esto logras que Tex1(x,y) * Tex2(z) = 1/e^(K*(x^2+y^2+z^2)).
Lo unico que tienes que hacer es proyectar Tex1 sobre el plano Z (a lo largo de x,y) y Tex2 sobre el vector Z y combinarlas mediante producto, lo cual anda en una geforce 2 o una Ati9200.
Ojo que la exponencial decreciente es una curva no muy decreciente por lo que tienes que modularla por otra curva que decrezca rapidamente al alejarse, el defecto en la lejania no se nota.

Saludos!

BeRSeRKeR

Cita de: "race"la verdad es que el efecto que necesito es oscurecer el jugador ( por ejemplo)  cuando  pase por una sombra.
Sigues teniendo la opción 3D que mencioné (grid o textura) y además tendrías la opción de precalcular los shadow volumes de la geometría estática y posteriormente utilizarlos al renderizar tus objetos dinámicos (Doom III también precalcula muchos shadow volumes de los mapas, aunque en este caso no sólo los utiliza para proyectar sombras sobre los objetos dinámicos sino también sobre el propio escenario). También tienes la opción de precalcular los "depth shadow maps" y posteriormente proyectar sobre los objetos dinámicos.

Cita de: "Pogacha"En realidad proyecta texturas para mantener compatibilidad con placas viejas donde no hay shaders
Sí, efectivamente utiliza un método similar al que se describe en el link que puse más arriba (el de Ron Frazier). Es curioso que incluso en "ET:QW" siguen utilizando ese sistema. Efectivamente si fisgoneas en la carpeta de recursos, hay una carpeta de luces en la que puedes ver una textura 2D para la atenuación en XY y otra 1D con la atenuación en Z.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Zaelsius

A mí algunos juegos siempre me dieron la impresión de usar volúmenes (los voxels que cita Bersi) para indicar zonas oscuras, como túneles o pasillos.

En otros casos, tratándose de terrenos con sombras precalculadas, parecían realizar un look-up de la luminosidad del texel más cercano a los pies del personaje para así iluminar a éste.

En ambos casos, solo se parecia calcular así la componente de ambiente en la ecuación de iluminación, que se combinaba con una o dos luces dinámicas por vértice para los efectos de hechizos, lámparas, etc. Todo esto en juegos relativamente viejos, claro.

Pogacha

Cita de: "BeRSeRKeR"Es curioso que incluso en "ET:QW" siguen utilizando ese sistema.
Es mas rapido que utilizar un shader en realidad ...

Pogacha

Volviendo al topic:
Otra forma es tener un sbsp que es un arbol binario donde en cada zona se detallan que luces la afectan.

Saludos!

fjfnaranjo

Hazlo con vertexligting, como en el primer AlienVSPredator  :P
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.