Loading
Nota de Estudos
Study Reminders
Support
Text Version

Introdução às Pipelinas 3D

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Olá e bem-vindo à palestra número 4 no curso Computer Graphics. a série de etapas que estão envolvidas na geração de valores de cores estão juntas chamadas pipeline gráfico. Trata-se de terminologia muito importante e em nossas palestras subsequentes, discutiremos em detalhes as etapas do pipeline. Por isso, obtenhamos algumas ideias introdutórias sobre o pipeline e suas etapas.
Há vários estágios como mencionei, o primeiro estágio está essencialmente definindo os objetos. Por isso, quando falamos em criar uma cena ou uma imagem, ela contém objetos. Agora é preciso que haja alguma maneira de representar esses objetos no computador. Aquela atividade onde definimos objetos que vão ser as partes das imagens constituem a primeira etapa do pipeline que se chama objeto

estágio de representação. Por exemplo, como você pode ver nesta figura na tela queremos gerar a imagem de um cubo com valores de cores como mostrado na parte da mão direita da tela.
Agora esta imagem contém um objeto que é um cubo e no lado esquerdo aqui nós definimos este cubo. Por isso, quando falamos em definir o que queremos dizer essencialmente como podemos entender intuitivamente, definir o cubo envolve a especificação dos vértices ou bordas com relação a algum quadro de referência que é a definição neste caso simples que são o que são os vértices ou o que são as bordas como par de vértices.
É claro que o cubo é um objeto muito simples, para objetos mais complexos podemos exigir definições mais complexas, formas mais complexas de representar os objetos.
Assim sendo, várias técnicas de representação estão disponíveis para uma criação eficiente e uma manipulação eficiente das imagens. Observe aqui no termo eficiente, portanto, quando falamos deste termo eficiente, essencialmente do que nos referimos, nos referimos ao fato de que as exibições são diferentes, as plataformas de hardware subjacentes são diferentes. Por isso, sejam quais forem os recursos computacionais que temos para exibir algo em um desktop ou um laptop provavelmente serão diferentes com relação a qualquer coisa que tenhamos para exibir algo em um pequeno dispositivo móvel ou em uma tela de dispositivo vestível.
Assim, as nossas técnicas de representação devem ser capazes de utilizar os recursos disponíveis na medida do possível e devem ser capazes de permitir que os usuários manipulem imagens em uma configuração interativa. Por isso, a eficiência é essencial com relação aos recursos de computação disponíveis e à forma de fazer o uso ideal desses recursos. Agora uma vez que definimos esses objetos, esses objetos são então passados através dos estágios de pipeline subsequentes para obter e renderizar imagens na tela. Sendo assim, o primeiro estágio está definindo os objetos e nos estágios subsequentes, tiramos essas definições de objetos como entrada e geramos representação de imagem, bem como renderemos na tela.
Quais são esses estágios subsequentes? Primeira delas é a transformação de modelagem que é a segunda etapa do pipeline. Agora como eu disse quando estamos definindo um objeto onde se considerando algum quadro de referência com relação ao qual estamos definindo o objeto. Por exemplo, o cubo que já vimos anteriormente. Para definir o cubo, precisamos definir suas coordenadas mas coordenadas com relação a quê? Lá vamos supor certos quadros de referência.
Agora aqueles quadros de referência com relação aos quais os objetos são definidos são mais popularmente chamados de coordenadoria local do objeto. Assim, os objetos são tipicamente definidos em seu próprio sistema de coordenadas ou local. Agora vários objetos são colocados juntos para criar uma cena, então cada objeto é definido em seu próprio sistema de coordenadas ou local e quando estamos combinando eles estamos essencialmente tentando combinar esses diferentes quadros de referência.
Ao combinar esses diferentes objetos, estamos criando uma nova montagem de objetos em um novo quadro de referência que tipicamente é chamado de sistema de coordenadas mundo. Pegue o exemplo mostrado sobre esta figura. Por isso, aqui como você pode ver há muitos objetos, alguns cubos, esferas e outros objetos, cilindros. Cada um desses objetos é definido em seu próprio sistema de coordenadas.
Agora em toda essa cena, composta por todos os objetos, esta é toda a cena, aqui reunimos todos aqueles objetos de seus próprios sistemas de coordenadas. Mas aqui novamente estamos assumindo um outro sistema de coordenadas em termos dos quais esta montagem de objetos é definida. Assim, aquele sistema de coordenadas onde os montamos é chamado de sistema de coordenadas mundial. Por isso, há uma transformação, transformando um objeto de seu próprio sistema de coordenadas para o sistema de coordenadas mundial. Essa transformação é chamada de transformação de modelagem que é a segunda etapa do pipeline gráfico.
Por isso, na primeira etapa definimos os objetos, na segunda etapa trazemos esses objetos juntos no sistema de coordenadas do mundo através da transformação de modelagem que também é, às vezes, conhecida como a transformação geométrica. Assim, tanto os termos são usados como transformação de modelagem ou transformação geométrica que é a segunda etapa do pipeline gráfico.
Agora uma vez que a cena é construída, os objetos precisam ser atribuídos cores que é feito na terceira fase do duto chamado iluminação ou estágio de iluminação. Veja por exemplo as imagens mostradas aqui. Na figura esquerda temos simplesmente o objeto, na figura certa temos a cor. Por isso, o, nós aplicamos cores nas superfícies de objetos. Agora como você pode ver a forma como nós aplicamos cores, ficou claro qual superfície está mais próxima do espectador e qual superfície é mais longe.
Ou seja, nos dá uma sensação de 3D, enquanto que sem cores como a mostrada aqui, essa claridade não está lá. Por isso, para obter uma imagem realista o que nos dá uma sensação de 3D, temos que atribuir cores. Atribuição de cores é o trabalho da terceira fase que se chama iluminação ou estágio de iluminação.
Agora como provavelmente você está ciente da cor é um fenômeno psicológico e isso está ligado à maneira como a luz se comporta ou em outras palavras, isso está ligado às leis da ótica. E na terceira etapa, o que fazemos? Nós essencialmente tentamos mimetizar essas leis ópticas, tentamos imitar a maneira como vemos cores ou percebemos cores no mundo real e com base nisso tentamos designar cores nas cenas sintetizadas.
Então primeiro definimos um objeto, trazemos objetos juntos para criar uma cena, terceira etapa atribuímos cores às superfícies de objetos no local. Agora até este ponto, tudo o que estávamos fazendo em 3D

configuração no sistema de coordenadas mundial. Agora quando chegamos a ver uma imagem, a tela do computador é
2D, portanto, essencialmente o que exigimos é um mapeamento a partir desta cena de coordenadoria mundial de 3D para tela de computador 2D. Esse mapeamento é feito na quarta fase que está visualizando a transformação.
Agora esta etapa realizamos várias atividades que é semelhante a tirar uma fotografia. Considere-se como fotógrafo, você tem uma câmera e está capturando alguma foto de uma cena.
O que você faz? Você coloca a câmera perto do seu olho, concentra-se em algum objeto que deseja capturar e, em seguida, capturá-lo no sistema da câmera e também isto é seguido ao vê-lo no visor da câmera ou na tela da câmera, se você estiver tendo uma câmera digital. Agora esse processo de tirar uma fotografia pode ser matematicamente analisado para ter várias operações intermediárias que por si só forma um pipeline, que é um pipeline dentro do pipeline gráfico mais amplo. Por isso, a própria transformação de visualização do estágio em si é o pipeline que faz parte do pipeline geral gráfico. Agora este pipeline onde transformamos uma cena de coordenadas do mundo 3D para uma cena de avião de visualização 2D é chamado de pipeline de visualização.
Agora neste pipeline o que fazemos? Nós primeiro configuramos um sistema de coordenadas de câmeras que também é referido como um sistema de coordenadas de visualização. Em seguida, a cena de coordenadoria mundial é transformada no sistema de coordenadas de visualização. Este estágio é chamado de transformação de visualização. Por isso, temos configuração de um novo sistema de coordenadas que é um sistema de coordenadas de câmeras e depois transformamos a cena de coordenadas do mundo para a cena coordenadora da câmera.
A partir daí fazemos outra transformação, agora transferimos a cena para um avião de visão 2D. Agora esse estágio é chamado de transformação de projeção. Por isso, temos visão de transformação seguida de transformação de projeção. Para projeção, definimos uma região em um espaço de coordenadas de visualização que é chamado de volume de visualização.
Por exemplo, na figura mostrada aqui, como você pode ver este frustum está definindo um volume de visualização, o frustum mostrado aqui está definindo um volume de visualização. Por isso, queremos capturar objetos que estão presentes dentro deste volume, objetos externos que não queremos capturar. Isso é tipicamente o que fazemos quando tiramos uma fotografia, selecionamos alguma região no local e depois a capturamos. Assim, o objeto que estiver fora não será projetado e o que estiver lá dentro do volume será projetado. Por isso, aqui exigimos um processo adicional, um processo para remover objetos que estão fora do volume de visualização. Agora esses objetos podem estar totalmente fora ou podem estar parcialmente fora. Por isso, em ambos os casos precisamos removê-los. Assim, quando um objeto está totalmente fora nós o removemos completamente e quando um objeto está parcialmente fora nós recortamos o objeto e mantemos apenas a parte que está dentro do volume de visualização, a parte externa que removemos. O processo geral é chamado de clipping.
Também quando estamos projetando, consideramos uma posição de espectador onde o fotógrafo está situado e em que direção ele ou ela está olhando. Com base nessa posição, alguns objetos podem aparecer totalmente visíveis, alguns podem aparecer parcialmente visíveis, enquanto que os outros objetos se tornarão invisíveis.
Mas todos eles podem estar dentro do mesmo volume.
Por exemplo, com relação a essa posição de visualização em particular, alguns objetos podem obter, como este objeto se ele estiver por trás desse objeto então ele será invisível. Se estiver parcialmente para trás, então será parcialmente visível e se eles não estiverem alinhados na mesma direção, então ambos estarão plenamente visíveis.
Assim você cuida desse fato também antes da projeção o que requer algumas operações adicionais, cálculos. Por isso, para capturar esse efeito de visualização, as operações que executamos são tipicamente chamadas operações de remoção de superfície ocultas ou operações de detecção de superfície igualmente visíveis. Assim, para gerar efeito de visualização realista junto com recorte o que fazemos é realizar a remoção de superfície oculta ou operações de detecção de superfície visíveis.
Por isso, após clipping e operações de remoção de superfície ocultas, projetamos a cena no plano de visão.
Esse é um plano de definição no sistema, no sistema de coordenadas de visualização.
Agora, há mais uma Suposição de transformação na figura da mão direita, suponha que este seja o objeto projetado aqui no plano de visão. Agora o objeto pode ser exibido em qualquer porção de uma tela de computador, ele precisa não estar exatamente na mesma porção que no plano de visualização.
Por exemplo, este objeto pode ser exibido em um canto do display. Por isso, vamos diferenciar dois conceitos aqui; um é o plano de visualização que é tipicamente chamado de janela, outro é a região de exibição na tela real de exibição que chamamos de viewport. Assim, mais uma transformação permanece no pipeline de visualização que está transferindo o conteúdo da janela para o viewport. Assim, isso é chamado de transformação da janela para-viewport.
Por isso, em síntese o que podemos dizer é que, na quarta fase há 3 transformações. O que são essas transformações? Primeiro transformamos de cena coordenadora mundial para câmera ou vista de coordenadas. Em seguida, a partir de cena de coordenadoria de câmeras, realizamos a transformação de projeção para visualizar plano, então a janela do plano de visualização é transformada para o viewport. Portanto, essas são as 3 transformações.
Junto com aquelas há 2 operações principais que executamos aqui; uma é recorte que está recortando os objetos que ficam fora do volume de visualização e o outro é remoção de superfície oculta o que significa criar um efeito realista, visualizar efeito com relação ao posicionamento do espectador. Portanto, essa é a quarta fase.
Então primeiro definimos objetos na primeira etapa, na segunda etapa combinamos esses objetos na cena coordenadora mundial, na terceira etapa designamos cores para as superfícies de objetos na cena coordenadora mundial, na quarta etapa transformamos no cenário de coordenadoria mundial para a imagem no visor através de uma série de transformações que formam um sub-setor de sub-condutas dentro do pipeline geral.
E esses estágios de sub-pipeline estão visualizando transformação, transformação de projeção e transformação de janela para viewport. Este sub-pipeline é chamado de pipeline de visualização que faz parte do pipeline gráfico geral e na quarta etapa juntamente com esses pipeline de visualização também temos que mais operações realizadas que é recorte e remoção de superfície oculta.
Mais uma etapa permanece que é a quinta etapa que é chamada de conversão de varredura ou renderização. Agora mencionamos anteriormente que nos transformamos em um viewport. Agora o viewport é uma representação abstrata da exibição real. No display real se você se lembra de nossa discussão em nossas exibições de rastro, mencionamos que o display contém uma grade de pixels.
Assim, essencialmente o display contém locais que são discretos, não podemos supor que qualquer ponto pode ter um ponto correspondente na tela. Por exemplo, se na nossa imagem temos um vértice no local 1,5 e 2,5, na tela não podemos ter tal localização porque na tela só temos valores inteiros como coordenados devido à natureza discreta da grade. Por isso, temos um pixel localizado a 2, 2 ou 3, 3 ou 1, 1 ou 1, 2 algo assim em vez dos números reais 1,5, 2,5.
Por isso, não podemos ter um local de pixel no digamos 1,5, 2,5 mas podemos ter locais de pixel apenas no valor inteiro digamos 1, 1; 2, 2 e assim por diante. Por isso, se obtemos um vértice em nossa imagem localizada a 1,5, 2,5 então devemos mapeá-lo para essas coordenadas de número inteiro. Aquele estágio em que realizamos este mapeamento é chamado de estágio de conversão de varredura que é a quinta e última etapa do pipeline. Por exemplo, considere essas linhas mostradas aqui, os pontos finais são 2, 2 e 7, 5. Agora todos os pontos intermediários podem não ter valores de coordenadas inteiros mas no display final, no display real podemos ter pixels, esses círculos apenas em valores inteiros coordenados.
Por isso, temos que mapear essas coordenadas não inteiros para coordenadas de número inteiro. Esse mapeamento é o trabalho desta quinta etapa ou estágio de conversão de escaneamento que também é chamado de rasterização. E como você pode vê-lo pode levar a alguma distorção porque devido ao mapeamento podemos não obter os pontos exatos na linha, em vez disso podemos ter que nos satisfazer com alguns pontos aproximados que fica perto da linha real. Por exemplo, este pixel aqui ou este pixel aqui não é exatamente na linha mas o pixel possível mais próximo possível com relação à linha.
Então qual é a preocupação? Como minimizar as distorções? Agora essas distorções tem um nome técnico que é chamado de efeito aliasing, de onde esse nome teve origem discutiremos mais tarde. Por isso, a nossa preocupação é eliminar ou reduzir o efeito de aliasing na medida do possível para que não tenhamos de ver demasiados distorções, não conseguimos perceber demasiados distorções. Para abordar esta preocupação, são utilizadas várias técnicas que são chamadas de técnicas anti-aliasing. Estes são usados para fazer com que a imagem pareça o mais suave possível para reduzir o efeito de aliasing.
Assim, o controlador de exibição realmente realiza todos esses estágios para finalmente obter os valores de intensidades para serem armazenados no buffer de quadros ou memória de vídeo. Agora esses estágios são realizados através de software, é claro com suporte de hardware adequado.
Para um programador de um sistema gráfico, é claro que não é necessário aprender sobre os detalhes intrincados de todos esses estágios, eles são bastante envolve muitos conceitos teóricos, muitos modelos teóricos. Agora se um programador gráfico for derrubado com toda essa teoria, os modelos então a maior parte do tempo serão consumidos entendendo a teoria em vez de realmente desenvolver o sistema. Por isso, para abordar esta preocupação de um programador o que se faz é essencialmente desenvolvimento de bibliotecas, bibliotecas gráficas.
Por isso, há esse background teórico que está envolvido na geração de imagem 2D. O programador não precisa nem sempre implementar as etapas do gasoduto para implementar plenamente o conhecimento teórico, isso seria naturalmente muito esforço e grande parte do esforço de desenvolvimento irá para a compreensão e implementação dos estágios teóricos.
Em vez disso o programador pode utilizar o que são chamadas de interfaces de programação de aplicativos ou APIs fornecidas pelas bibliotecas gráficas. Onde esses estágios já são implementados na forma de várias funções e o desenvolvedor pode simplesmente chamar essas funções com argumentos em seu programa para executar determinadas tarefas gráficas. Há muitas bibliotecas desse tipo disponíveis, muito populares são mencionadas aqui OpenGL que é uma biblioteca gráfica de código aberto que é amplamente utilizada.
Depois há o DirectX pela Microsoft e há muitas outras bibliotecas comerciais disponíveis que são proprietárias mas o OpenGL sendo código aberto é amplamente acessível e útil para muitas situações.
Agora o que essas bibliotecas contém? Eles contêm conjuntos predefinidos de funções, que, quando chamados com argumentos apropriados, executam tarefas específicas. Por isso, o programador não precisa saber cada detalhe sobre a plataforma de hardware subjacente a saber, processador, memória e SO para construir um aplicativo.
Por exemplo, suponhamos que queremos atribuir cores a um objeto que temos modelado. Precisamos de fato implementar as leis ópticas para realizar a coloração? Observe que essa implementação de lei óptica também envolve conhecimento dos processadores disponíveis, a memória disponível e

assim por diante. Então o que podemos fazer é em vez de ter esse conhecimento, podemos simplesmente ir por usar uma função glColor3f com um argumento r, g, b. Assim, essa função é definida no OpenGL ou na biblioteca gráfica aberta que atribui uma cor a um ponto 3D.
Portanto, aqui não precisamos saber detalhes como como a cor é definida no sistema, como tais informações são armazenadas, em qual parte da memória e acessada, como o sistema operacional gerencia a chamada, qual CPU do processador ou GPU manipula a tarefa e assim por diante. Por isso, todos esses detalhes complicados podem ser evitados e o programador pode simplesmente usar essa função para designar cor. Vamos voltar para esta funções do OpenGL em uma parte posterior da palestra onde introduziremos o OpenGL.
Agora aplicações gráficas como sistemas de pintura que provavelmente todos vocês estão familiarizadas, ferramentas CAD que mencionamos em nossas palestras introdutórias anteriormente, videogames, animações, tudo isso são desenvolvidos usando essas funções. Por isso, é importante ter um entendimento dessas bibliotecas se você quer tornar a sua vida mais simples como programador gráfico. E nós vamos voltar mais tarde para essa funções da biblioteca, vamos discutir em detalhes algumas funções popularmente usadas no contexto do OpenGL.