Lighting에서 얘기하는 노멀이란?
- 점 하나를 잡고 그 점에 속한 평면에서 수직인 벡터를 노멀 벡터라고 한다.
그럼 탄젠트는?
- 그 만들어진 평면과 일치하는 방향의 벡터를 의미한다.
1. Diffuse (난반사)
- 물체가 빛을 어떻게 받아들이는가에 대한 얘기
- 직각? 비스듬?
- 빛의 방향을 나타내는 벡터 L과 점 P의 노멀벡터 N의 각도에 따라 이 픽셀이 빛을 어떻게 받는지 계산해줄 수 있다.
- 만약 Diffuse가 (0.5f, 0.5f, 0.5f)일 경우, 위의 두 벡터 L, N이 수직이라면 RGB에 그대로 Diffuse가 가진 값을 곱해주고
- 두 벡터를 내적해서 cos 값을 구한 후 비스듬한 정도에 따라 그 값을 곱해준다 (60도인 경우 cos60'이므로 1/2를 한 값을 곱해주는 식)
- 빛도 자기 자신만의 점수가 있는데 각도에 따라 달라짐
- 그런데 빛의 방향이 바닥을 향하고 있고, 노멀 벡터는 위를 향하고 있으니 두 벡터가 만들어내는 삼각형은 둔각이므로 내적하면 음수가 나온다.
- 이 경우 그냥 빛에다가 - 부호를 붙이면 방향이 반대가 됨
- 그 값을 내적해서 위에서 설명한 대로 계산하면 된다.
2. Ambient (환경, 주변광)
- 어떤 물체에 빛이 직접 닿지 않아도 주변광에 의해 보인다는 것
- 빛은 뭔가와 닿는 순간 바로 상쇄되는 것이 아니라 튕겨나간다.
- 위에서 내려오는 빛을 직접 받지 못한다고 하더라도 어딘가 빛이 존재한다면 반사되어서 보이긴 한다는 것
- ambient는 그냥 기본값, 예를 들면 (0.1f, 0.1f, 0.1f) 정도의 값을 기본으로 깔고 가는 값이라고 보면 된다.
3. Specular (정반사)
- 어떤 물체의 표면에 빛이 닿으면 노멀 벡터를 기준으로 대칭된 각도로 빛이 튕겨나가게 된다.
- 그 튕겨나간 빛이 우리 눈에 뿅 들어오는 경우도 있지만 그 각도와 눈의 위치가 정확히 맞기는 쉽지 않음
- 그 각도에 주목해서 우리가 그 픽셀을 바라보는 벡터와 그 튕겨나간 빛의 각도를 구해서 위의 Diffuse와 같이 계산해주면 된다.
- 그 각도가 커질 수록 빛이 가진 점수가 떨어진다고 생각하면 쉬움
- 튕겨나간 빛을 나타내는 벡터를 R(Reflection) 이라고 부른다
빛이 생김으로써 어떤 물체는 어둠에 가려지고 어떤 물체는 그려진다.
이런 빛에 의해 그려질지 말지를 결정하는 것은 빛의 종류에 따라 결정될 수 있는데
빛의 종류란?
1. Directional Light
-> 광원에서부터 특정 방향을 향해 나아가는 빛
2. Point Light
-> 한 점으로부터 일정 반경으로 퍼지는 빛
-> 예를 들면 횃불
3. Spot Light
-> 특정 Spot을 지정해서 그 곳을 비추는 빛
-> 예를 들면 손전등
-> d는 단위벡터이므로 p cos𝜽는 p의 d성분이 된다.
-> 이 성분과 우리가 정해 놓은 임의의 한계치를 비교해서 그 물체를 그려줄지 말지 결정할 수 있다.
'DirectX > [Inflearn_rookiss] Part2: DirectX12' 카테고리의 다른 글
17. Normal Mapping (0) | 2023.01.27 |
---|---|
16. Lighting 구현 (0) | 2023.01.26 |
14. Resources & 3D Cube 생성 (0) | 2023.01.25 |
13. Translation 정리 & Camera 클래스 추가 (0) | 2023.01.24 |
12. Projection, Screen 변환 행렬 (2) | 2023.01.23 |
댓글