Partilhar via


Tipos de luz (Direct3D 9)

A propriedade light type define qual tipo de fonte de luz 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 - luzes pontuais, holofotes e luzes direcionais. Cada tipo ilumina objetos em uma cena de forma diferente, com diferentes níveis de sobrecarga computacional.

Ponto de luz

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

ilustração da luz pontual

Uma lâmpada é um bom exemplo de luz pontual. As luzes pontuais são afetadas pela atenuação e alcance, e iluminam uma malha em uma base de vértice por vértice. Durante a iluminação, o Direct3D usa a posição da luz pontual no espaço do mundo e as coordenadas do vértice que está sendo aceso para derivar um vetor para a direção da luz e a distância que a luz 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 apenas cor e direção, não posição. Eles emitem luz paralela. Isso significa que toda a luz gerada por luzes direcionais viaja através de 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 pela atenuação ou alcance, portanto, a direção e a cor especificadas são os únicos fatores considerados quando o Direct3D calcula cores de vértice. Devido ao pequeno número de fatores de iluminação, estas são as luzes menos intensivas computacionalmente para usar.

SpotLight

Os holofotes têm cor, posição e direção em que emitem luz. A luz emitida por um holofote é composta por um cone interno brilhante e um cone externo maior, com a intensidade da luz diminuindo entre os dois, como mostrado na ilustração a seguir.

ilustração de um holofote com um cone interno e um cone externo

Os holofotes são afetados pela queda, atenuação e alcance. Esses fatores, bem como a distância que a luz percorre para cada vértice, são calculados ao calcular efeitos de iluminação para objetos em uma cena. A computação desses efeitos para cada vértice torna os holofotes a mais demorada computacionalmente de todas as luzes no Direct3D.

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

O valor Theta é o ângulo radiano do cone interno do holofote, e o valor 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 aplicativos define Falloff como 1.0 para criar falloff que ocorre uniformemente 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 para esses membros e como eles podem afetar os cones de luz internos e externos de um holofote.

ilustração de como os valores phi e theta se relacionam com os cones holofotes

Os holofotes emitem um cone de luz que tem duas partes: um cone interno brilhante e um cone externo. A luz é mais brilhante no cone interno e não está presente fora do cone externo, com intensidade de luz atenuando entre as duas áreas. Este tipo de atenuação é comumente referido como queda.

A quantidade de luz que um vértice recebe é baseada na localização do vértice nos cones interno ou externo. O Direct3D calcula o produto do ponto do vetor de direção do holofote (L) e o vetor da luz para o vértice (D). Este valor é igual ao cosseno do ângulo entre os dois vetores, e serve como um indicador da posição do vértice que pode ser comparado com os ângulos do cone da luz para determinar onde o vértice pode estar nos cones interno ou externo. 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 do holofote e do vetor do vértice para o holofote

O sistema compara este valor com o cosseno dos ângulos do cone interno e externo do holofote. Na estrutura D3DLIGHT9 da luz, os membros Theta e Phi representam os ângulos totais do cone para os cones interno e externo. Como a atenuação ocorre à medida que o vértice se torna mais distante do centro de iluminação (em vez de atravessar o ângulo total do cone), o tempo de execução divide esses ângulos do cone ao meio antes de calcular seus cossenos.

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

fórmula para a intensidade da luz no vértice, após a queda

Em que:

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

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

gráfico da intensidade da luz versus a distância do vértice da luz

O efeito de vários valores de queda na iluminação real é sutil, e uma pequena penalidade de desempenho é incorrida ao moldar a curva de queda com valores de queda diferentes de 1,0. Por esses motivos, esse valor normalmente é definido como 1.0.

Luzes e Materiais