LUCES Y LÁMPARAS

Download Report

Transcript LUCES Y LÁMPARAS

L

UCES Y

L

ÁMPARAS

Realizado por: Mercedes Sánchez Marcos Almudena Sardón García

Contenido (I)

• • • • • Introducción.

Los modelos de iluminación.

Rendering. Determinación de superficies visibles.

– – – – Métodos de rendering de los polígonos.

Iluminación en OpenGL – Tipos de iluminación – Caracteristicas de las fuentes de lus Vectores normales Colocar luces Atenuación con la distancia Área de cobertura Luces y lámparas 2

Contenido (II)

• • • • • Propiedades de los materiales Efectos de la iluminación Focos de luz Sombras Conclusiones Luces y lámparas 3

Introducción I

• • • • • • Actuación de la luz al chocar con una superficie.

Cómo representa OpenGL la luz y sus fenómenos.

Uso de la luz para construir escenas.

Modelos de renderizado más usados.

Uso de la iluminación en OpenGL.

Especificación de los materiales de la escena.

Luces y lámparas 4

Introducción II

• • • • Efectos de iluminación que se pueden conseguir con OpenGL.

Modelos de iluminación y reflexión.

Luz incidente = luz reflejada + luz dispersa + luz absorbida + luz transmitida.

Parámetros: distancia entre la fuente de luz y el objeto, rugosidad de la superficie, tipo de material, ángulo de incidencia de la luz, longitud de onda de la luz incidente.

Luces y lámparas 5

Los modelos de iluminación I

• • El fenómeno de iluminación y reflexión indica cómo la luz interactúa con un sólido.

Clasificación de la luz: – Luz incidente.

– – – Luz de reflexión.

• • Luz difusa.

– – Luz difusa global.

Luz difusa local.

Luz especular.

Luz de refracción.

Luz de transmisión.

Luces y lámparas 6

• • • • • •

Los modelos de iluminación II

Los diferentes tipos de iluminación producen distintos efectos de brillo y color (reflectancia).

El ángulo entre los rayos de luz y la perpendicular de la superficie determina en que medida la superficie aparecerá brillante a los ojos del espectador.

La perpendicular de una superfice plana es la línea qu sale con un ángulo de 90 grados (normal).

Una superficie plana aparecerá más brillante cuando su perpendicular apunte directamente hacia el foco de luz.

La superficie no reflejará luz cuando esté más de 90 grados de los rayos de luz, ni tampoco cuando esté mirando al lado opuesto del foco luminoso.

El modelo básico de iluminación considera sólo las reflexiones 

Intensidad = luz ambiente + luz difusa + luz especular

Luces y lámparas 7

Los modelos de iluminación III

• • Luz ambiental.

– Es la luz indirecta, por ejemplo la que se ve en un día nuboso.

– – Es el resultado de la reflexión múltiple de todos los objetos en la escena.

En teoría no produce sombras en el mundo real, pero en caso de producirlas serán suaves.

Luz difusa.

– Es la que la superficie de un objeto refleja en todas las direcciones debido a la iluminación directa.

– – Es la responsable del color del objeto.

Es una característica propia de los objetos mates.

Luces y lámparas 8

Los modelos de iluminación IV

• Luz especular.

– – – – – Procede de un único punto de luz, es decir de una sola dirección.

Es una luz con alta intensidad que una superficie brillante refleja a lo largo de la dirección del espejo.

Es la que produce el efecto espejo.

Tiene el color de la fuente de luz.

La reflexión especular depende de la posición del observador.

Luces y lámparas 9

Los modelos de iluminación V

• Modelo de Phong (I).

– – La luz en un punto tiene tres componentes y es igual a la suma de las tres  luz difusa + luz especular + luz ambiental .

El modelo de Phong consiste en modelar el efecto de la luz especular. Lo hace de la forma:

I

esp =k s

I

l cos n f =k s

I

l (V·R) n • • n es el parámetro de reflexión especular.

Si la superficie es más brillante, mas grande n es Luces y lámparas 10

Los modelos de iluminación VI

• Modelo de Phong (II).

– – – – La componente difusa toma el color de la superficie.

El rayo reflejado (componente especular) toma el color de la fuente de luz.

»

I

d = I i

k

d cos q Si sólo se consideran la componente difusa y la especular el objeto queda como si estuviera iluminado por un flash. Para evitarlo se usa la componente ambiental.

»

I

g = I a

k

a En la componente ambiental se engloban las otras componentes.

Luces y lámparas 11

Los modelos de iluminación VII

• • • Modelo básico de iluminación.

– Considerando el modelo de Phong se puede definir el modelo básico de iluminación de la siguiente forma: • I=I ambiente +I difusa +I especular =k a

I

a +k d

I

l (N·L)+k s

I

l (N·H) n Modelo básico de iluminación con n fuentes de luz.

– De la misma forma, se puede definir el modelo básico de iluminación si se dispone de n fuentes de luz: • I=I ambiente +I difusa +I especular =k a

I

a +I I {k d (N·L l )+k s (N·H l ) n } Atenuación de la intensidad a lo largo de la distancia de la luz.

– Para tener en cuenta que los objetos más cercanos son más brillantes que los más lejanos se usa un término de atenuación.

– – El modelo básico con atenuación de distancia y fuentes múltiples: • I=k a

I

a + f(d l )I I { k d (N · L l ) + k s (N · H l ) n } Donde f es una función de atenuación empírica.

Luces y lámparas 12

• •

Rendering. Determinación de superficies visibles I

Una parte importante de la generación de gráficos realistas es la identificación de las partes de una escena que son visibles desde un punto de vista determinado.

Distintos planteamientos: – – Métodos de detección de superficie visible.

• Imagen-espacio.

• Objeto-espacio.

Métodos de eliminación de superficies ocultas.

Luces y lámparas 13

• – – – –

Rendering. Determinación de superficies visibles II

Método de la normal.

– – – – Se aplica en figuras planas.

Permite ocultar la mitad de las superficies que hay en escena.

Se basa en calcular la normal a todas las superficies.

Las normales cuya proyección en la dirección de visión sean positivas son superficies ocultas y las negativas visibles.

Se calcula haciendo el producto escalar del vector de visión por el vector normal de cada cara.

Si un objeto es poliédrico, las caras son totalmente visibles o totalmente ocultas.

Si hay varios objetos se realiza el algoritmo para todos los objetos.

Los que hace el algoritmo es eliminar la cara posterior de los objetos.

Luces y lámparas 14

Rendering. Determinación de superficies visibles III

Método de buffer con profundidad. Buffer Z.

– – – Es un método de espacio-imagen.

Se mantiene una base de datos que corresponde a cada pixel de la pantalla de visión.

La base de datos contiene información sobre la profundidad de la coordenada visual z para cada parte de un objeto que ocupe una posición determinada de pixel.

– – Para cada pixel (x,y) de la imagen, el punto con menor coordenada z es visible.

El método del Z-Buffer es infalible para todas las escenas 3D, no importa cuál sea su complejidad. Sin embargo, es de memoria intensiva.

Luces y lámparas 15

Rendering. Determinación de superficies visibles IV

Algoritmo del pintor.

– – Se basa en pintar primero el fondo. Sobre este fondo, se dibuja la siguiente figura. Si sobre esa figura va otra, se dibujaría encima.

Este método tiene un inconveniente cuando las superficies se oscurecen alternativamente.

Luces y lámparas 16

Rendering. Determinación de superficies visibles V

Método de traza de rayos.

– – Se aplica la definición del algoritmo de superficie oculta (método de imagen-espacio).

Para cada pixel se traza un rayo. Si no intercepta ningún objeto se le da el color de fondo. Si intercepta un objeto, se le da el color del primer objeto interceptado.

– Es un método es muy lento, pero tiene la ventaja de dar imágenes muy realistas. Por ejemplo, usando varias fuentes de luz, se obtienen unos resultados muy buenos, casi fotográficos.

Luces y lámparas 17

Métodos de rendering de los polígonos I • Sombreado con intensidad constante.

– Consiste en calcular una única intensidad para cada polígono.

– Una vez calculada la intensidad de cada polígono, se visualizan todos los puntos del mismo polígono con una única intensidad.

– – – Es muy rápido y preciso si las luces y el observador están lejos.

Presenta el inconveniente de que hay discontinuidad de intensidad entre los polígonos.

Este método es el más ineficiente y menos usado de los tres. Luces y lámparas 18

Métodos de rendering de los polígonos II • • Método de sombreado de Gouraud (Gouraud Shading).

– El método consiste en calcular la intensidad de los pixeles a lo largo de la línea de escaneo por interpolación.

– Elimina la discontinuidad de la intensidad entre los polígonos que presentaba el método anterior.

Método de sombreado de Phong (Phong Shading).

– En lugar de interpolar las intensidades, lo que hace es interpolar las normales para cada punto de la superficie.

– Con este método es con el que se consiguen resultados mas realistas, pero tiene el inconveniente de que necesita realizar entre 6 y 7 veces mas cálculos que para el método de Gouraud. Luces y lámparas 19

Activar la iluminación

• Para activar/desactivar la iluminación, OpenGL propone las siguientes primitivas: – glEnable(GL_LIGHTING); – glDisable(GL_LIGHTING); • Con estas funciones se le indica a OpenGL que realice los cálculos correspondientes para el uso de las fuentes de luz y de las propiedades de los materiales. Luces y lámparas 20

Tipos de iluminación

Hay tres tipos de iluminación en OpenGL: – Iluminación plana: evalúa sólo un color para todos los puntos de un polígono

glShadeModel(GL_FLAT);

– Iluminación suave:efectúa cálculos de color para cada uno de los puntos del polígono.

glShadeModel(GL_SMOOTH);

– Iluminación de Phong: OpenGL no implementa PHONG directamente Luces y lámparas 21

Características de las fuentes de luz(I)

• • OpenGL soporta hasta 8 luces por escena.

Las luces llevan asociado un nombre: • •

GL_LIGHT0, GL_LIGHT1, GL_LIGHT2 …

Para activar y desactivar una luz se utiliza: – –

glEnable(GL_LIGHT0); glDisable(GL_LIGHT0);

Para definir las fuentes de luz tenemos que decirle a OpenGL cuáles son las propiedades de cada una de nuestras luces.

GLvoid glLightfv(GLenum light, GLenum pname, const GLfloat *params);

Luces y lámparas 22

Características de las fuentes de luz(II)

Luces y lámparas 23

Vectores Normales a la superficie (I)

• • • • Para iluminar una superficie (plano) necesitamos información sobre su vector normal asociado.

En OpenGL es necesaria la definición de un vector normal para cada uno de los vértices de nuestra geometría.

Una vez calculada la normal tenemos que normalizar, es decir, dividir ese vector por su propio módulo para que sea unitario. OpenGL utilizará la normal asociada a cada vértice para evaluar la luz que incide sobre éste. Luces y lámparas 24

Vectores Normales a la superficie (II)

• Para definir normales con OpenGL:

glBegin(GL_POLYGON ); glNormal3f(CoordX, CoordY, CoordZ); glVertex3f ( ... ) ; glVertex3f ( ... ) ; glVertex3f ( ... ) ; glVertex3f ( ... ) ; ...

glEnd( ) ;

Luces y lámparas 25

Vectores Normales a la superficie (III)

• En este caso cada vértice tiene su normal:

glBegin ( GL_POLYGON ) ; glNormal3f ( CoordX, CoordY, CoordZ ) ; glVertex3f ( ... ) ; glNormal3f ( CoordX, CoordY, CoordZ ) ; glVertex3f ( ... ) ; glNormal3f ( CoordX, CoordY, CoordZ ) ; glVertex3f ( ... ) ; glNormal3f ( CoordX, CoordY, CoordZ ) ; glVertex3f ( ... ) ; ...

glEnd( ) ;

Luces y lámparas 26

Vectores Normales a la superficie (IV)

• Se puede indicar a OpenGL que realice el cálculo de la normal automáticamente: –

glEnable(GL_NORMALIZE);

glDisable(GL_NORMALIZE);

• No recomendable Luces y lámparas 27

Colocar las luces

• Para colocar la luz se utiliza: –

GLvoid glLightfv (GLenum light, GL_POSITION, const GLfloat *params);

• La posición se indica con un array de valores: – Glfloat posición={0.0, 0.0, 100.0, 1.0); • • Los rayos de la luz se asumen paralelos.

Podemos mover una luz a gusto por una escena.

Luces y lámparas 28

Atenuación con la distancia (I)

• Es la atenuación que sufre la luz a medida que se desplaza.

• Para modelar esto contamos con tres parámetros a definir: – – – GL_CONSTANT_ATTENUATION. En la formula es "a".

GL_LINEAR_ATTENUATION. En la formula es "b".

GL_QUADRATIC_ATTENUATION. En la formula es “c".

Luces y lámparas 29

Atenuación con la distancia (II)

• Para pasarle los valores a OpenGL se usa la función de siempre: –

GLvoid glLightfv ( GL_LIGHT5, GL_CONSTANT_ATTENUATION, 0.8 ) ;

GLvoid glLightfv ( GL_LIGHT5, GL_LINEAR_ATTENUATION, 0.5 ) ;

GLvoid glLightfv ( GL_LIGHT5, GL_QUADRATIC_ATTENUATION, 0.1 ) ;

Luces y lámparas 30

Área de cobertura(I)

• • • Hace referencia al área que abarca el haz de luz que surge de la fuente.

Podemos definir los siguientes parámetros: – – – GL_SPOT_CUTOFF para definir un "cono" de luz. GL_SPOT_DIRECTION para restringir la dirección de la luz emitida.

GL_SPOT_EXPONENT que regula la pérdida de intensidad de la luz a medida que nos alejamos del centro del cono.

Pasamos estos parámetros a OpenGL con la función:

glLightfv(GL_LIGTH0, GL_SPOT_DIRECTION, dirección);

Glfloat dirección={0.0, 0.0, 1.0} Luces y lámparas 31

Área de cobertura (II)

Luces y lámparas 32

Propiedades de los materiales (I)

• • Para cada polígono de la escena hay que definir un material de forma que su respuesta a la incidencia de luz varíe según sea el caso. Se definen cinco características para un material: – Reflexión difusa – – – – Reflexión especular Reflexión ambiental Coeficiente de brillo Coeficiente de emisión Luces y lámparas 33

Propiedades de los materiales (II)

• • Para indicar las características de los materiales se utiliza: –

GLvoid glMaterialfv(GLenum face, GLenum pname, const GLfloat *params);

Los parámetros de la función son: Glenum face GL_FRONT GL_BACK GL_FRONT_AN D_BACK Glenum pname GL_DIFFUSE GL_AMBIENT GL_AMBIENT_AND _ DIFFUSE GL_EMISSION GL_SPECULAR const GLfloat *params ( R, G, B, 1.0 ) ( R, G, B, 1.0 ) ( R, G, B, 1.0 ) ( R, G, B, 1.0 ) ( R, G, B, 1.0 ) [ 0, 128 ] 34

Efectos de la iluminación (I)

• Se basan en la componente especular.

Luces y lámparas 35

Efectos de la iluminación (II)

• Para conseguir los efectos de la luz especular hay que realizar lo siguiente: – Por un lado tenemos que activar la iluminación especular recurriendo a las primitivas de OpenGL: Espec[] = 1.0f,1.0f,1.0f,1.0f}; GlLight(GL_LIGHT0,GL_SPECULAR,Espec); – Por otro lado tenemos que asignar al material las propiedades adecuadas de brillo: GlMaterialfv(GL_FRONT,GL_SPECULAR,espec); GlMateriali(GL_FRONT,GL_SHININESS,128); Luces y lámparas 36

Focos de luz (I)

• Tenemos dos tipos de luz: – Luz propia es proporcionada por un foco de luz bien situado, del cual conocemos su ubicación, y que emite sus rayos de luz de forma radial o divergente.

– Luz impropia emite sus rayos de luz desde una ubicación muy distante, de forma que podemos considerar sus rayos como paralelos entre si Luces y lámparas 37

Focos de luz (II)

• Colocación de un foco de luz.

– Para colocar una fuente de luz en OpenGL: glLightfv (GL_LIGHT0, GL_POSITION,LightPos); – Si queremos le podemos dar el efecto foco • Se configura el ángulo del cono de luz.

glLight (GL_LIGHT0, GL_SPOT_CUTOFF, 60.0f); • Configura el brillo del mismo.

glLight (GL_LIGHT0, GL_SPOT_EXPONENT, 100.0f); Luces y lámparas 38

Focos de luz (III)

• Para ver como los focos de luz interaccionan en una escena hay que hablar de: – iluminación local: cómo se comporta cada superficie al ser iluminada de forma individual. – iluminación global: iluminación de un determinado objeto en una escena, teniendo en cuenta los rayos provenientes varias fuentes de luz y varios objetos.

Luces y lámparas 39

Sombras (I)

• • Es una de las partes de la iluminación que mayor realismo aporta a nuestras escenas.

En general vamos a tener muy diversos tipos de sombras, y diversas formas de aplicarlos, pero sólo nos vamos a centrar en dos técnicas y su aplicación mediante el buffer plantilla.

Luces y lámparas 40

Sombras (II)

• Sombras proyectadas.

– Es la técnica más sencilla, y consiste en calcular una matriz de proyección sobre el plano sobre el que queremos dibujar la sombra.

– – Una vez calculada esta matriz, si la multiplicamos por la matriz del modelo, y procedemos a dibujar nuestras figuras, las estaremos dibujando sobre ese plano.

Por tanto una vez dibujada nuestra escena, desactivamos la iluminación, proyectamos y dibujamos nuestras figuras teniendo en cuenta que hay que elegir un color adecuado porque van a ser las sombras.

Luces y lámparas 41

Sombras (III)

• Sombras Volumétrica – La técnica anterior es muy sencilla, pero solo nos sirve para dibujar esas sobras proyectadas sobre planos.

– Si tenemos una composición de figuras en las que unas proyectan sombras sobre otras, con la técnica anterior no las podremos representar.

– Para evitar esto vamos a utilizar una técnica que consiste en calcular las sombras como intersección de volúmenes.

Luces y lámparas 42

Sombras (IV)

• Sombras Volumétricas: el buffer plantilla.

• El funcionamiento de este buffer es muy sencillo: – Cada píxel tiene asignado un valor en este buffer.

– – – Además, hay una operación de comparación definida para el buffer.

Si el valor de plantilla de un píxel satisface la condición de comparación este se dibuja, si no, no se dibuja.

También tenemos una operación de modificación de este valor, que se aplica sobre los píxel que satisfacen la condición.

Luces y lámparas 43

Sombras (V)

El algoritmo será como sigue – Calculamos el volumen de la sombra, y lo dibujamos de tal manera que modifique el valor de todos los píxeles asignándoles un valor reconocible para nosotros posteriormente como sombreado.

– – – Dibujamos nuestra escena.

Desactivamos la luz, asignamos el color de nuestra sombra activamos es test del buffer, de tal manera que solo se dibuje en las regiones donde el valor del buffer sea el que hemos asignado a nuestra sombra.

Volvemos a dibujar nuestra escena y ya tendremos las sombras.

Luces y lámparas 44

• •

Conclusiones

El capítulo de iluminación es uno de los más interesantes de la programación gráfica, porque es uno de los que más nos va a permitir dotar de fotorrealismo a las escenas que estemos modelando, pero exige un gran dominio del resto de temas.

Existen una serie de técnicas que ayudan a conseguir ese fotorrealismo.No hemos querido profundizar mucho en ellas, ya que en la mayoría de los casos nos saldríamos de lo que es el carácter introductorio a lo que es OpenGl y a lo que es la programación gráfica.

Luces y lámparas 45