O que é iluminação DOT3?
-
19-09-2019 - |
Pergunta
Uma resposta a minha pergunta sugere que a iluminação DOT3 pode ajudar com renderização OpenGL ES, mas estou tendo dificuldades para encontrar uma definição decente do que a iluminação DOT3 é.
Editar 1
iPhone informações relacionadas é muito apreciado.
Solução
DOT3-iluminação é muitas vezes referida como iluminação por pixel. Com vértice acender a iluminação é calculado em cada vértice ea iluminação resultante é interpolada sobre o triângulo. Na iluminação por pixel, como o nome indica, o objetivo é calcular a iluminação em cada pixel.
A forma como isso é feito em hardware função fixa como o iPhone é com os chamados combinadores de registro. O nome DOT3 vem desse estado processar:
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB);
esta entrada do blog em Wolfgang Engels blog para mais informações sobre exatamente como configurá-lo.
Ao fazer per-pixel iluminação é popular também utilizar um chamado mapa normal. Isto significa que o normal a cada ponto em um objeto é armazenado em um mapa de textura especial, um mapa normal. Este foi popularizado no jogo DOOM 3 por software ID onde os modelos muito baixos polígonos onde usado, mas com mapas normais de alta resolução. A razão para usar esta técnica é que o olho é mais sensível à variação na iluminação de variação em forma.
Eu vi em sua outra pergunta que a razão desta surgiu foi que você queria reduzir o consumo de memória dos dados vértice. Isto é verdade, em vez de armazenar três componentes para uma normal em cada vértice, você só precisa armazenar dois componentes para as coordenadas de textura para o mapa normal. Permitindo iluminação por pixel virá com um custo de desempenho embora assim que eu não tenho certeza se isso vai ser uma vitória líquida, como de costume, o conselho é tentar e ver.
Finalmente, a iluminação difusa intensidade num ponto é proporcional ao coseno do ângulo entre a normal da superfície e a direcção da luz. Para dois vector o dot produto é definido como:
a dot b = |a||b| cos(theta)
onde |a|
e |b|
é o comprimento do a
vectores e b
respectivamente e theta
é o ângulo entre eles. Se o comprimento é igual a um, e |a|
|b|
são referidos como vectores unitários e os simplifica a fórmula:
a dot b = cos(theta)
Isto significa que a intensidade da iluminação difusa é dado pelo produto escalar entre a normal da superfície e a direcção da luz. Isto significa que todas difusa iluminação é uma forma de DOT3-iluminação, mesmo que o nome tem vindo a referir ao tipo per-pixel.
Outras dicas
A partir aqui :
bumpmapping está colocando uma textura em um modelo onde o brilho de cada texel define a altura do que texel.
A altura de cada texel é então utilizada para perturbar a iluminação de toda a superfície.
mapeamento normal é colocar uma textura em um modelo onde a cor de cada texel é realmente três valores que definem a direção que a localização dos pontos de superfície.
Uma cor de (255, 0, 0), por exemplo, pode significar que a superfície nessa localização ponta virada para baixo do eixo X positivo.
Em outras palavras, cada texel é um normal.
O nome dot3 vem do que você realmente fazer com esses normais.
Vamos dizer que você tem um vetor que aponta na direção seus pontos de fonte de luz. E vamos dizer que você tem o vetor que é o normal em um texel específica do seu modelo que lhe diz qual a direção que os pontos de Texel.
Se você fizer uma equação matemática simples chamada um "produto escalar" sobre estes dois vetores normais, assim:
Dot = N1x N2x + N1y N2y + N1z * N2z
Em seguida, o valor resultante é um número que lhe diz quanto esses dois vetores apontam na mesma direção.
Se o valor é de -1, em seguida, eles apontam em sentidos opostos, o que efectivamente significa que o texel é apontando para a fonte de luz, e a fonte de luz está apontando para o texel, de modo que o texel deve ser iluminada.
Se o valor for 1, então eles apontam na mesma direção, o que significa o texel está apontando para longe da fonte de luz.
E se o valor for 0, então um dos pontos de vetores em 90 graus em relação ao outro. Ou seja: Se você está em pé no chão olhando para a frente, em seguida, seu vetor vista é de 90 graus em relação ao normal do solo, que aponta para cima.