Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Luces, Proyectores Y Effect

Iniciado por Haddd, 09 de Agosto de 2004, 09:01:41 PM

« anterior - próximo »

Haddd

 

2 luces, una con un proyector y otra sin proyector.

El GRAN problema es que no puedes meter un if en el effecto del pixel shader. Por tanto hay que crear tantas técnicas como posibilidades pueda haber. Esto además te obliga a la siguiente lógica:

Para cada luz:

SetTecnique
BeginEffect
Pass
  Render objeto
EndPass
EndEffect

El empreño es que tengo que hacer un BeginEffect para cada luz, porque si no , no puedo cambiar de técnica, y algunas luces tienes proyectores y otras no.

¿ideas geniales? (no vale usar shaders 3.0!!)


DraKKaR

 Me gusta el aspecto que dan los pixel shaders. Aunque esa pared parede un poco de plastico, o una pared mojada. Que sepas que dentro de poco te haré la competencia con esto de los shaders XD.

Lo del problema que comentas, ¿no es algo inherente a los PS<3? Como no hay ifs, ni posibilidad de elegir una rama de ejecución u otra, tienes que currarte varios programas que te resuelvan toda las situaciones.

Lo único que se me ocurre para que no tengas que limitarte a una luz/objeto a la vez es crear más programas que usen 2, 3 o 4 luces a la vez.

Umm.. no se si me he rallao XD.

Haddd

 A ver si te animas con los shaders!! (ole)  

fiero

 Por lo que cuentas, con los shaders <3.0 hay que hacer algo parecido a lo que hago yo con mi rutina de render por soft. Construyo el código de render en tiempo real, según las caracteristicas del objeto que se renderiza.

Yo tambien tengo ganas de tener un ordenador güeno de esos y trastear con shaders :)

un saludo
www.videopanoramas.com Videopanoramas 3D player

DraKKaR

 Por cierto fiero, me gustaría saber en qué estado está tu motor de render por software. Me gustaría mucho hacer un renderer para mi motor que usara tu creación. ¿Como lo ves?

fiero

 uf, pues eso es dificil, porque digamos que el motor no es mio del todo. Me paso el dia programando en él, parte como trabajo y parte como hobby, así que no puedo liberarlo, ni siquiera como libreria.

un saludo
www.videopanoramas.com Videopanoramas 3D player

Pogacha

 ¿ No puedes agrupar los que si tienen proyectores, haces las cosillas y luego agrupas las sin proyectores ?.

SetTecnique
BeginEffect
for every-proyector-light
Pass
Render objeto
EndPass
next light
EndEffect

SetTecnique
BeginEffect
for every-no-proyector-light
Pass
Render objeto
EndPass
next light
EndEffect

Haddd

 Sí, pero es que también tengo que incluir los que tienen bum map y los que tienen environtment map...

fiero

 ¿Cual es el coste en tiempo en cambiar de shader? ¿Se puede construir el shader en tiempo de ejecución según el grupo de objetos que vayas a renderizar en cada momento?

Si el tiempo en cambiar de shader es despreciable yo creo que esa es la mejor opción, construirlo según si usas bump o no, si usas enviroment o no, proyección o no, ... No sé como funcionan los ps 3.0, pero por mi experiencia en el render soft, me salia muchisimo más rentable construir el código al inicio de la función que llenar el bucle interno de "ifs". Con los pixel shaders 3.0 ¿se ejecutan los "if" del shader en cada pixel?
www.videopanoramas.com Videopanoramas 3D player

Haddd

 No puedo ir haciendo sumas de fragmentos y compilar, es más rápido tener versiones de shaders, porque tengo que tener separado el pixel shader del vertex shader, y dificulta bastante la opción de ir compilando.

Hombre, lo de que en un if se ralentiza, es cierto, pero también ralentiza en la CPU y no por eso dejas de hacer ifs.  

DraKKaR

 Creo que fiero se refiere a que es mejor ejecutar 10 ifs para determinar que fragmentos de shader hay que aplicar a un objeto que ejecutar un shader genérico que esté lleno de ifs, ya que los ifs del PS se ejecutarán por cada pixel. Con lo que el número de ifs se dispara.

Espero no estar metiendo la pata...

fiero

 si, a eso exactamente me refiero Drakkar. Aunque solo es en teoria, quien sabe como funcionan los shaders por dentro...

un saludo
www.videopanoramas.com Videopanoramas 3D player

Haddd

 Los ifs en realidad no se ejecutan, sino que se compilan con y sin ifs. Es lo que se conoce como uniform variables. Por ejemplo, en un shader yo tengo

if
.....

else

.....

Pues el compilador de shaders me generará 2 shaders diferentes. Así que por velocidad no será.!!






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.