Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Luces

Iniciado por Hechelion, 17 de Septiembre de 2011, 04:49:18 PM

« anterior - próximo »

Hechelion

Estuve jugando un poco para conseguir efectos de noche y día y luces, aunque no logré llegar a lo que quería, ya que no logré encontrar forma de trabajar a nivel del canal alpha (Por lo menos, no sin meterme a nivel de pixel, cosa que no probé) creo que logré un  efecto decente.
Las luces están generadas en tiempo de ejecución, con lo cual se pueden mover, variar intensidad, etc.

http://www.youtube.com/watch?v=WVLpiJaEIMo

[EX3]

Hey, mola el resultado :) Lo que no llego a ver es si estas jugando tambien con el canal specular de los sprites, que eso te podria ayudar a jugar con valores de iluminacion desde el color base de la textura hasta el blanco (justo al contrario del color, que va desde el negro hasta el color base):



Esto fue un experimento con una version del TLSA.Engine alla en 2008 (y en VB.NET), para que veas resultados de complementar el alpha con el specular :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Hechelion

#2
Pues me tendrías que dar algunos tips para conseguir algo como lo que tienes arriba, probé con el SetSpecularChanel, pero o no se apreciaba cambio, o tenía un cuadrado en vez de un circulo (Pese a que lo apliqué sobre una textura con canal Alpha) (Me basé en el ejemplo de iluminación que va con la librería).

Al final, uso una textura en escala de grises para la forma e intensidad de la luz (El blanco también se ve intenso, pero en el vídeo no lo usé, solo llegué hasta gris en el centro) y conformo la imagen usando el modo de opacidad en aditivo y manejando los colores directo sobre la función de dibujo.

[EX3]

#3
Bueno, bien es cierto que mi experimento entonces generaba efectos algo raros segun la posicion de la luz y la ubicacion de los vertices a la fuente de la misma (en un tileado mas pequeño quizas funciona mejor, pero antaño no logre buen rendimiento por lo mal programado del sistema de calculo).

Basicamente, trazaba rayos desde la fuente de luz hasta los vertices de cada tile de la escena y obtenia su distancia. Despues (mas o menos de memoria por que no tengo los fuentes a mano) se que calculaba, primero que el vertice estuviera dentro del rango de alcance de la fuente de luz, y despues calculaba un valor concreto para el alpha del vertice y otro valor, con menor intensidad (o alcance) para el specular.

El sistema no era muy optimo si metias muchas luces, pero mi idea era haber llegado a implementar algo para las luces fijas (y los sprites fijo que alcanzaban), para que se calcularan una sola vez sus valores y solo se calcularan los de los objetos moviles. La verdad, a ver si saco tiempo de nuevo por que es un invento que deje aparcado y me gustaria volver a jugar con ello para ver si lo pudiera portar quizas a XNA (aunque ahi me tocara meterme con shaders... y me dan alergia xD)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Manu343726

Hola

Yo experimenté un poco con la iluminación hace tiempo. http://www.youtube.com/watch?v=UirvZapCptg

Como dice [EX3], combinando el canal especular y el color por vértices puedes conseguir cosas bastante decentes. Con un modelo basado en tiles, como dx_lib32, no se me ocurre una manera de hacer la iluminación circular, aparte de hacer lo que tu hiciste, con una textura semitransparente, si no entendí mal.

Hechelion

La problemática, era anular la capa azul que simula la noche, la función para trabajar con el canal especular genera resultados cuadrados y trabajar con target_render para componer una imagen tampoco me resulto bien, consume mucho y al apilar varias luces, aunque usara canal alpha hacia que el aro de una luz se solapara sobre la otra.

Por eso es que al final opté por usar distintos modos de opacidad y color sobre una imagen en blanco y negro que representa la forma de la luz, la gracia es permite tener luces de diferentes formas a bajo costo, cosa que con el canal especular serían casi imposibles.

[EX3]

Cita de: Hechelion en 27 de Septiembre de 2011, 09:30:42 AM
La problemática, era anular la capa azul que simula la noche, la función para trabajar con el canal especular genera resultados cuadrados y trabajar con target_render para componer una imagen tampoco me resulto bien, consume mucho y al apilar varias luces, aunque usara canal alpha hacia que el aro de una luz se solapara sobre la otra.
Lo de que se solaparan dices que la ultima luz en renderizar pintaba sobre las otras? Yo eso lo solucionaba calculando la mezcla entre los vertices conjuntos y la nueva luz (en la captura se aprecia poco pero la luz roja se mezcla con la azul). Ese es uno de los detalles que quizas hacia mas lento (a parte mal programado) mi gestion de luces en aquella prueba. Vamos, no se si es esto lo que dices que te sucedia :-/

De todas formas, para la mayoria de los casos, yo tenderia a usar tu sistema de usar una textura de mascara y punto. Mas rapido y con ligeros resutlados, no solo mas rapidos, si no mas personalizados. Mi sistema esta "curioso" si quieres representar por ejemplo la iluminacion dinamica de una antorcha en un pasillo con distintas capas de profundidad de tiles (muros de fondo y techos en primer plano), y que se afecten por ejemplo ciertos tiles de una capa y no del resto, cosa que con una textura no podrias descartar :)

En verdad, la idea de las iluminacion specular la implemente no por iluminar los elementos de escena (tileados y fondos) si no objetos de la misma. Poder iluminar los laterales del sprite de tu personaje o un barril o caja segun la posicion de luces por ejemplo, y ahi no queda tan mal el resultado :)

Salu2...

P.D.: Dios, que ganas de terminar con el proyecto de XBLIG que tenemos entre manos para ponerme a ratos a jugar con este tema, me estais despertando la ganas de volver a experimentar con mi libreria xDDDDD
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Hechelion

#7
Cita de: [EX3] en 27 de Septiembre de 2011, 11:22:44 AM
Cita de: Hechelion en 27 de Septiembre de 2011, 09:30:42 AM
La problemática, era anular la capa azul que simula la noche, la función para trabajar con el canal especular genera resultados cuadrados y trabajar con target_render para componer una imagen tampoco me resulto bien, consume mucho y al apilar varias luces, aunque usara canal alpha hacia que el aro de una luz se solapara sobre la otra.
Lo de que se solaparan dices que la ultima luz en renderizar pintaba sobre las otras? Yo eso lo solucionaba calculando la mezcla entre los vertices conjuntos y la nueva luz (en la captura se aprecia poco pero la luz roja se mezcla con la azul). Ese es uno de los detalles que quizas hacia mas lento (a parte mal programado) mi gestion de luces en aquella prueba. Vamos, no se si es esto lo que dices que te sucedia :-/


Lo de solapar me pasó cuando intente crear iluminación creando una textura con render target.

Me explico, antes de llegar al vídeo, me puse a probar varias opciones:
La primera que se me ocurrió, era crear una textura azul o negra que tuviera hoyos en las partes iluminadas, para lo cual usé target render, pero por algún motivo, me iban mal el canal Alpha ahí. si intenta sumar 2 luces, en vez de sumarse 2 hoyos, el borde de uno (el de la imagen) pisaba al otro. Si solo usaba una luz, iba bien, pero para eso no tiene sentido el coste de equipo que significaba usar el target_render y la idea es tener luces en movimiento.

Edit: De paso, aviso que finalmente, con la versión 4 de VirtualBox y activada la aceleración 3D de la VM, está corriendo la librería, al fin voy a poder programar estando bajo linux, antes tenía que entrar a windows si quería usar la librería.

[EX3]

Ya comprendo pues :) Si, los RenderTargets (includo en XNA al menos a mi) me hacen cosas raras con el alpha a veces. Yo es que no usaba render targets por entonces (antaño iban fatal en aquella version de la libreria) y que no considere comodo su uso tampoco para hacer algo asi (veia mas optimo trabajar solo con el mapa de vertices del tileado).

Cita de: Hechelion en 27 de Septiembre de 2011, 12:12:05 PM
Edit: De paso, aviso que finalmente, con la versión 4 de VirtualBox y activada la aceleración 3D de la VM, está corriendo la librería, al fin voy a poder programar estando bajo linux, antes tenía que entrar a windows si quería usar la librería.
Si es que dx_lib32 tampoco pide tanto :P xD (yo pense que VBox ya soportaba aceleracion 3D desde hace tiempo bajo Linux ???)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Hechelion

Cita de: [EX3
Si es que dx_lib32 tampoco pide tanto :P xD (yo pense que VBox ya soportaba aceleracion 3D desde hace tiempo bajo Linux ???)

Salu2...

Lo hacia, pero por algún extraño motivo la librería no corría con esa aceleración.
Era de lo más raro, porque si corrían aplicaciones full 3D, incluso, la librería truevision 3D corría sin problema, pero tu librería no. Es recién ahora, con la última versión que se puede correr y esto es tanto en linux como en windows.






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.