감쇠 및 스포트라이트 요소(Direct3D 9)
전역 조명 수식의 확산 및 반사 조명 구성 요소에는 조명 감쇠와 스포트라이트 원뿔을 설명하는 용어가 있습니다. 다음은 이러한 용어에 대한 설명입니다.
감쇠
조명의 감쇠는 조명 유형 및 조명과 꼭짓점 위치 간의 거리에 따라 달라집니다. 감쇠를 계산하려면 다음 수식 중 하나를 사용합니다.
Atten = 1/( att0i + att1i * d + att2i * d²)
위치:
매개 변수 | 기본값 | Type | Description | 범위 |
---|---|---|---|---|
att0i | 0.0 | FLOAT | 정적 감쇠 계수 | 0 ~ 양의 무한대 |
att1i | 0.0 | FLOAT | 선형 감쇠 계수 | 0 ~ 양의 무한대 |
att2i | 0.0 | FLOAT | 이차 감쇠 계수 | 0 ~ 양의 무한대 |
일 | 해당 없음 | FLOAT | 꼭짓점 위치에서 조명 위치까지의 거리 | 해당 없음 |
- Atten = 1, 조명이 방향성 광원인 경우
- Atten = 0, 조명과 꼭짓점 간의 거리가 조명의 범위를 초과할 경우
att0, att1, att2 값은 D3DLIGHT9의 Attenuation0, Attenuation1 및 Attenuation2 멤버에 의해 지정됩니다.
조명과 꼭짓점 위치 간의 거리는 항상 양수입니다.
d = | Ldir |
위치:
매개 변수 | 기본값 | Type | 설명 |
---|---|---|---|
Ldir | 해당 없음 | D3DVECTOR | 꼭짓점 위치에서 조명 위치까지의 방향 벡터 |
d가 광원 범위보다 큰 경우, 즉 D3DLIGHT9 구조체의 Range 멤버인 Direct3D는 더 이상 감쇠 계산을 수행하지 않으며 조명에서 꼭짓점에 영향을 주지 않습니다.
감쇠 상수는 수식에서 계수 역할을 합니다. 감쇠 상수를 간단히 조정하여 다양한 감쇠 곡선을 만들 수 있습니다. Attenuation1을 1.0으로 설정하여 감쇠되지 않지만 범위로 제한되는 조명을 만들거나 여러 값을 사용하여 다양한 감쇠 효과를 낼 수 있습니다.
최대 조명 범위의 감쇠는 0.0이 아닙니다. 조명 범위에 있을 때 조명이 갑자기 나타나지 않도록 애플리케이션에서 조명 범위를 늘릴 수 있습니다. 또는 감쇠 계수가 조명 범위에서 0.0에 가깝도록 애플리케이션에서 감쇠 상수를 설정할 수 있습니다. 감쇠 값에 조명 색의 빨강, 녹색, 파랑 구성 요소를 곱하여 조명이 꼭짓점으로 이동하는 거리의 계수로 조명의 강도를 스케일링합니다.
스포트라이트 계수
다음은 스포트라이트 계수를 지정하는 수식입니다.
매개 변수 | 기본값 | Type | Description | 범위 |
---|---|---|---|---|
rhoi | 해당 없음 | FLOAT | 스포트라이트 i에 대한 코사인(각도) | 해당 없음 |
phii | 0.0 | FLOAT | 스포트라이트 i의 반영 각도(라디안 단위) | [thetai, pi) |
thetai | 0.0 | FLOAT | 스포트라이트 i의 본영 각도(라디안 단위) | [0, pi) |
falloff | 0.0 | FLOAT | 대칭 계수 | (음의 무한대, 양의 무한대) |
위치:
rho = norm(Ldcs).norm(Ldir)
and:
매개 변수 | 기본값 | Type | 설명 |
---|---|---|---|
Ldcs | 해당 없음 | D3DVECTOR | 카메라 공간에서 조명 방향의 음수 |
Ldir | 해당 없음 | D3DVECTOR | 꼭짓점 위치에서 조명 위치까지의 방향 벡터 |
광원 감쇠를 계산한 후 Direct3D는 해당하는 경우 스포트라이트 효과, 빛이 표면에서 반사하는 각도 및 현재 재질의 반사를 고려하여 해당 꼭짓점에 대한 확산 및 반사 구성 요소를 계산합니다. 자세한 내용은 SpotLight를 참조하세요.
관련 항목