1. 조명의 주요 벡터
2. 람베르트 코사인 법칙 [ Lambert's Cosine Law ]
빛에서 중요한 것은 단위 면적당 받는 빛의 에너지(E) 이다. 같은 양의 빛을 비스듬하게 비추는 것보다 정면으로 비추는 빛이 더 강한 빛이다. 이는 빛의 에너지 = 복사조도(단위 면적당 복사 선속의 밀도) 한 영역에 빛의 양을 결정한다.
A1 단면적인 빛을 표면에 정면으로 때릴 떄 각은 0도 (1번)이고 같은 양(A1) 단면적인 빛을 사전으로 때릴 때 각은 세타도이다. 이 각으로 통해 복사조도(단위 면적당 복사 선속의 밀도)를 구할 수 있다.
위의 그림과 같이 삼각법에 따라 2번의 E2를 구하면, 아래와 같은 식이 도출된다.
3. 분산 조명 [ diffuse light / 난반사광, 분산광 ]
빛은 어떤 물체 내부에 들어가서 표면과 상호작용한다. 일부는 흡수하고 일부는 반사되어 모든 방향으로 흩어진다. 이를 분산 반사(diffuse reflectipn 또는 난반사, 확산 반사)라고 한다.
분산 조명의 계산은 두 부분으로 나뉜다.
첫번째, 응용 프로그램이 지정한 빛의 색상, 분산 반사율(diffuse albedo)을 계산하는 부분이다. 분산 반사율은 입사광 중 분산 반사에 의해 반사 되는 양을 나타낸다. 빛의 색과 성분별 색상 곱셈 방식으로 곱하면 반사된 빛의 색이 나온다.
두번째, 람베르트 코사인 법칙(표면이 원래의 빛을 얼마나 받는지를 표면 법선과 빛 벡터 사이의 각도)를 근거로 빛의 양을 보정해준다.
4. 주변 조명 [ ambient light / 환경광, 주변광 ]
간접광의 효과를 근사적으로 흉내 내기 위해 조명 공식에 다음과 같은 주변광 항을 도입한다. 간접광의 분산 반사를 모형화한 것에 해당한다. 모든 주변광은 일정하게 물체를 조금 더 밝게 만든다.
5. 반영 조명 [ specular light / 정반사광, 반영광 ]
정반사는 시점에 의존적이다. 특정한 방향으로 진행하며 분산광과 다르게 한 방향으로 강하게 반사하기 때문에 시점에 따라 인식되지 않기 때문이다. 이는 장명을 바라보는 눈의 위치가 바뀌면서 눈에 도달하는 반영광의 양도 달라짐을 뜻한다.
굴절률이 다른 두 매질 사이의 경계면에 빛이 도달하면 빛의 일부는 반사되고 나머지는 굴절된다. 굴절률(index of refraction)은 매질의 물리적 속성으로 진공에서의 빛의 속도를 해달 매질 안에서의 빛의 속도로 나눈것이다.
현실에서 반사 물체가 완벽한 거울인 경우는 드물다. 물체의 표면이 평평해 보여도, 미시적 수준에서는 표면에 들쭉날쭉한 요철이 있다. 표면이 들쭉날쭉한 정도를 표면 거칠기(surface roughness : 표면 조도)라고 부른다. 표면이 거칠수록 법선들의 방향이 벗어나며 따라서 반사된 빛이 일정 범위로 퍼진다. 이러한 범위를 반영 돌출부(specular lobe)라고 한다.
반영반사에 의해 눈에 도달하는 빛의 양을 구하자.
6. 최종 조명 방정식
'🎯 game engine > ◽ directX12' 카테고리의 다른 글
[DirectX12] 큐브맵 만들기 / StructuredBuffer (0) | 2024.11.26 |
---|---|
[DirectX12] 스텐실(stencil) 거울 만들기 (0) | 2024.11.07 |
[DirectX12] 조명 연산을 위한 법선 벡터, 법선 벡터의 변환 (0) | 2023.12.14 |
[DirectX12] 원기둥의 정점 찍기/렌더링 과정 이해하기 (1) | 2023.12.12 |
[DirectX12] Direct3D 초기화 과정, 그래픽 프로그래밍의 CPU와 GPU의 상호작용 (1) | 2023.12.06 |
안 하는 것 보다 낫겠지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!