Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica - 12 jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav
Realismo Visual Criar imagens sintéticas realistas é o objetivo final da computação gráfica. O realismo visual é composto pelas técnicas de tratamento computacional aplicadas aos objetos sintéticos gerados, com o objetivo de criar-lhes uma imagem o mais próxima da realidade que se teria se eles fossem construídos e filmados. O realismo é fundamental nas simulações, no entretenimento, na educação e muitas outras aplicações.
Realismo Visual Podemos considerar o realismo em duas etapas. Estática: Onde são tratados os objetos e cenas estáticas é trabalhado o chamado realismo fotográfico. Dinâmica: A parte dinâmica esta relacionada ao movimento da cena e seus personagens, chamada de animação.
Rendering A computação gráfica trata da síntese de imagens através do computador. Sintetizar uma imagem (uma cena ou objeto) é criá-la em termos da definição dos dados dos objetos que a compõem. Isso se faz a partir da geometria da cena, das informações sobre os materiais de que são feitos os objetos (suas cores e texturas), das condições de iluminação ambiente e da posição de observação da cena. Nesse processo de criação sintética, é denominado rendering a fase de introdução nas cenas, do realismo fotográfico.
O termo Rendering Não existe uma tradução fora da área computacional adequada para essa palavra; Basicamente, podemos descrevê-la por realismo visual Podemos interpretar o processo de rendering como o de converter dados em uma imagem realística ou simplesmente sintetizar um objeto ou cena até ter-se deles uma aparência de algo real e não de formas inteiramente criadas no computador.
Fases do processo de Realismo Visual Este processo envolve sete fases distintas. Nem todas usadas em todas as aplicações. O mais usual é que um trabalho seja apresentado em um nível de realismo adequado ao seu uso. Principalmente porque ao aumentar-se o realismo de uma cena aumenta-se também seu tempo de processamento e custo de geração.
Fases do processo de Realismo Visual Na primeira fase, tem-se a construção do modelo que conterá todas as informações para o processo de realismo visual. Essa primeira fase consiste na utilização de alguma técnica de modelagem. A segunda fase aplica transformações lineares no modelo de modo que ele tenha aparência tridimensional nos diversos dispositivos (geralmente bidimensionais). Essa fase consiste, então, na utilização de projeções e perspectivas adequadas.
Fases do processo de Realismo Visual Na terceira fase, considera a eliminação de polígonos ou faces escondidas devido a posição relativa entre os objetos da cena e o observador (culling back-faces). Na quarta fase, são desconsideradas as partes das cenas que não serão mostradas, são chamados recortes. Imagine que você tenha uma infinidade de coisas para ver, para algumas sua visão será limitada, por que estão encobertas ou não chamam atenção. Isso é chamado de clipping (assim como o rendering não tem um significado literal) tem sentido no contexto.
Fases do processo de Realismo Visual A quinta fase se encarrega em converter a representação tridimensional para pixels. Seja lá qual for o sistema de coordenadas que se esteja usando, os dados serão levados para um conjunto de coordenadas do dispositivo em que será mostrado. Essa conversão de coordenadas leva os dados do modelo para o mundo digital. Linhas e áreas serão transformadas em conjuntos de pixels. Esse processo é chamado rasterização.
Fases do processo de Realismo Visual A sexta fase é de certa maneira uma continuação da terceira, pois trata também da eliminação de partes de um objeto que devem ser removidas. Só que agora essas partes são devidas à interferência dos diversos objetos presentes na cena,onde, devido a sua posição relativa, pode ocorrer que uns fiquem na frente de partes de outros. Muitos autores englobam estas duas partes no que se chama tratamento de partes escondidas (hidden).
Fases do processo de Realismo Visual Na última fase, o realismo fotográfico começa a ser realmente tratado e percebido. E para que seja feito adequadamente deve-se levar em conta as luzes presentes na cena, suas intensidades e direções (em relação aos objetos). Também devem ser consideradas todas as características das superfícies representadas: transparência, brilho, reflexão e textura. Ainda devem ser consideradas as sombras que os diversos objetos fazem entre si e nas superfícies em que se apóiam. O nível de realismo dessa fase pode ser tão sofisticado quanto a aplicação precisar.
Realismo por passadas A construção de uma cena realística é um processo incremental. Essa forma de criação de cenas realísticas é denominada de realismo por passadas. É a forma utilizada pela grande maioria dos sistemas para geração de cenas realísticas Esse processo permite que os atributos de uma cena sejam renderizados separadamente da sua geração ou modelagem. Diversas técnicas e softwares participam do processo de inclusão do grau de realismo desejado a cena.
Realismo por passadas Uma série de bons motivos tornou a renderização por passadas o padrão da computação gráfica atual. Economia de memória: pois nessa técnica não precisam ser colocados todos os objetos de uma vez para o render. Facilidade da introdução de modificações: se precisarmos alterar somente alguns elementos de uma cena como luzes, sombras ou cores, não será necessário perder ou refazer todo o processo de renderização anterior.
Realismo por passadas Um outro motivo que torna mais eficiente essa forma de renderização é a possibilidade de maior utilização das imagens estáticas. Por exemplo, se já temos em uma animação uma cena observada a partir de um ponto estático (como um filme com uma câmera fixa), não será necessário renderizar toda a cena, apenas os pontos que sofrerem modificações. Essa técnica permite também a mixagem com objetos ou texturas reais obtidas por captura, ou seja, o render por passadas permite uma integração com imagens fotográficas, acrescentando sombras, texturas complexas ou elementos do mundo real (como rostos) à cena.
Rasterização Representação Vetorial x Matricial Normalmente, gráficos são definidos através de primitivas geométricas como pontos, segmentos de retas, polígonos, etc Representação vetorial Dispositivos gráficos podem ser pensados como matrizes de pixels (rasters) Representação matricial Rasterização é o processo de conversão entre representações vetorial e matricial Técnicas de antialiasing podem ser empregadas, usualmente extraindo um custo em termos de desempenho
Rasterização Rasterização é um processo de amostragem Domínio contínuo discreto Problemas de aliasing são esperados Cada primitiva pode gerar um grande número de pixels Rapidez é essencial Em geral, rasterização é feita por hardware
Rasterização de Segmentos de Reta Segmento de reta entre P 1 = (x 1, y 1 ) e P 2 = (x 2, y 2 ) Já foi recortado com relação ao viewport Objetivo é pintar os pixels atravessados pelo segmento de reta Na verdade, nem todos, apenas os mais próximos Reta de suporte dada por a x + b y + c = 0 Queremos distinguir os casos Linhas ~ horizontais computar y como função de x Linhas ~ verticais computar x como função de y
Amostragem, Aliasing, e Anti-aliasing A linha, que no universo físico é contínua, é amostrada em uma matriz finita 2D de pixels. Tal discretização pode causar distorções visuais como cisalhamento ou efeito de escada. Essas distorções são chamadas de aliasing. Para reduzir o problema,usa-se uma técnica chamada antialiasing. A técnica consiste em uma superamostragem (uma vez que o aliasing é causada por uma subamostragem)
Superamostragem Superamostragem = Amostrar um objeto numa resolução maior do que será reconstruído. Dividir os pixels em subpixels (i.e. 9), aplicar o algoritmo de Bresenham nesses sub-pixels Contar o número de sub-pixels acesos por pixel O pixel será aceso com intensidade proporcional ao número de sub-pixels acesos. 3 3 1 3 3 2
Exemplo de Anti-aliasing em Linhas Observe que quando a cor de fundo não é preto, o antialiasing deve fazer uma composição da intensidade com a cor de fundo. Anti-aliasing é necessário não só para linhas, mas também para polígonos e texturas (o que já é mais complicado)
Remoção de elementos ocultos Remoção de elementos ocultos (eliminação de linhas e superfícies escondidas). A solução eficiente de problemas de visibilidade é o principal passo do processo de criação de cenas realísticas. Esse problema lida freqüentemente com a determinação da visibilidade de linhas e superfícies. Existem diversos algoritmos usados para determinar as linhas, arestas, superfícies ou volumes que são visíveis ou não para um observador localizado em um ponto específico no espaço. Atualmente, são implementados nas placas gráficas. Algoritmos Z-Buffer, do Pintor, Cálculo da Normal...
Remoção de elementos ocultos E
Remoção de elementos ocultos É importante existir uma forma de identificação de linhas, arestas ou superfícies visíveis e não visíveis. Decidir se a mesma deverá ser traçada ou não Conservar a fidelidade, resolução e agilidade de representação Algoritmos de remoção de faces ocultas (HSR) foram desenvolvidos na década de 70, mas foram abandonados por que requeriam alto processamento e grande quantidade de memória O avanço tecnológico e barateamento de memória reintroduziram alguns desses algoritmos. Os diferentes algoritmos deverão realizar as seguintes tarefas: Ler e armazenar em matriz as coordenadas 3D dos objetos Localizar no espaço 3D a posição do observador, para definição dos parâmetros de visibilidade Cálculo do vetor normal 3D de cada face do objeto Cálculo do vetor da linha de visibilidade para cada face do objeto
Remoção de elementos ocultos Os diferentes algoritmos deverão realizar as seguintes tarefas (cont.): Realizar o teste de visibilidade, verificando o ângulo da normal da face com a linha de visibilidade. Se 90º < < 180º - Superfície invisível Se - 90º < < 90º - Superfície visível Definir os vértices ou cantos das faces do objeto e armazená-los Verificar os cantos visíveis, com seus respectivos posicionamentos Traçar as arestas das faces visíveis, que revelarão o objeto sob determinado ponto de vista.
Z-Buffer Z-buffer Buffers são áreas reservadas de memória utilizadas para determinados propósitos. Em aplicações de animação, por exemplo, o double-buffer permite que as sucessivas renderizações sejam feitas de modo suave, sem o efeito indesejável de piscar entre cada atualização da janela de visualização. O z-buffer é bastante comum em aplicações gráficas e é utilizado para calcular a distância do observador e remover superfícies ou partes ocultas de objetos sobrepostos. glutinitdisplaymode(glut_double GLUT_RGB GLUT_DEPTH)