Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Haddd en 08 de Julio de 2004, 08:05:43 PM

Título: Matrices En Per Pixel Lightning
Publicado por: Haddd en 08 de Julio de 2004, 08:05:43 PM
 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?
Título: Matrices En Per Pixel Lightning
Publicado por: BeRSeRKeR en 08 de Julio de 2004, 08:17:56 PM
 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.
Título: Matrices En Per Pixel Lightning
Publicado por: BeRSeRKeR en 08 de Julio de 2004, 08:22:00 PM
 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.
Título: Matrices En Per Pixel Lightning
Publicado por: Haddd en 08 de Julio de 2004, 10:25:36 PM
 ¿entonces?  :huh:

¿inv_view_matrix=World Space?
Título: Matrices En Per Pixel Lightning
Publicado por: BeRSeRKeR en 08 de Julio de 2004, 10:38:21 PM
 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.
Título: Matrices En Per Pixel Lightning
Publicado por: Haddd en 09 de Julio de 2004, 09:51:46 AM
 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?
Título: Matrices En Per Pixel Lightning
Publicado por: HgH en 09 de Julio de 2004, 11:09:43 AM
 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
Título: Matrices En Per Pixel Lightning
Publicado por: Helius en 09 de Julio de 2004, 11:37:17 AM
 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?
Título: Matrices En Per Pixel Lightning
Publicado por: Haddd en 09 de Julio de 2004, 12:12:33 PM
 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.
Título: Matrices En Per Pixel Lightning
Publicado por: Helius en 09 de Julio de 2004, 07:43:50 PM
 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:
Título: Matrices En Per Pixel Lightning
Publicado por: Helius en 09 de Julio de 2004, 10:46:24 PM
 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.