Modelos de Iluminação Métodos de surface-rendering VI / CG 2012/2013 Beatriz Sousa Santos, J. Madeira 1
As imagens realistas obtêm-se : usando projecções perspectivas da cena aplicando efeitos de iluminação naturais às superfícies visíveis Os efeitos de iluminação naturais obtém-se usando: um modelo de iluminação que permite calcular a cor a atribuir a cada ponto das superfícies dos objectos da cena um método de surface-rendering que aplica o modelo de iluminação para determinar a cor de todos os pixels 2
O fotorealismo envolve: - Representação precisa das propriedades das superfícies - Boa descrição física da iluminação da cena O que implica conhecimentos de princípios de Física e Psicologia E pode significar modelação de: texturas das superfícies, transparência reflexões sombras etc. 3
Os modelos de iluminação usados em Computação Gráfica - são muitas vezes aproximações das leis físicas - que descrevem a interacção superfície-luz Existem vários tipos de modelos de iluminação: - modelos simples, baseados em cálculos fotométricos simples (para reduzir a complexidade computacional) - modelos mais sofisticados, baseados na propagação da energia radiante (computacionalmente mais complexos) 4
Fontes de luz São objectos que radiam luz e contribuem para iluminar os objectos da cena Podem ser modeladas com uma grande variedade de características: - Posição - Cor da luz emitida - Direcção de emissão - Forma 5
Fontes de luz (simplificadas) Fonte pontual isotrópica Fonte de luz a uma distância infinita Os raios de luz emitidos por uma fonte situada muito longe são praticamente paralelos 6
Fontes de luz mais sofisticadas Foco de luz direccional (definido por uma direcção e um ângulo) 7
Fontes de luz ainda mais sofisticadas Fonte de luz não pontual e próxima do objecto 8
Efeitos de iluminação das superfícies Um modelo de iluminação utiliza as propriedades ópticas atribuídas à superfície: - coeficientes de reflexão para cada cor - grau de transparência - parâmetros de textura da superfície Quando a luz incide numa superfície opaca: - parte da luz é absorvida - parte é reflectida 9
10
A quantidade de luz reflectida depende das características da superfície - As superfícies brilhantes reflectem maior quantidade de luz - As superfícies mate reflectem menor quantidade de luz As superfícies transparentes transmitem parte da luz 11
As superfícies rugosas tendem a espalhar a luz reflectida em todas as direcções -reflexão difusa E parecem igualmente brilhantes a partir de qualquer ângulo de visão As superfícies mais lisas reflectem mais luz em determinadas direcções -reflexão especular (highlight) E apresentam zonas mais brilhantes 12
Outro factor a considerar num modelo de iluminação é a - Iluminação ambiente Uma superfície que não é directamente iluminada pode ser visível devido à luz reflectida pelos outros objectos da cena A luz reflectida por uma superfície é a soma das contribuições das fontes de luz e da iluminação ambiente 13
Modelos de iluminação básicos Os modelos de iluminação sofisticados calculam com precisão os efeitos das interacções entre a energia radiante e os materiais que compõe as superfícies Os modelos básicos usam aproximações para representar os processos físicos que produzem os efeitos de iluminação apresentados O modelo empírico descrito a seguir produz resultados suficientemente bons para a maioria das situações e inclui: - iluminação ambiente - reflexão difusa - reflexão especular 14
Iluminação ambiente A iluminação ambiente é incluída sob a forma de um valor constante para toda a cena: I a produzindo uma iluminação uniforme para todos os objectos Neste caso as reflexões produzidas pelas superfícies: - são independentes da direcção de visão - são independentes da orientação da superfície - dependem apenas das propriedades ópticas da superfície 15
A iluminação ambiente, isoladamente, produz resultados pouco interessantes na representação de uma cena I ambdiff = K d I a Apenas iluminação ambiente 16
Reflexão difusa Considera-se que a luz incidente é espalhada com igual intensidade em todas as direcções, independentemente da direcção de visão As superfícies com estas características chamam-se reflectores Lambertianos ou reflectores difusos ideais Esta reflexão pode ser calculada pela Lei de Lambert: Intensidade Energia radiante por un. de tempo área projectada α cos Φ N da cos ΦN = const. 17
Em geral, inclui-se pelo menos uma fonte de luz (frequentemente no ponto de vista) Neste caso, a quantidade de luz incidente depende da orientação da superfície em relação à direcção da fonte luminosa Uma superfície que é perpendicular à direcção da luz, é mais iluminada que uma superfície com igual área mas oblíqua Este efeito pode ser observado variando a orientação de uma folha de papel branco em relação à direcção da luz 18
Sendo θ o ângulo de incidência (entre a direcção da luz e a normal à superfície) Área projectada A quantidade de luz reflectida de modo difuso por uma superfície, correspondente a uma fonte de luz I l, é: Pode-se exprimir em função dos vectores unitários: N normal à superfície L direcção de uma fonte de luz se se 19
Reflexão difusa numa esfera iluminada por uma fonte pontual branca com 0< K d <1 e sem iluminação ambiente (K a = 0) Somando a iluminação ambiente com a reflexão difusa: se se 20
Iluminação ambiente Reflexão difusa 21
Reflexão especular e o modelo de Phong Os pontos brilhantes, reflexões especulares ou highlights, que se vêm nas superfícies brilhantes resultam da reflexão quase total da luz em áreas concentradas O ângulo de reflexão especular é igual ao ângulo de incidência (em relação à normal) R é o vector unitário correspondente à direcção da reflexão especular ideal V é o vector unitário na direcção do ponto de vista Um reflector ideal reflecte apenas na direcção da reflexão especular (apenas se vê reflexão quando V e R coincidem Φ= 0) 22
Objectos que não sejam reflectores ideais apresentam reflexões especulares numa gama finita de direcções em torno do vector R As superfícies mais brilhantes têm uma gama de direcções de reflexão mais estreita O modelo de reflexão especular de Phong estabelece, empiricamente, que a intensidade das reflexões especulares é proporcional ao Em que W(θ) é o coeficiente de reflexão especular 23
Com reflexão difusa Com reflexão difusa e especular 24
Superfície menos brilhante Superfície mais brilhante 25
Variação de W(θ) para diferentes materiais como função do ângulo de incidência 26
Pode-se calcular cos Φ a partir do produto escalar dos versores V R Não existem reflexões especulares quando: - A fonte de luz está atrás da superfície - V e L estão do mesmo lado da normal N Assim, assumindo que o coeficiente de reflexão especular é constante para cada material, podemos determinar a intensidade da reflexão especular num ponto da superfície devida a uma fonte de luz: cos Φ e ou R do lado oposto a V Fonte de luz atrás da superfície 27
Reflexões especulares provocadas por uma única fonte luminosa, para vários parâmetros especulares 28
Sem iluminação ambiente, uma fonte de luz move-se em torno da esfera 29
Reflexões difusas e especulares Quando existe uma única fonte de luz pontual, a combinação dos três efeitos: - iluminação ambiente - reflexão difusa - reflexão especular Múltiplas fontes de várias cores: Quando existem múltiplas fontes de luz: Por vezes utiliza-se o halfway vector H (entre L e V) como aproximação de R numa versão do modelo de Phong mais simples de calcular para superfícies não planas (com N variável) 30
Considerações quanto à cor Quando se usa o modelo RGB, a intensidade é especificada no modelo de iluminação como um vector com três elementos: O mesmo para os coeficientes: Por exemplo a componente azul das reflexões difusas será: É possível usar outros modelos de cor (por exemplo CMY) 31
No modelo de Phong original Ks é constante e independente da cor da superfície O que provoca reflexões com a cor da fonte e dá um aspecto de plástico aos objectos Existem modelos de iluminação mais sofisticados, que permitem obter imagens mais realistas de outros tipos de materiais Imagens obtidas com modelos de iluminação mais sofisticados 32
Modelo de iluminação mais sofisticado Cook and Torrence, 1982 33
OpenGL (Pré-3.1) Lighting É usado o modelo de iluminação de Phong As características das fontes de luz e as propriedades dos materiais são expressas usando o modelo RGB ou RGBA Luz emitida ou reflectida Coeficientes de reflexão ambiente, difusa e especular Podem ser definidas várias fontes de luz, controladas de modo independente. Se desejado, o programador pode desenvolver e usar um modelo mais sofisticado!! Mas terá de efectuar todos os cálculos necessários!! 34
OpenGL (Pré-3.1) Lighting Passos fundamentais: Associar um vector normal a cada vértice, que determina a sua orientação relativamente às fontes de luz. Como fazer? Representação de poliedros vs. aproximação de superfícies curvas Criar, definir as suas propriedades e posicionar as fontes de luz Definir as propriedades dos materiais que constituem os vários objectos da cena Estabelecer algumas propriedades do modelo de iluminação Distância ao observador Iluminação ambiente global 35
OpenGL (Pré-3.1) Lighting Model Iluminação ambiente global GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0}; gllightmodelfv( GL_LIGHT_MODEL_AMBIENT, lmodel_ambient ); Distância ao observador gllightmodeli( GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE ); gllightmodeli( GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE ); Activar / Desactivar Default! Porquê? glenable( GL_LIGHTING ); 36
OpenGL (Pré-3.1) Light Sources Exemplo: fonte de luz pontual GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; gllightfv(gl_light0, GL_AMBIENT, light_ambient); gllightfv(gl_light0, GL_DIFFUSE, light_diffuse); gllightfv(gl_light0, GL_SPECULAR, light_specular); gllightfv(gl_light0, GL_POSITION, light_position); glenable( GL_LIGHT0 ); 37
OpenGL (Pré-3.1) Material Properties Diferentes propriedades / coeficientes GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 }; GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 }; GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 }; GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat no_shininess[] = { 0.0 }; GLfloat low_shininess[] = { 5.0 }; GLfloat high_shininess[] = { 100.0 }; GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0}; 38
OpenGL (Pré-3.1) Material Properties Reflexão difusa e especular, com elevado coeficiente de Phong glmaterialfv(gl_front, GL_AMBIENT, no_mat); glmaterialfv(gl_front, GL_DIFFUSE, mat_diffuse); glmaterialfv(gl_front, GL_SPECULAR, mat_specular); glmaterialfv(gl_front, GL_SHININESS, high_shininess); glmaterialfv(gl_front, GL_EMISSION, no_mat); 39
OpenGL (Pré-3.1) - Shading Cor atribuída às primitivas (segmentos de recta e polígonos) Constante (Flat-Shading), usando a cor atribuída a um dos vértices (qual?) da primitiva glshademodel( GL_FLAT ); Determinada por interpolação (Gouraud Shading) Default! glshademodel( GL_SMOOTH ); Consultar OpenGL The Red Book!! 40
OpenGL Material Properties Bules de diferentes materiais : Esmeralda, jade, Latão, bronze, Plástico Borracha [OpenGL The Red Book] 41
OpenGL Lighting E, hoje em dia, como fazer? Que cálculos são efectuados pela aplicação? Que cálculos são efectuados pelos shaders? Per vertex vs. per fragment shading 42
OpenGL Lighting Calcular na aplicação e/ou enviar atributos aos shaders Propriedades dos materiais Vectores normais Propriedades das fontes luz Usar vectores unitários!! Cuidado com as transformações aplicadas!! GLSL normalization function Efectuar produtos escalares!! 43
OpenGL Light Sources Exemplo: fonte de luz pontual vec4 diffuse0 = vec4(1.0, 0.0, 0.0, 1.0); vec4 ambient0 = vec4(1.0, 0.0, 0.0, 1.0); vec4 specular0 = vec4(1.0, 0.0, 0.0, 1.0); vec4 light0_pos = vec4(1.0, 2.0, 3.0, 0.0); 44
OpenGL Material Properties Reflexão difusa e especular, com elevado coeficiente de Phong vec4 ambient = vec4(0.2, 0.2, 0.2, 1.0); vec4 diffuse = vec4(1.0, 0.8, 0.0, 1.0); vec4 specular = vec4(1.0, 1.0, 1.0, 1.0); GLfloat shine = 100.0 45
OpenGL Per Vertex Shading Alternativas A aplicação determina a cor (shade) de cada vértice da malha poligonal E envia-a ao vertex shader OU A aplicação envia todos os parâmetros para o vertex shader Este calcula a cor (shade) para cada vértice 46
OpenGL Per Vertex Shading Smooth Shading Default Cor interpolada ao longo de cada primitiva Se passada ao fragment shader como varying Flat Shading Cor constante ao longo de cada primitiva Se passada ao fragment shader como uniform 47
OpenGL Per Vertex Shading // vertex shader in vec4 vposition; in vec3 vnormal; out vec4 color; //vertex shade // light and material properties uniform vec4 AmbientProduct, DiffuseProduct, SpecularProduct; uniform mat4 ModelView; uniform mat4 Projection; uniform vec4 LightPosition; uniform float Shininess; E. Angel and D. Shreiner: Interactive Computer Graphics 6E Addison-Wesley 2012 48
OpenGL Per Vertex Shading void main() { // Transform vertex position into eye coordinates vec3 pos = (ModelView * vposition).xyz; vec3 L = normalize( LightPosition.xyz - pos ); vec3 E = normalize( -pos ); vec3 H = normalize( L + E ); // Transform vertex normal into eye coordinates vec3 N = normalize( ModelView*vec4(vNormal, 0.0) ).xyz; 49
OpenGL Per Vertex Shading // Compute terms in the illumination equation vec4 ambient = AmbientProduct; float Kd = max( dot(l, N), 0.0 ); vec4 diffuse = Kd*DiffuseProduct; float Ks = pow( max( dot(n, H), 0.0), Shininess ); vec4 specular = Ks * SpecularProduct; if( dot(l, N) < 0.0 ) specular = vec4(0.0, 0.0, 0.0, 1.0); gl_position = Projection * ModelView * vposition; } color = ambient + diffuse + specular; color.a = 1.0; 50
OpenGL Per Vertex Shading // fragment shader in vec4 color; void main() { gl_fragcolor = color; } 51
Transparência Um objecto transparente deixa ver os objectos que estão atrás Há também objectos translúcidos que transmitem a luz mas difundem-na em todas as direcções É possível modelar a transparência com graus de realismo diferentes: - sem refracção (mudança de direcção dos raios luminosos) - com refracção Objecto transparente 52
Para se obter maior realismo é necessário considerar a refracção da luz Para a fonte de luz Direcção de reflexão A direcção da luz refractada é diferente da luz incidente O ângulo de refracção varia com: - os índices de refracção dos meios - o ângulo do raio incidente De acordo com a Lei de Snell: ar vidro Direcção de refracção ar O raio emergente é paralelo ao raio incidente 53
O índice de refracção varia com vários factores: - l da luz - temperatura do material - direcção (em materiais anisotrópicos) - Mas em geral pode-se usar um valor médio Para a fonte de luz Direcção de reflexão Direcção de refracção Índices de refracção para vários materiais: vácuo / ar - 1.00 gelo - 1.31 água - 1.33 vidro vulgar - 1.52 quartzo - 1.54 54
Pode-se calcular T (vector unitário na direcção de refracção): N vector unitário normal à superfície L vector unitário na direcção da fonte luminosa O efeito geral da passagem de luz através de uma lâmina de vidro é um raio emergente paralelo ao incidente ar vidro ar O raio emergente é paralelo ao raio incidente 55
Na maioria das aplicações usam-se aproximações menos realistas e mais rápidas Objecto no fundo Uma aproximação mais simples ignora as mudanças de direcção dos raios transmitidos entre materiais Esta aproximação: - é rápida - produz resultados aceitáveis Objecto transparente Plano de projecção para superfícies poligonais transparentes de pequena espessura 56
Pode-se combinar a luz transmitida através de uma superfície transparente com a luz reflectida pela superfície: Objecto no fundo - coeficiente de transparência [0, 1] 1- totalmente transparente 0- totalmente opaco Objecto transparente Plano de projecção Pode-se também definir o coeficiente de opacidade: transparência sem refracção 57
Sombras Direcção da luz incidente Podem usar-se métodos de detecção de visibilidade para detectar zonas que não são iluminadas por fontes luminosas Pode-se determinar as faces da cena que não são visíveis de cada fonte luminosa Depois aplica-se o modelo de iluminação usando apenas as fontes que contribuem para a iluminação de cada face 58
Exemplo: Sombras devidas a uma fonte de luz a duas fontes de luz 59
Métodos de Rendering de Polígonos (Shading) Os cálculos da intensidade obtidos a partir de um modelo de iluminação podem ser aplicados ao rendering de uma superfície de formas diferentes: - Calcular a intensidade de todos os pixels correspondentes à superfície projectada - Calcular a intensidade de alguns pixels criteriosamente escolhidos e obter um valor aproximado para os restantes As bibliotecas gráficas usam, em geral, algoritmos scan-line e calculam a intensidade nos vértices dos polígonos, usando o modelo de iluminação - Muitas interpolam as intensidades ao longo das scan-lines - Outras usam métodos mais precisos 60
Métodos de Rendering de Polígonos (Shading) - Os métodos mais comuns são: Método de intensidade constante, uniforme ou flat-shading Método de Gouraud Método de Phong 61
Surface rendering de intensidade constante (Flat-Shading) Atribui a mesma cor a todos os pixels de cada polígono Usa o modelo de iluminação para calcular as componentes RGB de um pixel correspondente a um dado ponto de cada polígono (vértice, centróide, etc.) É simples e rápido! Adequado a alguns casos simples e útil para obter a aparência geral dum objecto curvo 62
Em geral, o flat-shading é adequado quando se verificam todas as condições seguintes: - O polígono é uma face de um poliedro e não uma região de uma superfície curva aproximada por uma malha poligonal - Todas as fontes de luz estão muito afastadas: fontes no infinito (N.L constante para todo polígono) - O observador ( viewpoint ) está muito afastado (V.R constante para todo o polígono) Caso contrário, a aproximação é razoável se o objecto for aproximado por uma malha com polígonos muito pequenos 63
Método de Gouraud ou de interpolação de intensidades Calcula a intensidade nos vértices e interpola linearmente ao longo das faces poligonais de um objecto Foi desenvolvido, por Henri Gouraud, para fazer o rendering de um objecto curvo aproximado por uma malha poligonal Faz uma transição suave dos valores de intensidade entre polígonos adjacentes estimando, para cada vértice, um vector normal médio 64
Cada face poligonal de uma malha que aproxima uma superfície curva é processada da seguinte forma: 1 - determinar o vector normal médio para cada vértice do polígono 2 - aplicar um modelo de iluminação em cada vértice para obter a intensidade nessa posição 3 - interpolar linearmente as intensidades dos vértices ao longo da área projectada do polígono 1 2 3 65
Transições mais suaves Malha poligonal que aproxima o objecto Rendering com o flat-shading Rendering com o método de Gouraud 66
Método de Phong ou de interpolação de normais É mais sofisticado que o anterior, foi desenvolvido, por Phong Bui Tuong (1975) Interpola linearmente os vectores normais (em vez de os valores de intensidade) e aplica repetidamente o modelo de iluminação Resulta em imagens mais realistas com: Melhores reflexões especulares Bandas de Mach menos acentuadas Mas é mais pesado computacionalmente 67
Cada secção poligonal de uma malha que aproxima uma superfície curva é processada da seguinte forma: 1 - determinar o vector normal médio para cada vértice do polígono 2 - interpolar linearmente as normais aos vértices ao longo da área projectada do polígono 3 - aplicar um modelo de iluminação ao longo das scan lines para calcular a intensidade luminosa usando as normais interpoladas Gouraud Phong 68
Flat Gouraud Phong Highlights melhorados Bandas de Mach menos acentuadas 69
OpenGL Per Fragment Shading // vertex shader in vec4 vposition; in vec3 vnormal; // output values that will be interpolated per-fragment out vec3 fn; out vec3 fe; out vec3 fl; uniform mat4 ModelView; uniform vec4 LightPosition; uniform mat4 Projection; E. Angel and D. Shreiner: Interactive Computer Graphics 6E Addison-Wesley 2012 70
OpenGL Per Fragment Shading void main() { fn = vnormal; fe = vposition.xyz; fl = LightPosition.xyz; if( LightPosition.w!= 0.0 ) { fl = LightPosition.xyz - vposition.xyz; } } gl_position = Projection*ModelView*vPosition; 71
OpenGL Per Fragment Shading // fragment shader // per-fragment interpolated values from the vertex shader in vec3 fn; in vec3 fl; in vec3 fe; uniform vec4 AmbientProduct, DiffuseProduct, SpecularProduct; uniform mat4 ModelView; uniform vec4 LightPosition; uniform float Shininess; 72
OpenGL Per Fragment Shading void main() { // Normalize the input lighting vectors vec3 N = normalize(fn); vec3 E = normalize(fe); vec3 L = normalize(fl); vec3 H = normalize( L + E ); vec4 ambient = AmbientProduct; 73
OpenGL Per Fragment Shading float Kd = max(dot(l, N), 0.0); vec4 diffuse = Kd*DiffuseProduct; float Ks = pow(max(dot(n, H), 0.0), Shininess); vec4 specular = Ks*SpecularProduct; // discard the specular highlight if the light's behind the vertex if( dot(l, N) < 0.0 ) specular = vec4(0.0, 0.0, 0.0, 1.0); } gl_fragcolor = ambient + diffuse + specular; gl_fragcolor.a = 1.0; 74
Métodos de iluminação global: Exemplos de imagens produzidas com ray-tracing 75
Métodos de iluminação global Se se considerar a linha de vista a partir de um pixel no plano de visualização até à cena, é possível determinar que objectos são intersectados Este método chama-se ray casting Baseia-se nos métodos de óptica geométrica que determinam os percursos dos raios de luz Quando se usa projecção perspectiva, os raios divergem do centro de projecção, passam pelo centro de um pixel e continuam através da cena 76
Adicionalmente, podem lançar-se raios secundários reflectidos ou transmitidos No caso de haver raios secundários chama-se ray-tracing Raios secundários Centro de projecção Pixel no plano de visualização 77
Pixels com intensidade não atribuída (a cinzento) 2 3 Ray tracing com profundidade variável: 2, 3 e 4 raios secundários 4 78
Maior transparência 50% transparente 100% transparente 100% opaca 100% reflectora Maior reflexão 79
Principal bibliografia Hearn, D., P. Baker, Computer Graphics with OpenGL, Addison Wesley, 2004 Hearn, D., P. Baker, Computer Graphics, 2nd. Ed., Prentice Hall, 1994 Foley, J., S. Van Dam, S. Feiner, J. Hughes, Computer Graphics, Principles and Applications, 2nd. Ed., Addison Wesley, 1991 Watt, A., F. Policarpo, The Computer Image, Addison Wesley, 1998 80