조명 및 재질(Direct3D 9)
조명은 장면의 개체를 비추는 데 사용됩니다. 조명을 사용하도록 설정하면 Direct3D는 다음의 조합에 따라 각 개체 꼭짓점의 색을 계산합니다.
메모
이 섹션은 고정 함수 파이프라인에만 해당합니다. 프로그래밍 가능한 셰이더는 모든 조명을 명시적으로 수행합니다.
- 연결된 텍스처 맵의 현재 재질 색 및 텍셀입니다.
- 지정한 경우 꼭짓점의 확산 및 반사 색입니다.
- 장면 또는 장면의 주변 광원에서 생성된 광원의 색과 강도입니다.
Direct3D 조명 및 재질을 사용하는 경우 Direct3D에서 조명의 세부 정보를 처리할 수 있습니다. 원하는 경우 고급 사용자가 스스로 조명을 수행할 수 있습니다.
조명 및 재질로 작업하는 방식은 렌더링된 장면의 모양에 큰 차이를 만듭니다. 재질은 빛이 표면에서 반사되는 방식을 정의합니다. 직접 광원 및 주변 광원 수준은 반사되는 빛을 정의합니다. 조명을 사용하는 경우 재질을 사용하여 장면을 렌더링해야 합니다. 장면을 렌더링하는 데는 조명이 필요하지 않지만 조명 없이 렌더링된 장면의 세부 정보는 표시되지 않습니다. 조명이 켜지지 않은 장면을 렌더링하면 장면에 있는 개체의 실루엣이 생성됩니다. 이는 대부분의 용도로는 충분하지 않습니다.
직접 광원 및 주변 광원
장면의 직접 및 주변 조명은 개체를 비추지만 서로 독립적이며 매우 다른 효과를 가지며 완전히 다른 방식으로 작업해야 합니다.
직접 조명은 바로 직접입니다. 직접 광원에는 항상 방향과 색이 있으며 Gouraud 음영과 같은 음영 알고리즘의 한 요소입니다. 다양한 유형의 조명은 다양한 방식으로 직접 조명을 방출하여 특별한 감쇠 효과를 만듭니다. IDirect3DDevice9::SetLight 메서드를 호출하여 직접 광원에 대한 광원 매개 변수 집합을 만듭니다.
주변 조명은 장면의 모든 곳에서 효과적으로 적용됩니다. 개체와 해당 장면의 위치에 관계없이 전체 장면을 채우는 일반적인 수준의 빛으로 생각할 수 있습니다. 주변 광원에는 위치나 방향이 없으며 색상과 강도만 있습니다. 각 조명은 장면의 전체 주변 조명에 추가됩니다. IDirect3DDevice9::SetRenderState 메서드를 호출하여 앰비언트 조명 수준을 설정하고 D3DRS_AMBIENT State 매개 변수로 지정하고 원하는 RGBA 색을 Value 매개 변수로 지정합니다.
앰비언트 밝은 색은 각 구성 요소가 0에서 255까지의 정수 값인 RGBA 값의 형태를 사용합니다. Direct3D의 대부분의 색 값과는 다릅니다.
D3DCOLOR_RGBA 매크로를 사용하여 RGBA 값을 생성할 수 있습니다. 빨간색, 녹색 및 파란색 구성 요소가 결합하여 주변 조명의 최종 색을 만듭니다. 알파 구성 요소는 색의 투명도를 제어합니다. 하드웨어 가속 또는 RGB 에뮬레이션을 사용하는 경우 알파 구성 요소는 무시됩니다.
Direct3D 라이트 모델 및 자연
본질적으로, 빛이 원본에서 방출될 때, 사용자의 눈에 도달하기 전에 수천 또는 수백만 개의 물체가 아닌 경우 수백 개의 빛이 반사됩니다. 반사될 때마다 일부 빛은 표면에 흡수되고, 일부는 임의의 방향으로 흩어져 있고, 나머지는 다른 표면이나 사용자의 눈에 흩어져 있습니다. 이 프로세스는 빛이 아무것도로 줄어들거나 사용자가 빛을 인식할 때까지 계속됩니다.
물론 빛의 자연스러운 동작을 완벽하게 시뮬레이션하는 데 필요한 계산은 실시간 Direct3D 그래픽에 사용하기에는 시간이 너무 많이 걸립니다. 따라서 속도를 염두에 두고 Direct3D 조명 모델은 자연계에서 빛이 작동하는 방식을 근사화합니다. Direct3D는 최종 색을 만들기 위해 결합되는 빨강, 녹색 및 파란색 구성 요소의 관점에서 빛을 설명합니다.
Direct3D에서 빛이 표면을 반사하면 밝은 색이 표면 자체와 수학적으로 상호 작용하여 결국 화면에 표시되는 색을 만듭니다. Direct3D에서 사용하는 알고리즘에 대한 자세한 내용은 조명 수학(Direct3D 9)참조하세요.
Direct3D 조명 모델은 조명을 주변 광원과 직접 광원의 두 가지 유형으로 일반화합니다. 각 특성은 서로 다르며, 각 특성은 서로 다른 방식으로 표면의 재질과 상호 작용합니다. 주변 광원은 방향과 소스가 확정되지 않도록 너무 많이 흩어져 있는 빛입니다. 사진작가가 사용하는 간접 조명은 주변 조명의 좋은 예입니다. Direct3D의 주변 광원은 본질적으로 실제 방향이나 소스가 없으며 색상과 강도만 있습니다. 실제로 주변 광원 수준은 빛을 생성하는 장면의 모든 개체와 완전히 독립적입니다. 주변 광원은 반사 반사에 영향을 주지 않습니다.
직접 광원은 장면 내의 소스에 의해 생성된 광원입니다. 항상 색과 강도를 가지며 지정된 방향으로 이동합니다. 직접 광원은 표면의 재질과 상호 작용하여 반사 하이라이트를 생성하며, 그 방향은 Gouraud 음영을 포함한 음영 알고리즘의 요인으로 사용됩니다. 직접 조명이 반사되면 장면의 주변 광원 수준에 영향을 주지 않습니다. 직접 광원을 생성하는 장면의 소스는 장면을 비추는 방법에 영향을 주는 다양한 특성을 가집니다.
또한 다각형의 재질에는 다각형이 수신하는 빛을 반사하는 방법에 영향을 주는 속성이 있습니다. 재료가 주변 빛을 반사하는 방법을 설명하는 단일 반사 특성을 설정하고 개별 특성을 설정하여 재료의 반사 및 확산 반사를 결정합니다. 자세한 내용은 재질(Direct3D 9)참조하세요.
조명 및 재질의 색 값
Direct3D는 최종 색을 만들기 위해 결합된 네 가지 구성 요소-빨강, 녹색, 파랑 및 알파를 기준으로 색을 설명합니다. D3DCOLORVALUE C++ 구조체는 각 구성 요소에 대한 값을 포함하도록 정의됩니다. 각 멤버는 일반적으로 0.0에서 1.0 사이의 부동 소수점 값입니다. 조명과 재질 모두 색을 설명하기 위해 동일한 구조를 사용하지만 구조체의 값은 각각 약간 다르게 사용됩니다.
광원의 색 값은 내보내는 특정 광원 구성 요소의 양을 나타냅니다. 조명은 알파 구성 요소를 사용하지 않으므로 색의 빨간색, 녹색 및 파란색 구성 요소만 관련이 있습니다. 세 가지 구성 요소를 프로젝션 텔레비전에서 빨간색, 녹색 및 파란색 렌즈로 시각화할 수 있습니다. 각 렌즈가 꺼져 있거나(적절한 멤버의 0.0 값), 가능한 한 밝거나(1.0 값) 그 사이에 어느 정도 있을 수 있습니다. 렌즈를 통해 들어오는 색상은 빛의 최종 색상을 만들기 위해 결합됩니다. R(1.0), G(1.0), B(1.0)와 같은 조합은 R(0.0), G(0.0), B(0.0)가 빛을 전혀 내보내지 않는 흰색 빛을 만듭니다. 하나의 구성 요소만 내보내는 조명을 만들어 순수한 빨강, 녹색 또는 파랑광을 생성할 수 있습니다. 또는 조명이 조합을 사용하여 노란색 또는 자주색과 같은 색을 내보낸다. 음수 색 구성 요소 값을 설정하여 장면에서 실제로 빛을 제거하는 "어두운 빛"을 만들 수도 있습니다. 또는 구성 요소를 1.0보다 큰 값으로 설정하여 매우 밝은 조명을 만들 수 있습니다.
반면에 재질을 사용하면 색 값은 해당 재질로 렌더링되는 표면에서 반사되는 조명 구성 요소의 양을 나타냅니다. 색 구성 요소가 R(1.0), G(1.0), B(1.0), A(1.0)인 재질은 모든 빛을 반영합니다. 마찬가지로 R(0.0), G(1.0), B(0.0), A(1.0)가 있는 재질은 방향이 지정된 모든 녹색 빛을 반영합니다. 재질에는 다양한 유형의 효과를 만들기 위한 여러 반사 값이 있습니다.
추가 정보는 조명 유형(Direct3D 9)및 조명 속성(Direct3D 9)포함됩니다.
관련 항목