조명의 수학적 계산
Microsoft® Direct3D® 의 조명 모델은, 앰비언트 라이트, 디퓨즈 라이트, 스펙큐러 라이트, 에미션(emission) 라이트를 대상으로 하는 것이다. 광범위한 조명 상황에 대응할 수 있는 충분한 유연성을 갖추고 있다. 장면(scene)내의 빛의 총량은,글로벌 일루미네이션으로 불려 다음의 방정식을 사용해 계산한다.
글로벌 일루미네이션 = 앰비언트 라이트 + 디퓨즈 라이트 + 스펙큐러 라이트 + 에미션(emission) 라이트
앰비언트 라이트는 균일한 조명이다. 모든 방향으로 균일해, 개체의 모든 픽셀에 같은 첨가한다. 단시간에 계산할 수 있지만, 개체는 평탄하고 리얼하게 안보인다. Direct3D 에 의한 앰비언트 라이트의 계산방법에 대해서는, 「앰비언트 라이트」를 참조할것.
디퓨즈 라이트는, 라이트의 방향과 개체의 표면 법선의 양쪽 모두에 의존한다. 라이트의 방향과 표면의 법선 벡터의 변화에 수반해, 개체의 표면상에서 변화한다. 디퓨즈 라이트는, 개체의 정점 마다 다르기 (위해)때문에 계산에 시간이 걸리지만, 사용 하면 개체에 음영이 태어나 3 차원 (3D)의 깊이가 나온다고 하는 이점이 있다. Direct3D 에 의한 디퓨즈 라이트의 계산방법에 대해서는, 「디퓨즈 라이트」를 참조할것.
스펙큐러 라이트는, 개체의 표면에 빛이 맞아, 카메라로 향해 반사할 경우에 태어나는 밝은 스펙큐러 하이라이트를 식별한다. 디퓨즈 라이트보다 강하지만, 개체의 표면상에서 보다 급격하게 약해진다. 스펙큐러 라이트는, 디퓨즈 라이트보다 계산에 시간이 걸리지만, 사용 하면 표면을 보다 섬세하게 표현할 수 있다고 하는 이점이 있다. Direct3D 에 의한 스펙큐러 라이트의 계산방법에 대해서는, 「스펙큐러 라이트」를 참조할것.
에미션(emission) 라이트는, 빛남 등, 개체가 방사하는 빛이다. Direct3D 에 의한 에미션(emission) 라이트의 계산방법에 대해서는, 「에미션(emission) 라이트」를 참조할것.
3D 장면에 이러한 종류의 조명을 각각 적용해, 리얼한 조명을 실현할 수 있다. 한층 더 리얼한 조명 이펙트를 실현하기 위해서(때문에)는, 라이트를 추가한다. 다만, 그 경우, 장면(scene)의 렌더링에 시간이 걸리게 된다. 디자이너가 요구하는 이펙트를 모두 실현되기 (위해)때문에, 일부의 게임에서는 보통 이용 가능한 범위를 넘어 CPU 를 사용한다. 이 경우, 보통, 텍스처 맵을 사용하는 것과 동시에, 조명 맵과 환경 맵을 사용해 장면(scene)에 조명을 더하는 것으로, 조명 계산의 수를 최소한으로 억제한다.
조명은 카메라 공간에서 계산된다. 조명 변환의 계산방법에 대해서는, 「카메라 공간 변환」을 참조할것. 특수한 조건이 존재하는 경우는, 모델 공간에서 최적인 조명을 계산할 수 있다. 예를 들어, 법선 벡터가 항상 정규화되는 (D3DRS_NORMALIZENORMALS 가 True 이다), 정점 혼합이 필요하지 않는, 변환 행렬이 정사영 행렬인 등의 경우이다.
앰비언트 라이트, 디퓨즈 라이트, 스펙큐러 라이트의 값은, 지정한 라이트의 감쇠 및 spotlight 계수의 영향을 받는 경우가 있다. 앰비언트, 에미션(emission), 및 디퓨즈 성분에 대해 계산된 값은, 디퓨즈 출력 정점색에 저장 된다. 이것들 양쪽 모두에 대한 항은, 디퓨즈 방정식과 스펙큐러 방정식에 포함되어 있다. 더 자세한 정보는, 「감쇠와 spotlight 계수」를 참조할것.
http://www.telnet.or.kr/directx/graphics/programmingguide/fixedfunction/lightsandmaterials/mathematicsoflights/mathematicsoflights.htm
'프로그래밍 > 공부관련' 카테고리의 다른 글
지형픽킹 (0) | 2010.03.09 |
---|---|
D3D reSet 과 lostDevice을 고려하고 시작을 했어야 했는데........ (0) | 2010.03.01 |
Directx9.0c 버퍼관련.. (0) | 2010.02.08 |
DirectX 예제 XYZ축 라인그리기 및 카메라(뷰행렬)에 관한 예제 (0) | 2010.01.26 |
[MFC]다이얼로그바 띄우기 (0) | 2010.01.25 |