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.
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.
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.
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.
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.
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.
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.
Tópicos relacionados