Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemillas Con Shaders

Iniciado por MChiz, 04 de Octubre de 2003, 08:34:31 PM

« anterior - próximo »

MChiz

 Hola a todos!

Una vez mas, recurro a vosotros.

Ultimamente me he estado metiendo poco a poco en la programacion de shaders, ya que es lo que hay que hacer :b He empezado programando cuatro cosillas, pero me he encontrado con un problema al programar una luz direccional en un pixel shader. Me funciona todo bien hasta que le paso un vector de luz con valores negativos. Parece que el Cg ( bajo GL ) me clampea los parametros que le paso ( de 0 a 1 ). Alguien se ha encontrado con este problema?

Muchas gracias.

Haddd

 Pues sí, te hace un clamp entre 0 y 1. Debe ser pq utilizas el D0(diffuse) o el D1(specular). Para poder pasar un valor negativo, primero tienes que pasarlo al rango 0-1 y luego en el pixel shader lo "reconviertes". Hay muchos ejemplos de esto. Lo que pasa es que si utilizas una coordenada de textura para pasar el valor del vector en lugar de un registro de color, este sí soporta valores negativos y no tendrás que hacer nada raro. Pero yo no utilizo CG, lo siento, aunque la teoría es como te cuento.

BeRSeRKeR

 Creo que MChiz le pasa el vector luz al fragment shader a través de un registro constante así que es bastante raro. De todas formas, ya me enseñaste el código una vez y aparentemente era correcto. ¿Podrías poner un screenshot del problema?. Tal vez podría ser un bug de Cg...no es algo que se pueda descartar :D

Por otra parte llegará un momento en que el vector luz lo pases a través de un registro de coordenadas de textura ya que si haces dot3 bump-mapping, lo pasarás a tangent-space en el vertex shader. En ese momento supongo que dejará de dar problemas...

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

MChiz

 Si, le paso un uniform al pixel shader. Es muy extraño... el caso es que hice iluminacion por vertice y todo va bien... yo tambien he pensado que sea un bug del Cg, pero no lo quiero creer... seguro que es fallo mio. Pues mañana intentare pasarle el vector de luz al pixel shader a traves de un set de coordenadas de textura, a ver que tal...

Intentare poner un screenshot en breve, aunque no creo que aclare mucho las cosas : (

Muchisimas gracias a los dos!!

BeRSeRKeR

 Si quiere puedes probar a escribir en el foro de CgShaders.org. Por ahí, a parte de gente bastante buena en el tema, se pasa gente de nVidia. Concretamente uno cuyo nick es "Jallen" se pasa muy a menudo, otras veces también se ha pasado por ahí el mismísimo Mark J. Kilgard :)

Tal vez te solucionen la papeleta pero vamos, como te digo, al final acabarás pasandole al fragment shader el vector luz desde el vertex shader a través de un registro de coordenadas de textura.

Saludos.

PD: ah bueno, también asegúrate de tener la última versión del compilador de Cg ;)
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

MChiz

 Hola!

Al fin lo he logrado! Lo he hecho pasandole el vector de luz al pixel shader mediante el vertex shader. Aunque eso no ha sido todo... en el pixel shader hacia la negacion del vector de luz, para que represente 'de donde viene la luz' y eso me iba mal. He hecho la negacion en el vertex shader ( a la hora de pasarselo como parametro al pixel shader ) y me ha funcionado!! Estoy un poco perplejo, la verdad... esto me da que pensar que no se le pueden pasar valores negativos al pixel shader ( como uniform ), pero me parece DEMASIADO raro. Y la otra es esta negacion de la que os hablo... esto de los shaders es muy muy delicado... un coñazo, vamos ( o no se que puñetas hare mal ).

Por otro lado, gracias por lo de CgShaders.org : ) Si me veo con animos de escribir en ingles ( soy mu malo ) lo hare.

Muchas gracias de nuevo a ambos.

Un saludote!!

MChiz

 grmblmfl... retiro lo dicho... esto es un asco xPP

MChiz

 Vaya... ahora parece que si lo he conseguido. No entiendo el porque... al final le estoy pasando la direccion de la luz desde el vertex shader al pixel shader mediante un set de coordenadas de textura. Lo que he añadido es un normalization cube map ( otro mas ) para normalizar el vector de luz ( que se lo doy normalizado y encima, al ser una luz direccional, SIEMPRE es el mismo... joer, que rabia. Eso es un uniform como una casa! ). Alguien tiene idea del porque de todo esto?

Muchas gracias.

BeRSeRKeR

 Ahora mismo es constante porque no estás haciendo dot3 bump mapping, en el momento que lo hagas, ese vector ya no volverá a ser constante para cada fragmento, o al menos no para aquellos que no compartan el mismo tangent-space. Ahora, si lo que pretendes es quedarte en vertex lighting; que en ciertos casos puede venir bien y te ahorras cálculos, ese vector efectivamente permanece constante (siempre hablando de luces direccionales, claro).

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

MChiz

 Evidentemente que en la mayoria de casos este vector NO es constante, pero como tu bien dices, a veces interesa no llegar a tanto nivel ( Dot3 ). En fin, tampoco creo que se notase MUCHO si lo hubiese podido hacer constante en el pixel shader.
Una ultima preguntilla: Lo del segundo normalization cube map, es necesario en Dot3, verdad? Para hacer precisamente lo que yo he hecho: normalizar el vector de luz. Pero si es asi... voy a necesitar un tercer normalization cube map para poder hacer el reflejo especular?!?!  :blink:

Gracias de nuevo!!

PD: No estoy con vertex lighting. Estoy con pixel lighting, pero sin bump.

Haddd

 Yo de ti me olvidaba de los normalization map. Con los shaders 2.0 ya puedes normalizar!!

MChiz

 Si, la verdad es que si... estoy pensando en comprarme una tarjeta que soporte shaders 2.0, pero es que siempre he sido de hacer las cosas para que requieran poquillo.

Que tarjeta me recomendais? Me iba a pillar una GForce FX 5200, pero viendo lo que deciis por aqui de las ATI, no lo tengo tan claro... alguien me podria decir que tal va cada una? Si las habeis probado, mejor.

La putailla es que una GForce 4 TI tira mucho mas que una FX 5200 ( y supongo que su equivalente de ATI ). Que le vamos a hacer...

Saludoteeees!!

NeLo

 La 5600 rinde más que la 9600, pero en uso intensivo de shaders, por las comparativas y benchmarks que he visto, parece ser una patata xDD

Así que mejor ATI.

Saludos.
Drowning deep in my sea of loathing






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.