Descrição de Cenas
Independentemente da técnica de síntese que se use para gerar a imagem, o conteúdo da cena necessita ser descrito pela aplicação usando a API gráfica
Em última análise, e se ignorarmos o nível de abstração oferecido pela API usada, será necessário descrever:
- Os objetos gráficos que compõem a cena (ou primitivas gráficas)
- Geometria: posições 3D dos vértices
- Topologia: como os vértices são usados para formar linhas ou polígonos
- Atributos: informação necessária para o cálculo final da cor e brilho (usualmente sob a forma de materiais)
- As fontes de luz
- As características da câmara que servirá para “captar” a imagem
Conteúdo da API
As APIs gráficas oferecem um conjunto de funções que permitem ao programador descrever a cena. A descrição da cena é feita através de um conjunto de chamadas a funções que especificam os objetos gráficos, as fontes de luz e as características da câmara (observador).
Primitivas Gráficas
As primitivas gráficas são os elementos básicos que compõem a cena. As primitivas gráficas mais comuns são:
- Pontos
- Segmentos de reta
- Polígonos
Exemplo WebGl
Colocar os valores associados aos vértices (normalmente incluindo as coordenadas) em vetores
var vertices = [ 0.0, 1.0, 0.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0 ];
Enviar os dados para o GPU
Pedir ao GPU para desenhar usando o tipo de primitiva pretendida (pontos, linhas, triangulos, etc)
Especificação da câmera
- 6 DOF (graus de liberdade) - 3 para a posição e 3 para a orientação
- Posição do centro da lente (center of projection)
- Orientação (3 ângulos)
- Graus de liberdade adicionais:
- Lente (distância focal)
- Tamanho do filme/sensor (w x h)
- Orientação do plano de projeção (filme/sensor) relativamente à direção em que a câmera está a apontar.
Síntese de Imagens
Iluminação Global vs Local
Na realidade, não é possível determinar o aspecto de cada objecto de forma isolada ou independente dos restantes:
- Alguns objectos estão na sombra
- A luz pode refletir num objecto e ir em direção a outro
- Alguns objectos podem deixar passar a luz (transparentes ou translúcidos)
Os algoritmos de iluminação local tratam cada objecto de forma independente dos outros, produzindo assim resultados aproximados.
Os algoritmos de iluminação global tratam da cena como um todo, permitindo as interações entre as superfícies de diferentes objectos.
Abordagem física
Ray tracing: seguir o percurso dos raios de luz, partindo do centro de projeção até que sejam absorvidos ou se percam no espaço. Neste algoritmo é fácil produzir efeitos de iluminação global:
- Reflexões múltiplas
- Transparência
- Sombras
Radiosidade: método baseado nas transferências de energia entre os objectos presentes na cena.
Abordagem prática
- Processar os objetos isoladamente, na ordem pela qual são gerados pela aplicação
- Apenas se podem considerar fenômenos locais de iluminação, sem ter em atenção os outros objetos.
- Arquitetura em pipeline:
- Todas as fases podem ser implementadas no hardware gráfico (GPU)
Pipeline de Visualização 3D
Processamento de vértices
- Uma grande parte do trabalho no pipeline gráfico consiste em efetuar mudanças de coordenadas dum referencial para outro
- Coordenadas dos pontos em referenciais próprios do objeto
- Coordenadas no referencial global da cena/mundo
- Coordenadas no referencial da câmara
- Coordenadas no referencial do ecrã
- Cada mudança de referencial equivale a uma operação matricial (mudança de base)
- O processamento de vértices também inclui a transformação de atributos (ex. cor), associados pela aplicação a cada vértice, em valores que irão varia
Projeção
- Transformar as coordenadas 3D dos vértices em coordenadas 2D no ecrã
- Projeção perspetiva: as linhas projetatnes encontram-se num ponto
- Projeção paralela: as linhas projetates são paralelas entre si
Primitive Assembly
Os vértices o pipeline são agrupados para a formação das primitivas, antes que se possa proceder ao seu varrimento (geração dos pixels que as constituem) e recorte (clipping)
- Segmentos de reta
- Polígonos (apenas triângulos no caso do WebGL)
- Linhas curvas (discretizadas posteriormente em segmentos)
- Superfícies curvas (discretizadas posteriormente em polígonos)
Clipper
Os vértices das primitivas são recortados contra o volume de visualização para que apenas os que se encontram dentro dele sejam processados
Rasteriser
Os segmentos de reta e os polígonos são convertidos em fragmentos/pixels que serão desenhados no ecrã
Processamento de fragmentos/pixels
Os fragmentos/pixels são processados para determinar a sua cor final
Cores determinadas por mapeamento de texturas e por interpolação.
- mauricio
10/09/2024