Tipos de luz (Direct3D 9)

A propriedade do tipo de luz define qual o tipo de fonte de luz que você está usando. O tipo de luz é definido usando um valor da enumeração D3DLIGHTTYPE C++ no membro Type da estrutura D3DLIGHT9 da luz. Existem três tipos de luzes no Direct3D: pontos iluminados, destaques e luzes direcionais. Cada tipo ilumina objetos em uma cena de forma diferente, com diferentes níveis de sobrecarga.

Ponto de luz

As luzes pontuais têm cor e posição em uma cena, mas nenhum direção única. Elas emitem luz igualmente em todas as direções, como mostrado na ilustração a seguir.

Ilustração de luz pontual

Uma lâmpada é um bom exemplo de luz pontual. As luzes pontuais são afetadas pela atenuação e pelo intervalo, além de iluminarem uma malha com base em vértices. Durante a iluminação, o Direct3D usa a posição da luz pontual no espaço do mundo e as coordenadas do vértice iluminado para derivar um vetor de direção de luz e a distância que a luz já percorreu. Ambos são usados, juntamente com o vértice normal, para calcular a contribuição da luz para a iluminação da superfície.

Luz direcional

As luzes direcionais têm somente cor e direção, mas não têm posição. Elas emitem luz paralela. Ou seja, todas as luzes geradas pelas luzes direcionais percorrem uma cena na mesma direção. Imagine uma luz direcional como uma fonte de luz a uma distância quase infinita, como o sol. As luzes direcionais não são afetadas por atenuação ou intervalos, portanto, a direção e a cor especificadas são fatores considerados somente quando o Direct3D calcula cores de vértice. Devido ao pequeno número de fatores de iluminação, essas são as luzes menos intensas para usar.

Holofotes

Os destaques têm cor, posição e direção para emissão de luz. A luz emitida de um destaque é composta por um cone interno brilhante e um cone externo maior, com a intensidade de luz entre os dois diminuindo conforme mostrado na ilustração a seguir.

Ilustração de um destaque com um cone interno e cone um externo

Destaques são afetados por quedas, atenuação e intervalo. Esses fatores, bem como a distância de deslocamento da luz em cada vértice, são elaborados ao calcular os efeitos de iluminação para objetos em uma cena. Esses efeitos de cada vértice fazem dos destaques uma das luzes mais demoradas de calcular no Direct3D.

A estrutura C++ D3DLIGHT9 contém três membros que são usados apenas por destaques. Esses membros - Falloff, Theta e Phi - controlam o quão grandes ou pequenos são os cones internos e externos de um objeto spotlight e como a luz diminui entre eles.

O valor de Theta é o ângulo radian do cone interno do destaque e o valor de Phi é o ângulo para o cone externo de luz. O valor falloff controla como a intensidade da luz diminui entre a borda externa do cone interno e a borda interna do cone externo. A maioria dos apps define a Queda como 1,0 para criar uma queda uniforme entre os dois cones, mas você pode definir outros valores conforme necessário.

A ilustração a seguir mostra a relação entre os valores desses membros e como eles podem afetar os cones internos e externos de luz de um holofote.

ilustração de como os valores de phi e teta se relacionam com os cones de destaque

Destaques emitem um cone de luz com duas partes: um cone interno brilhante e um cone externo. A luz é mais brilhante em de cone interno e não está presente fora do cone externo, com intensidade de luz atenuada entre as duas áreas. Em geral, esse tipo de atenuação é conhecido como queda.

A quantidade de luz recebida por um vértice tem por base a localização do vértice nos cones internos ou externos. O Direct3D calcula o produto de pontos do vetor de direção do destaque (L) e o vetor de luz para o vértice (D). Esse valor é igual ao cosseno do ângulo entre os dois vetores e serve como um indicador de posição do vértice que pode ser comparado a ângulos de cone da luz para determinar onde o vértice pode estar nos cones internos ou externos. A ilustração a seguir fornece uma representação gráfica da associação entre esses dois vetores.

ilustração do vetor de direção de destaque e o vetor do vértice de destaque

O sistema compara esse valor ao cosseno dos ângulos dos cones internos e externos do destaque. Na estrutura D3DLIGHT9 da luz, os membros Theta e Phi representam o total de ângulos de cone para os cones internos e externos. Como a atenuação ocorre à medida que o vértice fica mais distante do Centro de iluminação (em vez de entre o ângulo total do cone), o tempo de execução divide esses ângulos de cone na metade antes de calcular seus cossenos.

Se o produto de pontos dos vetores L e D for menor ou igual ao cosseno do ângulo cone externo, o vértice está além do cone externo e não recebe nenhuma luz. Se o produto de pontos de L e D for maior do que o cosseno do ângulo de cone interno, o vértice está dentro do cone interno e recebe a quantidade máxima de luz, considerando ainda a atenuação em vez da distância. Se o vértice estiver em algum lugar entre duas regiões, a queda é calculada com a seguinte equação.

fórmula de intensidade da luz em vértices depois da queda

Em que:

  • I f é intensidade de luz após a queda
  • Alfa é o ângulo entre os vetores L e D
  • Teta é o ângulo do cone interno
  • Phi é o ângulo do cone externo
  • p é a queda

Essa fórmula gera um valor entre 0,0 e 1,0 que dimensiona a intensidade da luz no vértice para contabilizar a queda. A atenuação como um fator da distância do vértice para a luz também é aplicada. O gráfico a seguir mostra como valores de queda diferentes podem afetar a curva de queda.

gráfico de intensidade de luz em comparação à distância do vértice para a luz

O efeito de diversos valores de queda sobre a iluminação real é sutil e uma penalidade de desempenho pequena é incorrida ao modelar a curva de queda com valores de queda diferentes de 1,0. Por esses motivos, esse valor geralmente é definido como 1,0.

Luzes e materiais