Shading

Gouraud shading, desenvolvido por Henri Gouraud em 1971, foi uma das primeiras técnicas de sombreamento desenvolvidas para computação gráfica 3D.

Na computação gráfica, sombreamento refere-se ao processo de alterar a cor de um objeto/superfície/polígono na cena 3D, baseado em coisas como (mas não limitado a) o ângulo da superfície com as luzes, sua distância das luzes, seu ângulo com a câmera e propriedades materiais (e.Por exemplo, função de distribuição de reflexão bidirecional) para criar um efeito fotorealístico.

Shading é executado durante o processo de renderização por um programa chamado shader.

Ângulo da superfície para uma fonte de luzEditar

Shading altera as cores das faces em um modelo 3D baseado no ângulo da superfície para uma fonte de luz ou fontes de luz.

A primeira imagem abaixo tem as faces da caixa renderizadas, mas todas na mesma cor. As linhas de borda foram renderizadas aqui também o que torna a imagem mais fácil de ver.

A segunda imagem é o mesmo modelo renderizado sem linhas de borda. É difícil dizer onde uma face da caixa termina e a seguinte começa.

A terceira imagem tem sombreamento habilitado, o que torna a imagem mais realista e facilita a visualização de qual face é qual.

Imagem renderizada de uma caixa. Esta imagem não tem sombreamento nas faces, mas em vez disso usa linhas de borda (também conhecidas como wireframe) para separar as faces e um contorno mais arrojado para separar o objeto do fundo.

Esta é a mesma imagem com as linhas removidas; a única indicação da geometria interior são os pontos da silhueta do objeto.

Este é o mesmo objeto renderizado com sombreamento plano. A cor das 3 faces frontais visíveis foi definida com base no seu ângulo (determinado pelo vector normal) em relação às fontes de luz.

Tipos de iluminaçãoEdit

Efeitos de sombreamento de um projector usando um traçador de raios

Quando um sombreador calcula a cor do resultado, utiliza um modelo de iluminação para determinar a quantidade de luz reflectida em pontos específicos da superfície. Diferentes modelos de iluminação podem ser combinados com diferentes técnicas de sombreamento – enquanto a iluminação diz quanta luz é refletida, o sombreamento determina como essa informação é usada para calcular o resultado final. Pode, por exemplo, calcular a iluminação apenas em pontos específicos e usar a interpolação para preencher o resto. O sombreador também pode decidir sobre quantas fontes de luz devem ser levadas em conta etc.

Iluminação ambienteEditar

Uma fonte de luz ambiente representa uma fonte de luz omni-direcional, de intensidade fixa e cor fixa que afeta todos os objetos na cena igualmente (é omni-presente). Durante a renderização, todos os objetos na cena são iluminados com a intensidade e cor especificadas. Este tipo de fonte de luz é usado principalmente para fornecer à cena uma visão básica dos diferentes objetos nela contidos. Este é o tipo de iluminação mais simples de implementar, e modela como a luz pode ser espalhada ou refletida muitas vezes, produzindo assim um efeito uniforme.

A iluminação ambiente pode ser combinada com a oclusão ambiente para representar como cada ponto da cena está exposto, afetando a quantidade de luz ambiente que ela pode refletir. Isto produz uma iluminação difusa e não direcional ao longo da cena, não produzindo sombras claras, mas com áreas fechadas e abrigadas escurecidas. O resultado é geralmente visualmente semelhante a um dia nublado.

Iluminação pontualEdit

Luz origina-se de um único ponto e se espalha para fora em todas as direções.

SpotlightingEdit

Modela um holofote: a luz origina-se de um único ponto e se espalha para fora em um cone.

Iluminação de áreaEdit

Luz origina-se de uma pequena área em um único plano. (Um modelo mais realista que uma fonte de luz pontual.)

Iluminação direcionalEdit

Uma fonte de luz direcional ilumina todos os objetos igualmente de uma determinada direção, como uma luz de área de tamanho infinito e distância infinita da cena; há sombreamento, mas não pode haver nenhuma distância falloff. Isto é como o sol.

Distância falloffEdit

Duas caixas renderizadas com OpenGL. (Note que a cor das duas faces frontais é a mesma mesmo que uma esteja mais distante.)

O mesmo modelo renderizado usando o ARRIS CAD, que implementa o falloff de distância para tornar as superfícies que estão mais próximas do olho mais brilhantes.

Teoricamente, duas superfícies que são paralelas são iluminadas virtualmente a mesma quantidade de uma fonte de luz distante e desbloqueada como o sol. O efeito de distância falloff produz imagens que têm mais sombras e assim seria realista para fontes de luz proximais.

A imagem da esquerda não usa falloff de distância. Note que as cores nas faces frontais das duas caixas são exatamente as mesmas. Pode parecer que existe uma ligeira diferença onde as duas faces se sobrepõem directamente, mas isto é uma ilusão óptica causada pela borda vertical abaixo onde as duas faces se encontram.

A imagem da direita utiliza o falloff à distância. Note que a face frontal da caixa mais próxima é mais brilhante do que a face frontal da caixa traseira. Além disso, o chão vai de claro para escuro à medida que se afasta.

CalculationEdit

Distance falloff can be calculated in a number of ways:

  • Power of the distance – Para um determinado ponto a uma distância x da fonte de luz, a intensidade de luz recebida é proporcional a 1/xn.
    • None (n = 0) – A intensidade de luz recebida é a mesma independentemente da distância entre o ponto e a fonte de luz.
    • Linear (n = 1) – Para um determinado ponto a uma distância x da fonte de luz, a intensidade de luz recebida é proporcional a 1/x.
    • Quadrática (n = 2) – É assim que a intensidade de luz diminui na realidade se a luz tiver um caminho livre (ou seja, sem nevoeiro ou qualquer outra coisa no ar que possa absorver ou dispersar a luz). Para um determinado ponto a uma distância x da fonte luminosa, a intensidade da luz recebida é proporcional a 1/x2.
  • Qualquer número de outras funções matemáticas também pode ser usado.

Técnicas de sombreamentoEditar

Sombrecimento de uma superfície normal é frequentemente necessário para o cálculo da iluminação. As normais podem ser pré-computadas e armazenadas para cada vértice do modelo.

Sombreamento planoEdit

Sombreamento plano de um cubóide texturizado

Aqui, a iluminação é avaliada apenas uma vez para cada polígono (geralmente para o primeiro vértice do polígono, mas às vezes para o centróide para as malhas triangulares), com base na superfície do polígono normal e na suposição de que todos os polígonos são planos. A cor computada é usada para todo o polígono, fazendo com que os cantos pareçam afiados. Isto é normalmente usado quando técnicas mais avançadas de sombreamento são muito caras em termos computacionais. Os destaques especulares são mal apresentados com sombreamento plano: Se por acaso houver um grande componente especular no vértice representativo, esse brilho é desenhado uniformemente sobre toda a face. Se um destaque especular não cai sobre o ponto representativo, ele é perdido completamente. Consequentemente, o componente de reflexão especular normalmente não é incluído no cálculo do sombreamento plano.

Sombreamento suaveEditar

Em contraste com o sombreamento plano onde as cores mudam descontinuamente nas bordas do polígono, com sombreamento suave a cor muda de pixel para pixel, resultando em uma transição suave de cor entre dois polígonos adjacentes. Normalmente, os valores são primeiro calculados nos vértices e a interpolação bilinear é usada para calcular os valores dos pixels entre os vértices dos polígonos. Tipos de sombreamento suave incluem sombreamento Gouraud e Phong.

Sombreamento GouraudEdit
  1. Determinar o normal em cada vértice do polígono.
  2. Aplicar um modelo de iluminação em cada vértice para calcular a intensidade luminosa do vértice normal.
  3. Interpolar as intensidades dos vértices usando interpolação bilinear sobre o polígono de superfície.

Problemas:

  • Li>Due à iluminação sendo computada apenas nos vértices, as imprecisões (especialmente de destaques especulares em grandes triângulos) podem tornar-se demasiado aparentes.
  • T-junções com polígonos adjacentes podem por vezes resultar em anomalias visuais. Em geral, as junções em T devem ser evitadas.
Phong shadingEdit

Phong shading é similar ao Gouraud shading, exceto que ao invés de interpolar as intensidades de luz, os normais são interpolados entre os vértices e a iluminação é avaliada por pixel. Assim, os destaques especulares são computados muito mais precisamente do que no modelo de sombreamento de Gouraud.

  1. Compute um N normal para cada vértice do polígono.
  2. Utilizando a interpolação bilinear compute um Ni normal, para cada pixel. (Normal tem que ser renormalizado cada vez.)
  3. Aplique um modelo de iluminação a cada pixel para calcular a intensidade luminosa de Ni.

Sombreamento diferidoEditar

Sombreamento diferido é uma técnica de sombreamento pela qual o cálculo do sombreamento é diferido para um estágio posterior através da renderização em duas passagens, aumentando potencialmente a performance não descartando pixels com sombreamento expensivo. A primeira passa apenas captura parâmetros de superfície (tais como profundidade, normais e parâmetros materiais), a segunda executa o sombreamento real e calcula as cores finais.:884

Outras abordagensEdit

Both Gouraud sombreamento e Phong sombreamento pode ser implementado usando interpolação bilinear. Bishop e Weimer propuseram usar uma expansão da série Taylor da expressão resultante da aplicação de um modelo de iluminação e interpolação bilinear das normas. Assim, foi utilizada a interpolação polinomial de segundo grau. Este tipo de interpolação biquadrática foi mais elaborado por Barrera et al., onde um polinômio de segunda ordem foi usado para interpolar a luz difusa do modelo de reflexão Phong e outro polinômio de segunda ordem foi usado para a luz especular.

Interpolação linear esférica (Slerp) foi usado por Kuij e Blake para computar tanto a normal sobre o polígono, quanto o vetor na direção da fonte de luz. Uma abordagem semelhante foi proposta por Hast, que utiliza a interpolação quaterniônica dos normais com a vantagem de que o normal sempre terá comprimento unitário e a normalização computacionalmente pesada é evitada.

Flat vs. smooth shadingEdit

Flat Smooth
Uses the same color for every pixel in a face – usually the color of the first vertex Smooth shading uses linear interpolation of either colors or normals between vertices
Edges appear more pronounced than they would on a real object because in reality almost all edges are somewhat round The edges disappear with this technique
Same color for any point of the face Each point of the face has its own color
Individual faces are visualized Visualize underlying surface
Not suitable for smooth objects Suitable for any objects
Less computationally expensive More computationally expensive