Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Prueba De Lightmaps Y Consola En Sandra Engine

Iniciado por DraKKaR, 24 de Enero de 2005, 04:40:19 AM

« anterior - próximo »

DraKKaR

 Buenas. Acabo de subir en la sección de descargas de la página del motor una pequeña prueba de lightmaps (los de las fotos que enseñé aquella vez), pero esta vez corrriendo en tiempo real para que podais visualizarlos con más detalle. Además he implementado una pequeña consola con capacidad de registrar y ejecutar comandos.

http://sandra.sf.net


Una vez arrancada la aplicación, para mostrar la consola pulsad TAB. Una vez mostrada opdreis insertar comandos. Para obtener una lista de comandos registrados está el comando 'commands'. Existe también el comando 'quit', que provoca la salida de la aplicación.

Además, el renderer de lightmaps registra un comando especializado en lightmaps: el comando 'lmmode'. Este comando recibe una serie de parámetros que nos permitirán alterar la forma en la que se mezclan lso lightmaps con la textura base. A continuación una lista órdenes:

- lmmode onlylm. Hace que solo se renderizen los lightmaps. Es útil para observarlos con detenimiento y sacar fallos o imperfecciones.

- lmmode onlybase. Renderiza únicamente la geometría base sin aplicarle ningún tipo de lightmaps.

- lmmode all. Modo normal, textura base + lightmaps.

- lmmode scale 2. El método tradicional de mezclar la geometría abse con los lightmaps es mediante la modulación (multiplicación) de ambas texturas. El problema de esto es que al multiplicar el valor de máximo brillo (1.0) sobre la textura, queda como resultado el color de la textura base tal cual. Mediante esta orden le decimos al renderer que el resultado de esta multiplicación (lightmap*textura) la multiplique por 2. Después el resultado se "clampeará" al rango [0,1]. De esta manera conseguimos una saturación del color que sirve para dar más brillo a las superficies que realmente deben brillar.

De esta forma, una luz muy brillante podrá incluso "comerse" el color de la textura base, simulando que sobre ésta se le está aplicando una luz muy potente. Es parámetro 'scale' acepta como parámetros los valores [1,2 y 4] como factores de multiplicación. Esto es debido a que NO uso pixel shaders y las posibilidades (sin usar más de las 2 texturas obligatorias (lightmap+base)) son escasas.


- lmmode combine interp. Esta órden sirve para activar un método alternativo de combinar los lightmaps con la textura base: en vez de usar una multiplicación se usa nua interpolación de los colores. La utiildad de este método es bastante discutible y se ha implementado más que nada por experimentar. Para volver al método de "combinado" normal hay que usar la orden: "lmmode combine mod".

- lmmode interp 0.3. Este comando sirve para especificar el grado de interpolación entre las 2 texturas (lightmap y textura base) donde el valor que se le pasa (0.3 en este caso es utiilzado para calcular el color resultante utilizando una interoplación lineal:    LM*valor  +  BASETEX*(1-valor) .


Esto es todo. Perdonad de antemano por el tamaño del ZIP pero las DLLs del motor ya ocupan unos megas.
Espero vuestras opiniones.

Lord Trancos 2

 Mola mucho mas ver los escenarios que las imagenes que pusiste el otro dia  (ole)

Comentarios:
- "Blurear" los lightmaps un poco podria evitar esos bordes tan dentados.
- Yo por cada texel que queria computar lanzaba 5 rayos; uno desde el centro y otros 4 desde las esquinas. Eso me permitia suavizar un poco los bordes. Ya que si llegaban 4 de los 5 rayos; habia una sombra muy tenue, y si llegaba solo 1 rayo de los 5; la sombra era practicamente completa. No se si me explico...  :P  Lo bueno del asunto es que no era 5 veces mas lento; pq algunos de los rayos de las esquinas de un vertice servian para sus vertices vecinos.

Con esas dos cosas creo que mejorarán bastante los bordes de las sombras ;)

El resto muy chulo  (ole)

Me ha gustado especialmente lo de "lmmode scale 2"
Usas OpenGL, no? Me puedes decir exactamente como lo has hecho? ;) Soy bastante novato en OpenGL
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

AgeR

 Esos bordes has de arreglarlos, como bien dice Trancos.
En fin, ya sabes que opino que tu motor es la caña y que con más ejemplos y tutoriales la gente empezaría a usarlo, no tiene nada que envidiar a la mayoría de motores opensource.

Por cierto, y aunque no venga a cuento, el movimiento me ha parecido un tanto extraño, acostumbrado al strafe y avance/retroceso con el teclado y el resto con el ratón.

Offtopic pa Drakkar : sabes algo de la gente esta de la uji?  :P  

Mars Attacks

 Joer, cómo te lo curras tú también. Me dais asco, yo sin saber hacer ná de eso (asco)

Jejeje, lo único que no me gusta es que los comandos sean en inglés (y de lo de "clampear" ya ni te cuento)  :P

Muy creativa esa solución, ¿es tuya o la has encontrado en un canastito delante de tu puerta?

DraKKaR

 El hecho de que salgan los bordes tan "rectos" es por culpa de usar fuentes de luz puntuales en lugar de luces de área. Por suerte el raytracer que uso soporta luces de área (esféricas), haré pruebas con esto para conseguir sombras más realistas. No me gusta demasiado esa técnica que dices de 'blurrear'el lightmap para simular este método, por 3 razones:

- No es lamanerá física de simular el fenómeno.Y aquí "no importa" la velocidad de cálculo ya que el render es offline (precalculado).
- No quiero blurrear la imagen del lightmap por la forma en que pueda influir sobre los triángulos empaquetados.
- De esa manera no consigues un efecto interesante: la sombra se hace más borrosa cuando más alejada esté del objeto.

Tampoco me gusta lo de lanzar 5 rayos a distintas partes del texel. Todos los rayos deben ir al centro del texel, lo que hay que variar es la posición de la fuente de luz. Uno de los problemas que tenia antes es que salían muchos "artefactos" debido a que lanzaba los rayos a una esquina del texel y no al centro.

Espero tener pronto imágenes desombras más realistas con el método de usar las fuentes de luz de área.



Lo del  'lmmode scale 2' es bastante fácil de conseguir. Uso una extensión de OpenGL llamaba ARB_texture_env_combine. Esta extensión permite combinar 2 texturas de nuevas formas que no sean un módulo o una suma. Permite combinar 2 texturas como suma, suma con signo, resta, multiplicación, interpolación...  Además, una posibilidad eque ofrece la extensión es que cuando las texturas se hayan combinado,multiplicar el resultado por uno de estos valores: 1,2 o 4. Esto es lo que hago para saturar los colores,combino las 2 texturas (lightmap+base) con una modulación típica perole apñlico una escala de 2.

El problema de esto es que los brillos son demasiado exagerados y secomen mucho la textura base. Me hubiera gustado más multiplicar el resultado por 1.2 o similar, para que fuera más realista. De todas formas no uso pixel shaders y no queria añadir mayor complejidad al render de los lightmaps (hubiera podido conseguir este efecto añadiendo una tercera textura a combinar).

DraKKaR

 Ager parece que que hemos posteao casi a la vez.  Gracias por tus buenas opiniones acerca de mi motor, lo malo es hacer que la gente lo use, ya que el tiempo que tengo para esto prefiero dedicarloa programar, y no a escribir tutoriales. De todas formas he escrito 2 tutoriales (y medio) y no creo que ni siquiera nadie los haya hecho. Pero si viera que la gente se anima seguro que me pondría a hacer más tutoriales.

El problema es que el motor no está hecho para que sea mio, sino para que todo el mundo que quiera participe, una persona sola avanza muy a trompicones. Tres personas avanzan mucho más rápido y aprenden entre sí, que también es interesante.  Desgraciadamente no ha habido nadie que se haya animado.

De todas formas no programo el motor para que sea el mas potente ni elmás utilizado, sino como banco de pruebas para mis frikismos. Si no, no estaría programando lightmaps sino pixel shaders XD. De todas formas cualquier es libre de implementarle lo que quierapara convertirlo en lo que sea, que apra algo es Open Source.

[offtopic]Sobre lo de la gente de la UJI: no acabo de fiarme mucho por la inactividad tan prolongada del juego. Por mi parte hasta que no vea que la gente vuelve a animarse y a participar no volveré a meterme. Ví a un par de ellos por la universidad y lo unico que me dijeron es ke andaban muy liaos con los examenes.


Mars, cada uno sabe de lo que sabe, yo no te llego ni a los talones sobre modelado en blender XD. Perdona por lod el ingles, pero todo el codigo fuente está en ingles, y no queria desentonar demasiado. ¿Como es clampear en castellano? XD.

La solución se me ocurrió el otro dia leyendo unos papers de NVIDIA. Salian unas imagenes de renders con lightmapping, ,me fijé que akellas imágenes también adolecian del problema de los brillos, y despues de estar X tiempo mirandola embobado se me ocurrió XD.




Mars Attacks

 Es que ni siquiera sé qué forlayos (©® Fuckowsky) quieres decir con eso. Supongo que te refieres a reescalar el valor resultante al rango [0,1]. Puessss... yo lo diría "reescalar el valor resultante al rango [0,1]" XD

En fin, a ver cuándo dejamos de hacer el idiota y nos montamos una empresa de algo en Castellón, que semos bastantes. Una panadería, por ejemplo, estaría bien  B)

(Ains, si yo tuviera el dominio que veo en 3DPowa'... pero oye, tengo sepias monas XD).

Lo de los tutoriales, no te apures. Cuando estés hasta los huevos de programar cosas, entonces ponte a documentar ;)
O haz lo mismo que le propuse a Jandro para la documentación de Yafray. Te enchufas la grabadora de sonido y vas comentando a medida que programas qué estás haciendo y para qué sirve. Audio-tutoriales, no pierdes tiempo y la gente lo escucha de primera mano. Luego, si alguien se anima, que lo pase a texto.

Pogacha

 El critico compulsivo dice: (solo con la intencion de ayudar)
La verdad es que debo destacar lo prolijo de los bordes y uniones de las texturas (supongo gracias al empaquetado)  (ole) , pero noto los "artefactos" (no me gusta esta palabra asi usada) comunes por no usar CGS, todas las mejoras ya las hablamos en un hilo anterior y ya las conocias, lo que si en verdad me disturbo fue el bajo framerate  30 fps en un GF2 cuando debiera estar viendo 100 por lo menos, es un problema de compatibilidad con esta computadora? o hay realmente un problema ....  :blink:
Yo pensaria en cambiar los controles del teclado ... ;)
(solo con la intencion de ayudar)
Saludos.

Pogacha

 La verdad es que clamp es "saturar" o "limitar" o "recortar" el valor entre por ejemplo [0, D] con la funcion:
Citarf_0D(x) = { 0 si x<0, D si x>D y x si 0 <= x <= D  }

Digo ejemplo pues puede ser [3.2, 50] pero se usa generalemnte [0,1]

Esta funcion es extendible multidimencionalmente de la forma

Citar
V =  ( y1, y2, ..., yn)
f_0D( V ) = ( f_0D(y1), f_0D(y1), ... f_0D(yn) )

Tambien habria que buscar el vocablo a la funcion wrap la cual es:
Citarf_0D(x) = {  ((x-0)/D - Piso( (x-0) /D)) * D + 0 }

Esta tambien es extendible multidimencionalmente de forma analoga a la anterior.

lease "f_0D" como funcion f parametro [0, D].

En muchos años no he encontrado traducción  :(.

Saludos

DraKKaR

 Pogacha, es muy extraño lo que comentas sobre ese bajo framerate.  Yo también tengo una GF2 y no me baja de 100 FPS, con media de 150. Mi ordenador tampoco está a la última: Athlon1400 / 256 MB / GeForce2GTS.
Podrías postear aquí el resultado del LOG (en el fichero sandralog.html (vaya, no habia comentado que también he implementado un sistema de logging)). Al menos hasta le línea que pone "Renderer created successful". Si no quieres ensuciar el post este puedes postear el LOG completo en el foro de la página del motor apra indagar en el problema.

También estaría bien saber las características completas de tu equipo.

Es cierto que se ven algunos fallos (como en algunas cajas del escenario cajas.sgemap), hay tantas cosas por mejorar que es el nunca acabar XD.


¿Que tienen de malo esos controles?  :blink:


Mars, lo siento por la panaderia (me encanta levantarme a las 5 de la mañana para ir a currar XD) pero lo mio no va hacia la creación de empresas, sino hacia la universidad...

Me gustaría tener una de tus sepias para hacer pruebecillas con el motor

;)

Zaelsius

Cita de: "DraKKaR"Mi ordenador tampoco está a la última: Athlon1400 / 256 MB / GeForce2GTS.
Es que GeForce 2 GTS != GeForce 2 MX  :rolleyes:


PD: Yo wrap lo traduzco como "envoltorio"

Pogacha

 Log posteado.

CitarPD: Yo wrap lo traduzco como "envoltorio"
No me suena ... , lo podrias explicar.

Mars Attacks

 Claro, sólo díme a dónde te las envío :)

DraKKaR

 Gracias Pogacha, te contesto en los foros de la página del motor.

Mars, puedes enviarmelo a jesus.gumbauARROBAanubis.uji.es

Si tienes otros modelos con bastantes polígonos pues envíamelos también  ;)

Mars Attacks

 Enviado está, espero que anubis no me haga alguna guarrada. Si no te llega, avisa.
No tengo nada más mapeado, sorry  :rolleyes:  






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.