Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ejemplo De Per Pixel Con 2 Luces

Iniciado por Haddd, 29 de Diciembre de 2003, 01:41:24 PM

« anterior - próximo »

Haddd

 He subido a Ese ejemplo de luces

un ejemplo de una esfera a la que le afectan 2 luces. El sistema que utilizo es el de multipass, de esta forma se soporta un nº ilimitado de luces. Pulsando 1 dejamos sólo una luz activa, y pulsando 2 activamos las dos. Fijaos en la bajada de FPS al tener las dos luces activadas. Hace tiempo lei un doc, creo que en ATI, que decía que el multipass era una buena opción porque si no se veia el objeto, el 2º paso no se ejecutaba. Bien, tiene toda su lógica, pero con el ejemplo que os pongo, si se ve todo el objeto, es muy costoso. Esto es un poco.. :angry:  porqué los shaders 2.0 no se puede decir que tengan mucho espacio para las constantes.

Bueno, este ejemplo SOLO funciona con shaders 2.0. Incluye el archivo de effect con una explicación de como funciona el shader, aunque es bastante trivial.

Ya me contareis. A mi me funciona a unos 50 fps con dos luces y 93 FPS con una luz sin mover para nada la cámara.

BeRSeRKeR

 Me va a unos 56 fps con las dos luces y a 97 fps con una sóla luz.

Y con respecto al render. No sé si esto será correcto para una escena "real" pero en RenderMonkey hice una prueba, también con una esfera. Y lo que hacía era.

Primero renderizar la esfera con luz ambiente y con el test y la escritura del depth buffer activada. Sin texturas ni alpha blending.

Después, por cada luz, renderizaba la esfera con su textura, los cálculos de iluminación per-pixel, etc. Pero desactivaba la escritura en el depth-buffer y activaba el test con LESSEQUAL. Evidentemente, activaba el blending para ir acumulando la luz. Por ahí leí una vez que lo óptimo es activar el depth test con EQUAL, pero probé y dejaba de funcionar correctamente.

Así, con 3 luces y poniéndolo más o menos en la misma posición que tú, me va a unos 60 fps. Claro que también dependerá de cómo renderice RenderMonkey los objetos, etc.

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

Haddd

 El problema del Equal es que por ejemplo ATI tiene una tecnología de ZBuffer, ahora no recuerdo el nombre, que comprimen muchísimo la información, PERO eso provoca que el EQUAL no funcione correctamente, por lo que recomiendan(gracisiolla esa palabreja) que no se utilice EQUAL.

Lo que no probaba era eliminando la escritura de Z a partir de la segunda pasada. Pero lo acabo de probar y no se gana nada ( lo cual hace pensar que está muy optimizado lo del Z Buffer!!)


DraKKaR

 No soy un experto en vertex shaders, pero no concibo porque necesitas hacer una pasada por cada luz, y no hacerlo todo de una sola pasada. Máxime teniendo los bucles de los pixel shaders 2.0.

Haddd

 Pues porque para cada luz necesitaría pasarle al pixel shader un light vector y una atenuación. Si cada uno de estos me ocupa una coordenada de textura y sólo tengo 8, imagínate!!

Y siento decirque que con pixel shaders 2.0 NO se pueden hacer bucles.

BeRSeRKeR

 Una posible explicación sería que a la hora de hacer multipass shadow volumes se hace de esa forma así que aprovechas y das una pasada más para renderizar con la luz activada pero desactivando la escritura en el depth buffer.

Puede que en escenas simples no se note, pero en escenas muy complejas con mucho "over-drawing", sí se note un incremento en el rendimiento.

Este es el sistema que utiliza Doom3, por ejemplo.

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

BeRSeRKeR

Cita de: "Haddd"Y siento decirque que con pixel shaders 2.0 NO se pueden hacer bucles.
Creo que no se pueden hacer bucles "dinámicos", es decir, bucles en los que no se sabe el número de iteraciones. Eso es porque los pixel shaders, actualmente, lo que hacen es generar el bloque de instrucciones que hay dentro del bucle tantas veces como iteraciones hayan. O sea que el número de iteraciones debe ser constante.

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

MChiz

 Hola!
Yo cuando hice mis pruebas utilice el modo EQUAL y no tuve ningun problema.
Tengo una GeForce 4 TI 4200. No he probado con Pixel Shaders 2.0
Cuando me compre la GeForce 5700 te digo algo del ejemplo : )
talogoo!!

Minos

 Me funciona a la perfeccion:

GeForce FX 5600

25 fps 2 luces
55 fps 1 luz

El ordenador estaba bastante cargado,lleva 5 dias sin apagarse  :rolleyes:  

BeRSeRKeR

Cita de: "Minos"El ordenador estaba bastante cargado,lleva 5 dias sin apagarse  :rolleyes:
Ahora que lo dices, el mio lleva encendido casi 3 semanas y no he reiniciado una sóla vez :D

Por cierto, Minos, ¿qué procesador tienes?.

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

_Grey

 Vale, yo tampoco domino los shaders.....   :rolleyes: , pero los datos de la luz que comentas, no seria mas "normal" que estan en las constantes del shader, por mucho que no sean muchas?

BeRSeRKeR

Cita de: "_Grey"Vale, yo tampoco domino los shaders.....   :rolleyes: , pero los datos de la luz que comentas, no seria mas "normal" que estan en las constantes del shader, por mucho que no sean muchas?
Hay cosas que no puedes pasar a través de constantes.

Por ejemplo, el vector "Light", el vector "Half-Way" o  "View" dependiendo de cómo calcules el specular, etc, son datos que se los tienes que pasar al pixel shader a través del vertex shader utilizando los registros de coordenadas de textura. En ningún caso pueden ser constantes ya que varían dependiendo del vértice procesado.

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

Minos

 Pues de procesador un P4 2,6, 800mhz de bus.
Y de ram 512 ddr.


saludos

BeRSeRKeR

 Pues que raro, a mi con un P4 1,4 Ghz y 256 MB de RAM, me tira a 56 fps con las dos luces y a 97 fps con una sóla luz...

¿Tanta diferencia hay entre la Radeon 9600 (que no es la Pro) y la GeForceFX 5600?

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

Minos

 Pues la verdad me extraña tanto la diferencia, lo mas seguro que sea por todo lo que tiene ejecutandose a la vaz (supongo) y que no estan los ultimos drivers puestos.
Mas tarde reinicio, quito todo e instalo los ultimos drivers y te digo, que ahora me esta bajando el fallout 2 a 18 kbps y es una pena quitarlo  :D

PD: Interplay esta haciendo Fallout 3!!! (noticia de hace 4 dias en meristation)






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.