Tipos de luz (Direct3D 9)
A propriedade de tipo de luz 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. Há três tipos de luzes no Direct3D - luzes de ponto, holofotes e luzes direcionais. Cada tipo ilumina objetos em uma cena de forma diferente, com diferentes níveis de sobrecarga computacional.
Luz de Ponto
As luzes de ponto têm cor e posição dentro de uma cena, mas nenhuma direção única. Eles emitem luz igualmente em todas as direções, conforme mostrado na ilustração a seguir.
ilustração de luz do ponto
Uma lâmpada é um bom exemplo de uma luz de ponto. As luzes de ponto são afetadas pela atenuação e pelo intervalo 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 do ponto no espaço mundial e as coordenadas do vértice que está sendo iluminado 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 percorre 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 intervalo, portanto, a direção e a cor especificadas são os únicos fatores considerados quando o Direct3D calcula as cores do vértice. Devido ao pequeno número de fatores de iluminação, essas são as luzes menos intensivas computacionalmente a serem usadas.
Holofote
Os destaques têm cor, posição e direção em que emitem luz. A luz emitida de um holofote é composta por um cone interno brilhante e um cone externo maior, com a intensidade da luz diminuindo entre os dois, conforme mostrado na ilustração a seguir.
Os destaques são afetados por falloff, atenuação e intervalo. Esses fatores, bem como a distância que a luz percorre para cada vértice, são figuradas ao calcular efeitos de iluminação para objetos em uma cena. Calcular esses efeitos para cada vértice torna os destaques o mais demorado computacionalmente de todas as luzes no Direct3D.
A estrutura D3DLIGHT9 C++ 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 de destaque 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 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 desses membros e como eles podem afetar os cones internos e externos de luz de um holofote.
Os destaques 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. Esse tipo de atenuação é geralmente conhecido como falloff.
A quantidade de luz que um vértice recebe é baseada na localização do vértice nos cones internos ou externos. O Direct3D calcula o produto de ponto do vetor de direção (L) do destaque e o vetor da luz para o vértice (D). Esse 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 aos â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.
O sistema compara esse valor com o cosseno dos ângulos de cone interno e externo do destaque. Na estrutura de 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 se torna mais distante do centro da iluminação (em vez do ângulo total do cone), o runtime divide esses ângulos de cone ao meio antes de calcular seus cossenos.
Se o produto de ponto dos vetores L e D for menor ou igual ao cosseno do ângulo do cone externo, o vértice estará além do cone externo e não receberá luz. Se o produto de ponto de L e D for maior que o cosseno do ângulo do cone interno, o vértice estará dentro do cone interno e receberá a quantidade máxima de luz, ainda considerando a atenuação à distância. Se o vértice estiver em algum lugar entre as duas regiões, a queda será calculada com a equação a seguir.
Onde:
- Eu f é intensidade leve após a queda
- Alfa é o ângulo entre os vetores L e D
- Theta é o ângulo interno do cone
- 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 considerar 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 falloff podem afetar a curva de falloff.
O efeito de vários valores de queda na iluminação real é sutil, e uma pequena penalidade de desempenho é incorrida moldando a curva de falloff com valores de queda diferentes de 1,0. Por esses motivos, esse valor normalmente é definido como 1,0.
Tópicos relacionados