Grahpics
[Graphics] DirectX12 - Lighting 개요
송만덕
2022. 2. 6. 03:29
Lighting 개요
빛
- 3D 표현을 위해서는 명암이 중요하고, 명암을 표현하기 위해선 조명이 필요하며 조명이 나타내는 빛이 존재한다.
- 우선 빛의 종류로는 크게 세가지가 있다.
Diffuse : 난반사광 | Ambient : 환경광 | Specular : 정반사광 |
|
|
|
- Vertex Shader는 정점에 관한 연산을 해준다면, Pixel Shader에서는 픽셀에 대한 색상의 연산 등이 호출이 된다.
- 물체와 빛에 따른 벡터의 내용은 다음과 같다.
빛의 연산
Diffuse 난반사광
- Diffuse의 경우 람베르트(램버시안) 코사인 법칙을 사용한다.
- 표면 위치 벡터에서 빛 위치 벡터를 빼서 빛에서 표면으로 가는 벡터를 구한 뒤, 입사각의 코사인값을 구하기 위해 Normal 벡터와 빛 벡터의 내적을 이용한다.
- 이후 빛을 정면으로 받으면 입사각이 0이 될 것이며 cos 0 = 1이기 때문에 강하게 나타나고,
- 비스듬히 받으면( 90 > θ >0) 0~1의 값이 나와 1보단 흐릿해지며
- 90도가 넘어갈 경우 cos <90 은 0~음수이기 때문에 빛이 비치지 않게 된다.
- 만약 RGB 값이 {1, 1, 1}이며 입사각이 60˚라면 빛의 양은 0.5가 될 것이고 이를 RGB에 곱하여 얻는 결과값은 {0.5, 0.5, 0.5}가 되는 것이다.
Ambient 환경광
- 환경광의 경우 각도나 세기에 상관없이 물체나 배경에 모두 일정하게 비추는 빛이다.
- 따라서 환경광은 여러방향으로 비추고 반사하기 때문에 빛이 직접 닿지 않더라도 반사하여 물체에 닿는 빛을 고려해주어 최소한의 빛의 값을 보장해준다.
- 환경광의 세기에 따라 물체의 RGB에 곱해짐으로써 영향을 주게 된다.
Specular 정반사광
- 빛이 표면에 닿아 입사각과 같은 각도로 반사되는 빛이다.
- Specular 연산은 다음과 같다.
- Vector R과 Vector C의 사이각에 따라 빛의 세기가 달라진다.
- Vector R을 구하는 방법은 다음과 같다.
조명
- Directional Light = 보통 환경광을 표현할 때 사용됨
- Point Light = 전등이나 횃불과 같이 주변을 밝히는 조명에 사용됨
- Spot Light = 손전등과 같이 특정한 방향을 밝히는 조명에 사용됨.