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