다음을 통해 공유


라이트 형식(Direct3D 9)

광원 유형 속성은 사용 중인 광원 유형을 정의합니다. 조명 형식은 조명의 D3DLIGHT9 구조체의 Type 멤버에 있는 D3DLIGHTTYPE C++ 열거형의 값을 사용하여 설정됩니다. Direct3D에는 점 조명, 스포트라이트 및 방향 조명의 세 가지 유형의 조명이 있습니다. 각 형식은 다양한 수준의 계산 오버헤드로 장면의 개체를 다르게 비춥니다.

점 표시등

점 표시등은 장면 내에서 색과 위치를 가지지만 단 방향은 없습니다. 다음 그림과 같이 모든 방향에서 동일하게 빛을 내립니다.

점등그림

전구는 점등의 좋은 예입니다. 점 표시등은 감쇠 및 범위의 영향을 받으며 꼭짓점 단위로 메시를 비춥다. 조명 중에 Direct3D는 세계 공간에서 점 광원의 위치와 조명이 켜지는 꼭짓점의 좌표를 사용하여 빛의 방향과 빛이 이동한 거리에 대한 벡터를 파생합니다. 둘 다 꼭짓점 법선과 함께 표면의 조명에 대한 빛의 기여도를 계산하는 데 사용됩니다.

방향 광원

방향 조명은 위치가 아닌 색상과 방향만 있습니다. 병렬 조명을 내보낸다. 즉, 방향 표시등에 의해 생성된 모든 빛이 동일한 방향으로 장면을 통과합니다. 방향광을 태양과 같이 거의 무한거리의 광원으로 상상해 보십시오. 방향 표시등은 감쇠 또는 범위의 영향을 받지 않으므로 Direct3D에서 꼭짓점 색을 계산할 때 지정하는 방향과 색만 고려됩니다. 조명 계수가 적기 때문에 계산 집약적 조명이 가장 적게 사용됩니다.

스포트라이트

스포트라이트에는 빛을 내보내는 색, 위치 및 방향이 있습니다. 스포트라이트에서 방출되는 빛은 다음 그림과 같이 밝은 내부 원뿔과 더 큰 바깥쪽 원뿔로 구성되며, 둘 사이에 조명 강도가 감소합니다.

내부 원뿔과 바깥쪽 원뿔그림

스포트라이트는 대체, 감쇠 및 범위의 영향을 받습니다. 이러한 요소와 각 꼭짓점까지 이동하는 거리 조명은 장면의 개체에 대한 조명 효과를 계산할 때 파악됩니다. 각 꼭짓점마다 이러한 효과를 계산하면 Direct3D에서 모든 조명의 계산 시간이 가장 많이 소요됩니다.

D3DLIGHT9 C++ 구조체에는 스포트라이트에서만 사용되는 세 개의 멤버가 포함되어 있습니다. Falloff, Theta 및 Phi 멤버는 스포트라이트 개체의 내부 및 외부 원뿔이 얼마나 크거나 작은지, 그리고 그 사이에 빛이 어떻게 감소하는지 제어합니다.

세타 값은 스포트라이트의 내부 원뿔의 라디안 각도이며, 피 값은 빛의 바깥쪽 원뿔에 대한 각도입니다. 폴오프 값은 내부 원뿔의 바깥쪽 가장자리와 바깥쪽 원뿔의 내부 가장자리 간에 조명 강도가 감소하는 방식을 제어합니다. 대부분의 애플리케이션은 Falloff를 1.0으로 설정하여 두 원뿔 사이에 균등하게 발생하는 폴오프를 만들지만 필요에 따라 다른 값을 설정할 수 있습니다.

다음 그림에서는 이러한 멤버에 대한 값 간의 관계와 이러한 멤버가 스포트라이트의 안쪽 및 바깥쪽 원뿔에 미치는 영향을 보여 줍니다.

phi와 theta 값이 스포트라이트 원뿔과 어떻게 관련되는지에 대한 그림

스포트라이트는 밝은 내부 원뿔과 바깥쪽 원뿔의 두 부분으로 된 빛의 원뿔을 내보낸다. 빛은 내부 원뿔에서 가장 밝으며 외부 원뿔 바깥쪽에는 존재하지 않으며, 두 영역 사이에 조명 강도가 감쇠됩니다. 이러한 유형의 감쇠를 일반적으로 대체라고 합니다.

꼭짓점이 수신하는 광원의 양은 내부 또는 외부 원뿔에 있는 꼭짓점의 위치를 기반으로 합니다. Direct3D는 조명에서 꼭짓점(D)으로 스포트라이트 방향 벡터(L) 및 벡터의 점 곱을 계산합니다. 이 값은 두 벡터 사이의 각도 코사인과 같으며, 꼭짓점이 내부 또는 바깥쪽 원뿔에 있을 수 있는 위치를 결정하기 위해 조명의 원뿔 각도와 비교할 수 있는 꼭짓점 위치의 표시기 역할을 합니다. 다음 그림에서는 이러한 두 벡터 간의 연결을 그래픽으로 표현합니다.

꼭짓점에서 스포트라이트까지의 스포트라이트 방향 벡터 및 벡터의 그림

시스템은 이 값을 스포트라이트의 내부 및 외부 원뿔 각도의 코사인과 비교합니다. 조명의 D3DLIGHT9 구조에서 Theta 및 Phi 멤버는 내부 및 외부 원뿔의 총 원뿔 각도를 나타냅니다. 감쇠는 꼭짓점이 전체 원뿔 각도를 가로지른 것이 아니라 조명 중심에서 멀어짐에 따라 발생하므로 런타임은 코사인을 계산하기 전에 이러한 원뿔 각도를 반으로 나눕니다.

벡터 L과 D의 점 곱이 외부 원뿔 각도의 코사인보다 작거나 같으면 꼭짓점은 바깥쪽 원뿔 너머에 있으며 빛을 받지 않습니다. L과 D의 점 곱이 내부 원뿔 각도의 코사인보다 크면 꼭짓점은 내부 원뿔 내에 있으며 최대 빛의 양을 받으며 여전히 거리에 대한 감쇠를 고려합니다. 꼭짓점이 두 영역 사이에 있는 경우 다음 수식을 사용하여 대체를 계산합니다.

대체수식

어디:

  • 나는 f 폴오프 후 가벼운 강도입니다
  • 알파는 벡터 L과 D 사이의 각도입니다.
  • 세타는 내부 원뿔 각도입니다.
  • Phi는 외부 원뿔 각도입니다.
  • p는 대체입니다.

이 수식은 0.0에서 1.0 사이의 값을 생성하여 꼭짓점에서 광원 강도의 배율을 조정하여 대체를 고려합니다. 조명에서 꼭짓점의 거리 요소인 감쇠도 적용됩니다. 다음 그래프는 다른 대체 값이 대체 곡선에 어떤 영향을 줄 수 있는지 보여줍니다.

광원에서의 꼭짓점 거리와 광도의 그래프를

실제 조명에 대한 다양한 폴오프 값의 효과는 미묘하며, 1.0 이외의 폴오프 값으로 폴오프 곡선을 형성하여 작은 성능 저하가 발생합니다. 이러한 이유로 이 값은 일반적으로 1.0으로 설정됩니다.

조명 및 재질