ILUMINACION DIRECTX

15
Tipos de iluminación Hay tres tipos de iluminación que se pueden utilizar para aproximar la luz del mundo real. Se llaman iluminación difusa, iluminación ambiental y la iluminación especular. ILUMINACIÓN DIFUSA es la luz que cae directamente a más o menos sobre una superficie. Si mantiene su mano en una habitación con una fuente de luz, verás que un lado de tu mano está encendida, mientras que la otra parte no lo es. Ese lado de su mano se enciende con lo que se llama difusa luz. Tanto la difusa y componentes especulares requieren luces que se activan en la escena. El color difuso se emite uniformemente a través de la superficie de un objeto. La intensidad de la luz que contribuye al color del material se determina por el ángulo de la superficie normal y el vector de la luz. Luz difusa i:

description

Recopilación de Los Tipos de Iluminación que existen en Directx y ejemplos de como se visualizan en el renderizado

Transcript of ILUMINACION DIRECTX

Page 1: ILUMINACION DIRECTX

Tipos de iluminaciónHay tres tipos de iluminación que se pueden utilizar para aproximar la luz del mundo real. Se llaman iluminación difusa, iluminación ambiental y la iluminación especular.

ILUMINACIÓN DIFUSA es la luz que cae directamente a más o menos sobre una superficie. Si mantiene su mano en una habitación con una fuente de luz, verás que un lado de tu mano está encendida, mientras que la otra parte no lo es. Ese lado de su mano se enciende con lo que se llama difusa luz. Tanto la difusa y componentes especulares requieren luces que se activan en la escena. El color difuso se emite uniformemente a través de la superficie de un objeto. La intensidad de la luz que contribuye al color del material se determina por el ángulo de la superficie normal y el vector de la luz.

Luz difusa

i:

 es el punto en el espacio 3D que queremos sombra,

 es la normal de la superficie en el punto que queremos sombra,

 es la posición de la luz en el espacio 3D,

 es la contribución difusa de la fuente de luz,

Page 2: ILUMINACION DIRECTX

 es el vector de dirección normalizada desde el punto queremos

sombra a la fuente de luz,La siguiente imagen muestra la escena renderizada con solamente la iluminación difusa.

La iluminación ambiental se compone de luz que está en todas partes. En términos generales, es bastante oscuro (aunque no totalmente oscuro). Cuando se mantiene la mano en esa habitación con una fuente de luz, el lado oscuro de su mano se ambiently iluminado, y la luz que se refleja no es referido como ambiente de luz.

Page 3: ILUMINACION DIRECTX

Luz Ambiental

Iluminación especular es a menudo referido como resaltado especular o, incluso más comúnmente, la reflexión . (Wow, gran palabra, ¿eh?) Cuando la luz se refleja en un objeto, tenedores estaban la mayor parte de la luz irá en una dirección específica (en lugar de la dispersión en todas partes por igual). El resultado es que cada objeto tiene un poco de brillo en él que viene de la fuente de luz.

Especular Luz

Page 4: ILUMINACION DIRECTX

La imagen siguiente muestra los aspectos más destacados del especulares sobre la esfera en diversos poderes especulares.

VA UN VIDEO AKI…DEJA UNA DIAPOSITIVA XQ LLEVO EL VIDEO EN UN PENDRIVE Y AHÍ LO PONGO EN LA U.

Tipos de fuentes de luzCon el fin de producir los tres tipos de luz, hay varios tipos de luces (o fuentes de luz) que emanan luz. Los diversos tipos de fuentes de luz, cada uno que emanan los tipos y colores de luz específicos y luego combinados con otras fuentes de luz, pueden producir una escena de iluminación realista. Bueno, tal vez no es como la luz de la primera imagen de arriba.

Luces.Similares a los materiales, luces también definen un conjunto de propiedades que determinan

Page 5: ILUMINACION DIRECTX

el resultado final de la escena. Una vez más, las luces pueden tener un número arbitrario de argumentos en función de su modelo de iluminación.

Direct3D ofrece cuatro tipos diferentes de luz, ambiente, direccional, punto y punto. Las luces se añaden a la escena utilizando los Direct3D device interfaces.

Las luces pueden ser de cualquier color que desee. Luces y materiales trabajan juntos por lo que también se debe tomar en cuenta los materiales asociados al momento de aplicar la luz. El material se puede configurar para cada objeto 3D, se dibuja y determina cómo se encenderá un objeto. Por ejemplo tienes una luz blanca y un material objeto es verde aparecerá verde tan brillante. Si la luz es de color rojo que va a dar como resultado una iluminación mezcla de rojo en verde.

Luz Ambiental (Ambient Light)

La luz ambiental representa la luz de fondo en una escena. A la luz del mundo real rebota en muchos objetos y crea un nivel bajo la luz por lo que incluso la geometría de espaldas a cualquier luz direccional es todavía parcial. La luz ambiental se aplica a todas las superficies, independientemente de la dirección que se enfrentan. Para establecer el nivel de luz ambiental en Direct3D utiliza uno la siguiente línea de código.

gD3dDevice->SetRenderState( D3DRS_AMBIENT, D3DCOLOR_XRGB(50,50,50) );

El último valor es un D3DCOLOR es un valor para establecer el color de la luz ambiental. Lo anterior establece un bajo fondo de luz blanca. Podemos determinar el color utilizando un selector de colores que nos permita generar los mismos mediante los valores RGB. Como podemos ver en la siguiente gráfica y aparte podremos visualizar el color que tendría la luz.

Page 6: ILUMINACION DIRECTX

ESCENA ORIGINAL

La imagen de abajo muestra la misma escena renderizada con única contribución ambiente.

La contribución ambiente no debe ser demasiado brillante de lo contrario la escena aparecerá sobreexpuesta y descolorida.

Page 7: ILUMINACION DIRECTX

Luces direccionales (Directional Lights)Luz direccional se utiliza para simular fuentes de luz distantes como el sol. Tiene una dirección pero no posición. Por ejemplo, podría configurar para que apunte hacia abajo (0, -1,0) que simula el sol estar directamente encima. Luz direccional es relativamente liviana, aunque si se agrega un montón de ellos usted puede encontrar que la velocidad de fotogramas se cae un poco. El efecto de iluminación en los objetos depende de la forma en que se enfrentan con relación a la dirección de la luz (definido en el vértice normal). Así que un triángulo con la normalidad que apunta hacia arriba (0,1,0) estaría iluminada por el Sol (0, -1,0) totalmente - que recibiría la máxima cantidad de luz. A medida que el ángulo de la luz normal se aumenta se aplica menos luz.

Para añadir una luz para nuestra escena usamos el mismo método para direccional, punto y luces puntuales. Llenamos en una estructura ligera y llamamos el dispositivo SetLight función para establecer los parámetros de luz. Dependiendo del tipo de luz llenamos en diferentes variables de estructura por lo que siempre es una buena idea empezar por despejar la estructura de valores por defecto (a 0) antes de llenar los valores necesarios para un tipo de luz particular.

Debemos recordar a encender la luz llamando LightEnable. El número de luces que podemos tener en nuestra escena depende del soporte de hardware (8 es común con el hardware de hoy).

Page 8: ILUMINACION DIRECTX

Por ejemplo, para crear un sol como luz direccional con el sol muy bajo en el cielo que podríamos hacer esto:

void CreateSunLight ()

{

// Rellenar una estructura ligera que define nuestra luz

D3DLIGHT9 light;

ZeroMemory( &light, sizeof(D3DLIGHT9) );

light.Type = D3DLIGHT_DIRECTIONAL;

light.Diffuse.r = 1.0f;

light.Diffuse.g = 1.0f;

light.Diffuse.b = 1.0f;

light.Diffuse.a = 1.0f

light.Range = 1000.0f;

// Crear una dirección para nuestra luz - debe ser normalizada

D3DXVECTOR3 vecDir;

vecDir = D3DXVECTOR3(0.0f,-0.3f,0.5);

D3DXVec3Normalize( (D3DXVECTOR3*)&light.Direction, &vecDir );

//Indicar al dispositivo sobre la luz y vuelva a encenderlo

gD3dDevice->SetLight( 0, &light );

gD3dDevice->LightEnable( 0, TRUE );

Nota importante: uno de los problemas comunes que tiene la gente con luces está olvidando que encenderlos! Para girar a la iluminación de nivel mundial debe establecer un estado render: por ejemplo.

gD3dDevice-> SetRenderState (D3DRS_LIGHTING, TRUE);

Luz Puntual (Point Lights)Una luz punto representa una fuente puntual. Tiene una posición en el mundo y se irradia la luz en todas las direcciones. Una bombilla en un soporte sería un ejemplo de esto. Se irradia luz en todas las direcciones y tiene una posición en el mundo. Este es un tipo más caro de la luz en términos de velocidad de fotogramas de una luz direccional.

Page 9: ILUMINACION DIRECTX

Un punto de luz tiene una atenuación (cómo el nivel de luz disminuye con la distancia) y un rango. El rango es la distancia máxima a la luz viajará. Busque en la ayuda de DirectX para las ecuaciones completas utilizadas. Un ejemplo de la colocación de un punto de luz en nuestro mundo se muestra a continuación:

void CreatePointLight(const D3DVECTOR &pos){

// Rellenar una estructura ligera que define nuestra luz  D3DLIGHT9 light;  ZeroMemory( &light, sizeof(D3DLIGHT9) );  light.Type       = D3DLIGHT_POINT;  light.Diffuse.r  = 1.0f;  light.Diffuse.g  = 1.0f;  light.Diffuse.b  = 1.0f;    

// Luces Point no tienen sentido, pero sí tienen una posición

  light.Position = pos

//Indicar al dispositivo sobre la luz y vuelva a encenderlo      light.Attenuation0 = 0.1f;  light.Range=200.0f  gD3dDevice->SetLight( 1, &light );  gD3dDevice->LightEnable( 1, TRUE );

}

Foco (Spot Lights) El tipo de luz final en Direct3D es la luz del punto. Esta es la luz más complejo y es el tipo más costoso en términos de velocidad de cuadros a fin de utilizar con moderación. A la luz de punto tiene una posición en el espacio y una dirección. Emite un cono de luz con dos grados de intensidad. Cuenta con una sección central iluminada y una sección con poca luz

Page 10: ILUMINACION DIRECTX

circundante que se funde con la sombra que rodea. Sólo se iluminan los objetos dentro del

cono de luz.

Para establecer un punto de luz que necesita para proporcionar la posición, dirección, tamaño de cono y una serie de parámetros que determinan la propagación del cono. Theta es el ángulo que define el cono interior mientras Phi define el cono exterior. Falloff define la disminución de la iluminación entre el exterior del cono interior y el exterior del cono exterior. A continuación se muestra el código de ejemplo para la creación de un punto de luz:

void CreateSpotLight(const D3DVECTOR &pos,const D3DVECTOR &dir){

// Rellenar una estructura ligera que define nuestra luz 

D3DLIGHT9 light;  ZeroMemory( &light, sizeof(D3DLIGHT9) );  light.Type       = D3DLIGHT_SPOT;  light.Diffuse.r  = 1.0f;  light.Diffuse.g  = 1.0f;  light.Diffuse.b  = 1.0f;  light.Diffues.a  = 1.0f;    

// Focos tienen dirección y una posición  light.Position = pos  light.Direction = dir    //Indicar al dispositivo sobre la luz y vuelva a encenderlo  light.Range=1.0f;  light.Theta=0.5f;  light.Phi=1.0f  light.Falloff=1.0f;  light.Attenuation0= 1.0f;

  gD3dDevice->SetLight( 1, &light );  gD3dDevice->LightEnable( 1, TRUE );

}

Page 11: ILUMINACION DIRECTX

La imagen de abajo muestra la escena iluminada por un solo centro de atención con un ángulo de 45 ° centro de atención.

Valores Edición de Luz

Si desea cambiar las luces de forma dinámica no es necesario volver a crearlos cada vez. En su lugar se puede modificar una luz existente. Usted puede llamar al getLight función para obtener los valores, alterar el que usted desea y luego llamar SetLight:

Por ejemplo, decir que quería establecer el color de un índice luz existente 1 por lo que su componente rojo es 0,5:

D3DLIGHT9 light;

HRESULT hr=gD3dDevice->GetLight(1,&light);light.Diffuse.r=0.5f;gD3dDevice->SetLight(1,&light);

Iluminación avanzada

A pesar de que se limitan a 8 luces por la tarjeta gráfica aún puede definir tantas luces como quieras, pero sólo puedes tener 8 encendido a la vez. Así, por ejemplo, se podría definir 50 luces y los convierten en y fuera como un jugador viaja a través de un nivel.

Page 12: ILUMINACION DIRECTX

Direct3D iluminación direccional y ambiental se utiliza a menudo en los juegos. Spot luces se utilizan con menos frecuencia porque lo buenos que aparecen depende totalmente de la densidad del vértice escenas. Desde la iluminación cambia el color en un vértice, si no son muy grandes vértice (en el suelo, por ejemplo), usted no conseguirá un cono puro, sino más bien un efecto irregular. Existen varios métodos en los juegos para crear una iluminación de otras maneras de conseguir alrededor de este problema, por ejemplo mapas de luz.

Es muy agradable para fijar una luz a un modelo 3D (también puede adjuntar otras cosas que modelos como sistemas de partículas). Una forma de hacer esto podría implicar la adición de una entidad luz a su componente de visualización y un enlace en su modelo mundial entre entidad del mundo y el gráfico entidad luz.

DESCARGA ESTOS VIDEOShttps://youtu.be/ut56ptxSJ3E