Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Matrices En Per Pixel Lightning

Iniciado por Haddd, 08 de Julio de 2004, 08:05:43 PM

« anterior - próximo »

Haddd

 En el ejemplo de Specular Bump que aparece en RenderMonkey, veo lo siguiente en el shader:


  //**--------------------------------------------
  //** Calculate the light vector in object space,
  //** and then transform it into texture space.
  //**--------------------------------------------
  float3 temp_light_position = mul( inv_view_matrix, light_position );
  float3 temp_light_vector = temp_light_position - vsInStruct.position;
  vsOutStruct.light_vector.x = dot( temp_light_vector, vsInStruct.tangent );
  vsOutStruct.light_vector.y = dot( temp_light_vector, vsInStruct.binormal );
  vsOutStruct.light_vector.z = dot( temp_light_vector, vsInStruct.normal );


¿No debería convertir la luz en WORLD  para poder compararla con la position del vértice que sí está en WORLD SPACE?

Es decir, no debería multiplicarla por WORLD matrix. Incluso en algunos sitios he visto que lo multiplican por la inversa de World. No lo puedo entender, porque estoy restando un vector en object space con otro en world space.

¿alguien puede explicármelo?

BeRSeRKeR

 Yo creo que debe ser un error en el comentario, ¿no?.

Porque mirando el código, con:

float3 temp_light_position = mul( inv_view_matrix, light_position );

lo que se está haciendo es pasar la luz a world space.

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

BeRSeRKeR

 Aunque pensándolo bien, no es un error de comentario ya que dice que calcula el vector luz en object space lo cual, tras la línea:

float3 temp_light_vector = temp_light_position - vsInStruct.position;

es correcto...

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

Haddd

 ¿entonces?  :huh:

¿inv_view_matrix=World Space?

BeRSeRKeR

 Claro, la inversa de la matriz de vista es la matriz de mundo.

Saludos.

PD: o mejor dicho, si multiplicas un vector en view-space por la inversa de la matriz de vista, te da como resultado el vector en world-space.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Haddd

 Veamos:

Object Space -> Matriz World -> World Space

World Space -> Matriz View -> Camera Space

Camera Space -> Matriz Projection -> Clip Space

Entiendo que Camera Space=Object Space si World Space=Indentidad

¿es así la reflexión?

HgH

 Sip..
Si te das cuenta, en el RenderMonkey no hay variables tipo WORLD_MATRIX, así que yo asumiría que la matriz  de mundo es una matriz indentidad . Así pues, pasas directamente de object space a camera space
gH _ TLOTB
..................
"No queremos estar obligados, por nada ni nadie, a pensar sólo en lo que es más comercial. Siempre seremos, antes que nada, programadores"

- Equipo de Zigurat -

Helius

 Una pregunta sobre ese mismo shader:

Resulta que estaba metiendo este shader en mi motor y veo que la luz difusa no quema el color base, es decir por mucho que se acerque a algo no lo ilumina más que a 1.0... ¿cómo se hace para que cuando la luz se acerque mucho a algo queme el color?? me explico?
Geardome Devlog
Tutoriales sobre DirectX 9, Nintendo DS y PSP.

Haddd

 El máximo de iluminación es 1. No hay nada que lave más blanco!!  B)

Lo que tu dices se llama High Dynamic Range. Para eso se utiliza un render target de coma flotante y te permite superar ese 1.

Helius

 Pues no se si me estaré equivocando...

Os acordais de una demo de sombras de ATI que salían esferas y baldosas rebotando en una habitación con shadow volumes?? Pues en esa demo la iluminación también es phong y a mi me da la impresión de que cuando se acercan mucho a las paredes quema el color.

¿Es eso o es el efecto del especular?

Lo que si está claro es que en mi opinión esas luces de aquella demo se ven distintas y más reales que la de este shader del Render Monkey, desde luego no tan bien como con HDR pero si mejor...  :blink:
Geardome Devlog
Tutoriales sobre DirectX 9, Nintendo DS y PSP.

Helius

 Efectivamente, más del 1.0 no se puede conseguir y me acabo de dar cuenta que en la demo da la sensación de quemado cuando se suman unas luces encima de otras, pero si pones una sóla luz en la escena no quema.
Geardome Devlog
Tutoriales sobre DirectX 9, Nintendo DS y PSP.






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.