Compartilhar via


Atenuação e fator de destaque (Direct3D 9)

Os componentes de iluminação especular e difusa da equação de iluminação global contêm termos que descrevem a atenuação de luz e o cone em destaque. Esses termos são descritos a seguir.

Atenuação

A atenuação de uma luz depende do tipo de luz e da distância entre a luz e a posição do vértice. Para calcular a atenuação, use uma das seguintes equações.

Atten = 1/( att0i + att1i * d + att2i * d²)

Em que:

Parâmetro Valor padrão Type Descrição Intervalo
att0i 0.0 FLOAT Fator de atenuação constante 0 para + infinito
att1i 0,0 FLOAT Fator de atenuação linear 0 para + infinito
att2i 0,0 FLOAT Fator de atenuação quadrática 0 para + infinito
d N/D FLOAT Distância da posição de vértice até a posição da luz N/D

 

  • Atten = 1, se a luz é uma luz direcional.
  • Atten = 0, se a distância entre a luz e o vértice exceder o intervalo da luz.

Os valores att0, att1 e att2 são especificados pelos membros Attenuation0, Attenuation1 e Attenuation2 de D3DLIGHT9.

A distância entre a luz e a posição do vértice é sempre positiva.

d = | Ldir |

Em que:

Parâmetro Valor padrão Type Descrição
Ldir N/D D3DVECTOR Vetor de direção da posição de vértice para a posição da luz

 

Se d for maior que o intervalo da luz, ou seja, o membro Range de uma estrutura D3DLIGHT9 , o Direct3D não fará mais cálculos de atenuação e não aplicará nenhum efeito da luz ao vértice.

As constantes de atenuação atuam como coeficientes na fórmula - você poderá produzir uma variedade de curvas de atenuação fazendo ajustes simples nelas. Você pode definir Attenuation1 como 1.0 para criar uma luz sem atenuação, mas que ainda é limitada por intervalo, ou você pode fazer experiências com valores diferentes para obter vários efeitos de atenuação.

A atenuação no intervalo máximo da luz não é 0.0. Para impedir que luzes apareçam repentinamente quando estiverem no intervalo de luz, um app pode aumentar o intervalo de luz. Ou então, o app pode configurar constantes de atenuação para que o fator de atenuação fique próximo de 0.0 no intervalo de luz. O valor de atenuação é multiplicado pelos componentes em vermelho, verde e azul de cor da luz para dimensionar a intensidade da luz, à medida que um fator de luz de distância transita para um vértice.

Fator de destaque

A seguinte equação especifica o fator de destaque.

equação de fator de destaque

Parâmetro Valor padrão Type Descrição Intervalo
rhoi N/D FLOAT cosseno(ângulo) para destaque i N/D
phii 0,0 FLOAT Ângulo de penumbra de destaque i em radianos [thetai, pi)
thetai 0.0 FLOAT Ângulo de penumbra de destaque i em radianos [0, pi)
queda 0,0 FLOAT Fator de queda (-infinito + infinito)

 

Em que:

rho = norm(Ldcs).norm(Ldir)

e:

Parâmetro Valor padrão Type Descrição
Ldcs N/D D3DVECTOR O negativo da direção da luz no espaço da câmera
Ldir N/D D3DVECTOR Vetor de direção da posição de vértice para a posição da luz

 

Depois de calcular a atenuação de luz, o Direct3D também considera os efeitos de destaque, se aplicável, o ângulo que a luz reflete de uma superfície e a reflexão do material atual para calcular os componentes difusos e especular para esse vértice. Para obter mais informações, consulte SpotLight.

Matemática da iluminação