450 likes | 585 Views
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
E N D
LUCES YLÁ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
Contenido (II) • Propiedades de los materiales • Efectos de la iluminación • Focos de luz • Sombras • Conclusiones Luces y lámparas
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
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
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
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
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
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
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: Iesp=ksIlcosnf=ksIl(V·R)n • n es el parámetro de reflexión especular. • Si la superficie es más brillante, n es mas grande Luces y lámparas
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. • Id = Iikd 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. • Ig = Iaka • En la componente ambiental se engloban las otras componentes. Luces y lámparas
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=Iambiente+Idifusa+Iespecular=kaIa+kdIl(N·L)+ksIl(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=Iambiente+Idifusa+Iespecular=kaIa+II{kd(N·Ll)+ks(N·Hl)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=kaIa + f(dl)II { kd(N · Ll) + ks (N · Hl)n } • Donde f es una función de atenuación empírica. Luces y lámparas
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
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
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
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 seoscurecen alternativamente. Luces y lámparas
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
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
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
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
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
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
Características de las fuentes de luz(II) Luces y lámparas
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
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
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
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
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
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
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
Á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
Área de cobertura (II) Luces y lámparas
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
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: Luces y lámparas
Efectos de la iluminación (I) • Se basan en la componente especular. Luces y lámparas
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
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
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
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
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
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
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
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
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
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