Sumário Computação Gráfica Introdução Computação Gráfica Expectativas e Objetivos do Curso Aula 01 - Introdução Um Breve Histórico Whirlwind, Sage e Sketchpad Universidade de Utah Empresas Comerciais Síntese de Imagens Monitores de Vídeo Picture Elements Rasterização Objetos em 3D Percepção Tridimensional Perspectiva Conhecimento Prévio e Oclusão Densidade de Texturas Sombreamento e Sombras Efeitos Atmosféricos Profundidade de Campo Estereoscopia Vinicius Graciano Santos [email protected] 2 Bibliografia Bibliografia Real Time Rendering. Tomas Akenine-Moller, Eric Haines e Naty Hoffman. Terceira edição (2008) Computação Gráfica. Eduardo Azevedo e Aura Conci. vol. 1 (2003) 3 3 Introdução Bibliografia Computação Gráfica Computação Gráfica É a ciência e a arte da comunicação visual via uma tela de computador e seus dispositivos de interação. ◮ Síntese de imagens baseada em dados e modelos. ◮ Área de estudo interdisciplinar: ciência da computação, design, engenharia, física, matemática, etc. Mathematics for 3D Game Programming and Computer Graphics. Eric Lengyel. Terceira edição (2011) 3 5 Introdução Introdução Computação Gráfica Computação Gráfica Computação Gráfica Síntese Modelagem Dados Modelos Imagem Design Processamento Dados Modelos Imagem Processamento Digital de Imagens Visão Computacional Análise 6 6 Introdução Introdução Expectativas do Curso Objetivos do Curso Exemplos do que você irá aprender nesta disciplina: ◮ Hardware gráfico ◮ Transformações e projeções geométricas ◮ Modelos de iluminação ◮ Shaders Objetivo Principal Proporcionar aos alunos uma visão geral dos fundamentos da área de computação gráfica Exemplos do que você não irá aprender nesta disciplina: Programas de modelagem e animação (Blender, 3DS Max, etc) ◮ ◮ Métodos básicos por trás das engines e programas gráficos Programas de edição de imagens (Photoshop, GIMP, etc) ◮ ◮ Possibilitar o aprendizado de técnicas avançadas ◮ Motores para jogos (Unity, UDK, etc) ◮ Mas podem ser utilizados para exemplificar algum tópico... 8 7 Um Breve Histórico Um Breve Histórico Sketchpad (Ivan Sutherland 1963) (a) Whirlwind (MIT 1945) (b) SAGE (US Navy 1958) (c) Light Pen (SAGE) (d) Boeing Man (William Fetter 1966) 10 Um Breve Histórico Um Breve Histórico Universidade de Utah (1968) Primeira Animação (Catmull & Parke 1972) (a) Texture Mapping (Catmull 1974) (b) Shading (Blinn 1977) (c) Facial Animation (Parke 1974) (d) Bump Mapping (Blinn 1978) 12 Um Breve Histórico Um Breve Histórico Empresas Comerciais Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) (a) ILM (1975) (b) Pixar (1986) (c) Sierra Entertainment (1979) (d) Id Software (1991) Wireframe 15 Um Breve Histórico Um Breve Histórico Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) Remoção de linhas ocultas Wireframe com brilho baseado na profundidade 15 15 Um Breve Histórico Um Breve Histórico Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) Iluminação constante Iluminação facetada 15 15 Um Breve Histórico Um Breve Histórico Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) Gouraud shading Phong shading 15 15 Um Breve Histórico Um Breve Histórico Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) Modelos avançados de iluminação Patches bicúbicos 15 15 Um Breve Histórico Um Breve Histórico Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) Bump mapping e texturas projetivas Mapeamento de texturas 15 15 Um Breve Histórico Atualmente Evolução entre 1960–1980 (Pixar Shutterbug & Renderman) Os Vingadores (2012) - VisualFX Breakdown youtube.com/ILMVisualFX Reflexões 15 Síntese de Imagens Síntese de Imagens Monitores de Vídeo Varredura Fixa Varredura Aleatória ◮ Como são formadas as imagens na tela de um computador? 18 Síntese de Imagens Monitores de Vídeo Varredura Aleatória Conversão entre gráficos Gráficos vetoriais ◮ Gráficos raster/matriciais ◮ Objetos são representados por conjuntos geométricos: ◮ Objetos são amostrados em uma grade regular: ◮ ◮ Rasterização Varredura Fixa ◮ ◮ 19 Síntese de Imagens Retas Curvas Polígonos. ◮ ◮ ◮ Picture elements (pixels) Matrizes de pixels Frame buffer. ◮ Eficiência depende do número de objetos. ◮ Eficiência independe do número de objetos. ◮ Não propensa a serrilhados ◮ Propensa a serrilhados Gráficos Vetoriais Observações: ◮ Monitores de varredura aleatória estão obsoletos para CG. ◮ Monitores atuais podem apresentar outros padrões de varredura fixa. Gráficos Raster Reconhecimento de Padrões 20 Síntese de Imagens Síntese de Imagens Picture Elements Picture Elements Picture Element (Pixel): Um ponto físico em um gráfico raster/matricial. ◮ Geralmente é representado por três ou quatro canais (RGB ou RGBA). ◮ Cada canal possui 8 bits (0–255 em decimal). ◮ Modelo aditivo de cor: COR = 01101110 | {z } 01101100 | {z } 11001101 | {z } = 110R + 108G + 205B 110 ◮ 108 205 Tamanho de uma imagem de 800 × 600 pixels com três canais: (800 × 600 pixels) × (8 bits) × (3 canais) = 11520000 bits ≈ 1.36 MBytes Pixels vistos através de um microscópio 23 22 Síntese de Imagens Síntese de Imagens Picture Elements Picture Elements Modo de cor direto: Modo de cor indexado: ◮ Os valores de cada pixel são armazenados diretamente na matriz. ◮ Os valores de cada pixel são armazenados indiretamente na matriz. ◮ Ocupa muito espaço se houver poucas cores na imagem. ◮ Ocupa muito espaço se houver muitas cores na imagem. 253 255 99 253 255 99 253 255 99 253 255 99 253 255 99 253 255 99 Imagem Direta 253 255 99 22 122 192 253 255 99 51 51 51 253 255 99 253 255 99 253 255 99 253 255 99 253 255 99 253 255 99 51 51 51 253 255 99 253 255 99 253 255 99 253 255 99 253 255 99 51 51 51 253 255 99 253 255 99 22 122 192 253 255 99 51 51 51 253 255 99 253 255 99 253 255 99 253 255 99 253 255 99 253 255 99 253 255 99 253 255 99 (6 × 6 pixels) × (8 bits) × (3 canais) = 864 bits Paleta Imagem Indexada 2 2 2 2 2 2 0 2 1 2 2 1 2 1 (22, 122, 192) 2 2 2 2 2 2 2 0 2 2 0 2 2 2 0 0 2 2 2 2 2 2 2 2 (51, 51, 51) 2 (253, 255, 99) (6 × 6 pixels) × (2 bits) + (3 cores) × (3 canais) × (8 bits) = 144 bits 25 Síntese de Imagens Síntese de Imagens Profundidade de Cor Profundidade de Cor Profundidade de Cor (quantização): ◮ Número de bits em cada canal ◮ Número total de bits utilizado para representar uma cor ◮ Cuidado: várias definições! ◮ bpp - bits por pixel ◮ bpc - bits por canal ◮ bpc - bits por cor ◮ bps - bits por sample (amostra) Exemplos: Monocromático: 1 bpp Escala de cinza: 8 bpp High color: 16 bpp - 4 bpc RGBA True color: 24 bpp - 8 bpc RGB Observação: N bits podem representar 2N valores diferentes. 1 bpp – 2 cores 26 Síntese de Imagens Síntese de Imagens Profundidade de Cor Profundidade de Cor 2 bpp – 4 cores 3 bpp – 8 cores Síntese de Imagens Síntese de Imagens Profundidade de Cor Profundidade de Cor 4 bpp – 16 cores 5 bpp – 32 cores Síntese de Imagens Síntese de Imagens Profundidade de Cor Profundidade de Cor – Dither Dither (dithering): Padrão aplicado com o intuito de minimizar o erro de quantização na ausência de bits suficientes para representar uma imagem. ◮ Representa mais cores com menos bits. ◮ Trade-off entre resolução e quantização. ◮ Efeito baseado na percepção humana. ◮ Bastante utilizado por jornais para economia na impressão. 8 bpp – 256 cores 28 Síntese de Imagens Síntese de Imagens Profundidade de Cor – Dither Profundidade de Cor – Dither 1 bpp – 2 cores (SEM DITHER) 1 bpp – 2 cores (COM DITHER) Síntese de Imagens Síntese de Imagens Profundidade de Cor – Dither Profundidade de Cor – Dither 2 bpp – 4 cores (SEM DITHER) 2 bpp – 4 cores (COM DITHER) Rasterização de Linhas Rasterização de Linhas Algoritmo de Bresenham Algoritmo de Bresenham ◮ ◮ O algoritmo de Bresenham rasteriza uma linha em uma grade regular. ◮ Utiliza apenas aritmética inteira → mais eficiente ◮ Todas as placas de vídeo implementam alguma versão desse algoritmo. Exemplo: Rasterizar uma linha do ponto (x0 , y0 ) a (x9 , y5 ). 30 31 Rasterização de Linhas Rasterização de Linhas Algoritmo de Bresenham Algoritmo de Bresenham ◮ O primeiro pixel é fácil: (x0 , y0 ) ◮ 31 Qual pixel deve ser o próximo? (x1 , y0 ) ou (x1 , y1 )? 31 Rasterização de Linhas Rasterização de Linhas Algoritmo de Bresenham Algoritmo de Bresenham ◮ Ache a distância de y0 e y1 para a reta e pegue a mais próxima. ◮ O processo se repete até chegar ao pixel (x9 , y5 ). 31 31 Rasterização de Linhas Rasterização de Linhas Algoritmo de Bresenham Algoritmo de Bresenham ◮ O processo se repete até chegar ao pixel (x9 , y5 ). ◮ 31 O processo se repete até chegar ao pixel (x9 , y5 ). 31 Rasterização de Linhas Rasterização de Triângulos Algoritmo de Bresenham Algoritmo de Bresenham com Preenchimento ◮ O processo se repete até chegar ao pixel (x9 , y5 ). ◮ Exemplo: Rasterizar um triângulo com preenchimento. 31 32 Rasterização de Triângulos Rasterização de Triângulos Algoritmo de Bresenham com Preenchimento Algoritmo de Bresenham com Preenchimento ◮ Execute simultaneamente o algoritmo de Bresenham para as duas linhas que vão de cima para baixo. ◮ 32 Execute simultaneamente o algoritmo de Bresenham para as duas linhas que vão de cima para baixo. 32 Rasterização de Triângulos Rasterização de Triângulos Algoritmo de Bresenham com Preenchimento Algoritmo de Bresenham com Preenchimento ◮ Preencha os pixels horizontalmente. ◮ O processo se repete até completar o triângulo. 32 32 Rasterização de Triângulos Rasterização de Triângulos Algoritmo de Bresenham com Preenchimento Algoritmo de Bresenham com Preenchimento ◮ O processo se repete até completar o triângulo. ◮ 32 O processo se repete até completar o triângulo. 32 Rasterização de Polígonos Rasterização de Polígonos Triangulação Triangulação ◮ Para rasterizar um polígono, separe-o em triângulos. ◮ Para rasterizar um polígono, separe-o em triângulos. ◮ Todo polígono com N arestas pode ser triangulado em N − 2 triângulos. ◮ Geometria computacional 33 33 Rasterização de Polígonos Rasterização de Polígonos Triangulação Triangulação ◮ Para rasterizar um polígono, separe-o em triângulos. ◮ Para rasterizar um polígono, separe-o em triângulos. ◮ Todo polígono com N arestas pode ser triangulado em N − 2 triângulos. ◮ Todo polígono com N arestas pode ser triangulado em N − 2 triângulos. ◮ Geometria computacional ◮ Geometria computacional ◮ Rasterize cada triângulo com o algoritmo de Bresenham. ◮ Rasterize cada triângulo com o algoritmo de Bresenham. ◮ Atenção: As arestas internas não existem no polígono original, logo elas devem ser coloridas com a cor de preenchimento. 33 33 Rasterização de Curvas ◮ Rasterização de Curvas Para rasterizar uma curva qualquer: ◮ Para rasterizar uma curva qualquer: ◮ Aproxime a curva por um polígono. 34 Rasterização de Curvas 34 Rasterização de Curvas ◮ Para rasterizar uma curva qualquer: ◮ Para rasterizar uma curva qualquer: ◮ Aproxime a curva por um polígono. ◮ Aproxime a curva por um polígono. ◮ Triangule ou tessele o polígono. ◮ Triangule ou tessele o polígono. ◮ Rasterize os triângulos. 34 34 Rasterização de Curvas Objetos em 3D Placa de Vídeo: Basicamente, a placa de vídeo é um hardware especializado em rasterizar triângulos em uma grade bidimensional. ◮ Para rasterizar uma curva qualquer: ◮ Aproxime a curva por um polígono. ◮ Triangule ou tessele o polígono. ◮ Dezenas, centenas, milhares, milhões de triângulos. ◮ Rasterize os triângulos. ◮ Triângulos são objetos naturalmente de duas dimensões. ◮ Fim! ◮ Como é possível renderizar um objeto de três dimensões? 34 35 Objetos em 3D 3D é uma ilusão: 3D é uma ilusão! 36 ◮ Você nunca jogou um jogo virtual em 3D! ◮ Você nunca modelou um personagem virtual em 3D! ◮ Sua placa de vídeo não desenha gráficos 3D! ◮ Tudo é feito em 2D! ◮ Seu cérebro é enganado para achar que os objetos são 3D! 37 Objetos em 3D Percepção Tridimensional Percepção de Profundidade: Humanos possuem a habilidade visual de perceber, com relativa facilidade, a profundidade em imagens bidimensionais. ◮ Informações monoculares e binoculares (estereoscópicas). ◮ Existem vários tipos de informações de profundidade, mas vamos exemplificar apenas alguns. Isso não é um golfinho em 3D São vários triângulos 2D com cores diferentes 40 38 Percepção Tridimensional Perspectiva: Percepção Tridimensional Perspectiva: ◮ Objetos distantes são menores do que objetos próximos. ◮ Objetos distantes são menores do que objetos próximos. ◮ Objetos orientados sobre o ângulo de visão são mais rasos. ◮ Objetos orientados sobre o ângulo de visão são mais rasos. Percepção Tridimensional Percepção Tridimensional Conhecimento Prévio e Oclusão: Conhecimento Prévio e Oclusão: Ajudam a determinar a forma, as dimensões e a ordenação dos objetos em relação à profundidade. Ajudam a determinar a forma, as dimensões e a ordenação dos objetos em relação à profundidade. Qual objeto está na frente? Qual objeto está na frente? 42 Percepção Tridimensional Conhecimento Prévio e Oclusão: 42 Percepção Tridimensional Conhecimento Prévio e Oclusão: Ajudam a determinar a forma, as dimensões e a ordenação dos objetos em relação à profundidade. Ajudam a determinar a forma, as dimensões e a ordenação dos objetos em relação à profundidade. Triângulo cortado... Qual objeto está na frente? Percepção de Profundidade Percepção de Profundidade Densidade das Texturas: Densidade das Texturas: Variações nas texturas em relação ao espaço indicam profundidade. Variações nas texturas em relação ao espaço indicam profundidade. 43 Percepção de Profundidade Sombreamento (shading): Variação na intensidade da iluminação de acordo com a distância e curvatura dos objetos. 43 Percepção de Profundidade Sombreamento (shading): Variação na intensidade da iluminação de acordo com a distância e curvatura dos objetos. Percepção de Profundidade Percepção de Profundidade Efeitos Atmosféricos: Sombras: ◮ Criadas por objetos que ocludem a luz. ◮ Auxiliam a compreender a profundidade de maneira contínua. A interação da luz com partículas no ar reduz o contraste e altera o matiz de objetos muito distantes. 45 Percepção de Profundidade 46 Percepção de Profundidade Efeitos Atmosféricos: Profundidade de Campo: A interação da luz com partículas no ar reduz o contraste e altera o matiz de objetos muito distantes. 46 ◮ Objetos fora de foco ficam embaçados. ◮ Geralmente estão muito próximos ou muito longe da câmera. Percepção de Profundidade Percepção de Profundidade Estereoscopia: Profundidade de Campo: ◮ Objetos fora de foco ficam embaçados. ◮ Geralmente estão muito próximos ou muito longe da câmera. Técnica utilizada para aumentar a percepção da profundidade a partir da análise de duas imagens obtidas em pontos diferentes. 47 48