본문 바로가기
DirectX/[Inflearn_rookiss] Part2: DirectX12

15. Lighting 기본 개념

by 헛둘이 2023. 1. 25.

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

-> 광원에서부터 특정 방향을 향해 나아가는 빛

출처: Unity Manual

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

댓글