Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica - 13 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav
Iluminação e sombreamento Um modelo de iluminação em CG define a natureza da luz emanada por uma fonte e sua interação com todos os objetos em cena A natureza da luz diz respeito à fonte de luz utilizada. Geralmente 03 tipos de fontes de luz podem ser incluídos em uma cena 3D: pontual, direcional e spot. Sombreamento está diretamente ligado a manipulação da luz dentro de um modelo de CG. Página 2
Iluminação Ondas eletromagnéticas capazes de serem captadas pela visão humana Vermelho Laranja Amarelo Verde Azul Anil Violeta Página 3
Iluminação Conceitos importantes A luz é uma energia eletromagnética A intensidade de uma luz emitida diminui em relação inversa ao quadrado da distância da fonte de luz Energia não se perde, se transforma Absorção da luz branca por uma superfície preta Calor: outra forma de energia com diferente comprimento de onda Página 4
Iluminação Quanto a emissão de luz os objetos podem ser classificados como: Fontes de luz própria Lâmpadas, lanternas, fogo, sol, etc. Caracterizadas pela intensidade, freqüência e direção Refletores Objetos coloridos Propriedades de sua superfície Página 5
Iluminação As luzes são classificadas em: Ambiental Direcional Pontual Spot Página 6
Iluminação Ambiental Ilumina igualmente todas as superfícies do ambiente Posição da câmera não é importante Página 7
Iluminação Fonte Direcional Raios paralelos e com mesma intensidade Simula os raios solares Seu efeito é percebido dependendo da orientação da superfície. Página 8
Iluminação Fonte Pontual Emite luz em todas as direções Atinge os objetos com diferentes direções e intensidades Iluminação do objeto varia de uma parte para outra, dependendo da direção e da distância da fonte de luz. Página 9
Iluminação Fonte Spot Semelhante à puntual, porém os raios de luz são emitidos na forma de um cone, apontado para uma direção; A intensidade da luz diminui conforme o raio de luz se distancia da fonte. Página 10
Iluminação Reflexão A maioria dos objetos ao nosso redor não emite luz própria, pelo contrário, reflete a radiação neles incidente em diferentes comprimentos de onda. A reflexão se deve à interação molecular entre a radiação incidente e o material que compõe a superfície dos objetos. Modelos de Reflexão: Ambiente Difusa Especular Página 11
Iluminação Refletor Ambiente A luz atinge as superfícies igualmente em todas as direções a partir de uma fonte difusa não direcional. Em ambientes reais, superfícies que não são iluminadas diretamente mas sim por luzes geradas por reflexão de outras superfícies. A quantidade de luz refletida depende das propriedades das superfícies. Fonte de luz Página 12
Iluminação Refletor Difuso A luz é refletida em diferentes direções. Reflexão em objeto com saliências ou foscos. Intensidade proporcional à orientação relativa entre incidência de luz e a superfície do objeto. Página 13
Iluminação Refletor Especular O ângulo de reflexão é igual ao de incidência Superfícies polidas, lustradas ou brilhantes Gera brilho com a cor da luz, não com a do objeto Página 14
Iluminação Ambiente x Difusa x Especular Página 15
Iluminação Difusa X Especular Página 16
Sombreamento (Shading) Simula o efeito de diferentes intensidades de iluminação sobre um objeto Também conhecido como tonalização Utiliza as características das fontes de luz e dos objetos para o cálculo da tonalização Inviabilidade da modelagem de todos os conceitos físicos envolvidos Página 17
Sombreamento (Shading) Sombreamento Constante(Flat) O cálculo da reflexão da luz é feito apenas uma vez por superfície Solução mais simples e rápida Resulta em uma aparência facetada Página 18
Sombreamento (Shading) Sombreamento de Gouraud O cálculo da reflexão da luz é feita em cada vértice e cada face é resultado do gradiente entre os vértices Interpolação para cálculo dos demais pontos Sombreamento mais suave, mais demorada. Página 19
Sombreamento (Shading) Sombreamento de Phong Adiciona o cálculo dos vetores especulares ao modelo de Gouraud Produz efeitos mais realistas e é ainda mais demorado Página 20
Resumo: Modelos de Sombreamento Determinam quando avaliar a equação correspondente ao modelo de reflexão: uma única vez a cada face do objeto (flat) para cada vértice das faces (Gouraud) para cada ponto das faces (Phong) Página 21
Iluminação em OpenGl Fornece suporte para até 8 fontes de luz Implementa os modelos de tonalização Flat e Gouraud glshademodel(glenum mode); GL_FLAT - A cor não varia GL_SMOOTH - Gouraud, calcula a cor a partir de cada vértice. A luz é dividida em quatro componentes que juntas formam o modelo de iluminação Ambiente luz que vem de todas as direções Difusa luz direcional que é ao atingir uma superfície é refletida em todas as direções Especular - luz direcional que é ao atingir uma superfície tende a refletir em uma única outra direção Emissiva simula a luz que se origina em um objeto Não é interferida nem interfere no modelo de iluminação Página 22
Iluminação em OpenGl A iluminação é resultado das propriedades especificadas para as fontes de luz e das propriedades dos materiais que constituem os objetos Fontes de Luz void gllightfv(glenum light, GLenum pname, TYPE *param); Objetos void glmaterialfv(glenum face, GLenum pname, TYPE *param); Página 23
Iluminação em OpenGl void gllightfv(glenum light, GLenum pname, TYPE *param); ligth fonte de luz desejada. GL_LIGHT0 a GL_LIGHT7 pname característica da luz a ser especificada param vetor Glfloat com o valor a ser especificado Constante Valor default Significado GL_AMBIENT (0.0,0.0,0.0,1.0) Cor ambiente da luz GL_DIFFUSE (1.0,1.0,1.0,1.0) Cor difusa da luz GL_SPECULAR (1.0,1.0,1.0,1.0) Cor especular da luz GL_POSITION (0.0,0.0,1.0,0.0) Posição da luz GL_SPOT_DIRECTION (0.0,0.0,-1.0) Direção da luz spot GL_SPOTCUTOFF 180.0 Ângulo de corte da luz spot Página 24
Iluminação em OpenGl void glmaterialfv(glenum face, GLenum pname, TYPE *param); face quais faces do objeto estão sendo especificadas. GL_FRONT, GL_BACK ou GL_FRONT_AND_BACK pname propriedade do material a ser especificada param vetor Glfloat com os valores a serem especificados Constante Valor default Significado GL_AMBIENT (0.2,0.2,0.2,1.0) Cor ambiente do material GL_DIFFUSE (0.8,0.8,0.8,1.0) Cor difusa do material GL_SPECULAR (0.0,0.0,0.0,1.0) Cor especular do material GL_SHININESS 0.0 Expoente especular GL_EMISSION (0.0,0.0,0.0,1.0) Cor emissiva do material Página 25
Iluminação em OpenGl void Inicializa (void) { // Habilita a definição da cor do material a partir da cor corrente glenable(gl_color_material); //Habilita o uso de iluminação glenable(gl_lighting); // Habilita a luz de número 0 glenable(gl_light0); // Habilita o depth-buffering glenable(gl_depth_test); } // Habilita o modelo de colorização de Gouraud glshademodel(gl_smooth);... Página 26
Iluminação em OpenGl void DefineIluminacao (void) { GLfloat luzambiente[4]={0.2,0.2,0.2,1.0}; GLfloat luzdifusa[4]={0.7,0.7,0.7,1.0}; // "cor" GLfloat luzespecular[4]={1.0, 1.0, 1.0, 1.0};// "brilho" GLfloat posicaoluz[4]={0.0, 50.0, 50.0, 1.0}; // Capacidade de brilho do material GLfloat especularidade[4]={1.0,1.0,1.0,1.0}; GLint especmaterial = 60; Página 27
Iluminação em OpenGl // Define a refletância do material glmaterialfv(gl_front,gl_specular, especularidade); // Define a concentração do brilho glmateriali(gl_front,gl_shininess,especmaterial); // Ativa o uso da luz ambiente gllightmodelfv(gl_light_model_ambient, luzambiente); } // Define os parâmetros da luz de número 0 gllightfv(gl_light0, GL_AMBIENT, luzambiente); gllightfv(gl_light0, GL_DIFFUSE, luzdifusa ); gllightfv(gl_light0, GL_SPECULAR, luzespecular ); gllightfv(gl_light0, GL_POSITION, posicaoluz ); Página 28
Iluminação em OpenGl void Desenha(void) { glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); DefineIluminacao(); glcolor3f(0.0f, 1.0f, 0.0f); glutsolidsphere(50,20,20); } glflush(); Código exemplo - http://migre.me/1nnch Página 29