[유니티 쉐이더 스타트업] Part10 | 디지털 라이트 이론
![post-thumbnail](https://velog.velcdn.com/images/jungizz_/post/887cea0c-4bc2-442f-a4dc-2a45e3f86869/image.jpeg)
1. 디지털 라이트
- 디렉셔널 라이트 (Directional Light)
- 직진성을 가지며 '방향'정보만을 가진다.
- 가장 가벼운 라이트
![](https://velog.velcdn.com/images/jungizz_/post/058a80e7-ca08-4ea2-b348-7f5b83073d87/image.png)
- 포인트 라이트 (Point Light)
- 점 모양의 광원이며 사방으로 뻗어나간다.
- 둥근 모양의 라이트 혹은 일정 범위의 국지적 분위기 표현
![](https://velog.velcdn.com/images/jungizz_/post/67cbb4cf-f904-4e9a-8b38-a05e6b15e0e2/image.png)
- 스팟 라이트 (Spot Light)
- 특정 부분 강조, 표현 시 사용
![](https://velog.velcdn.com/images/jungizz_/post/c2580625-2df2-4405-bd65-0c5802d85d72/image.png)
2. 디지털 라이트의 원리
- '물체에 빛을 비추면 밝아진다.'라는 것을 수학으로 구현
- 빛이 Plane을 향할 때 가장 밝다
-> 빛의 방향과 Plane의 앞 방향이 마주볼 때 가장 밝다
-> 두 방향의 각도가 90도가 되면 가장 어둡다.
![](https://velog.velcdn.com/images/jungizz_/post/ec5b9869-b657-4ff3-8314-7b02f4844ec2/image.png)
![](https://velog.velcdn.com/images/jungizz_/post/f291ff3f-8f4e-44da-8a78-218c2bddd58a/image.png)
3. 벡터
조명 벡터
와 노멀 벡터
가 서로 마주보고 있을 때 그면은 가장 밝다.
4. 벡터의 특성
- 벡터의 위치는 의미가 없다.
- 벡터의 표시 -> ex)
float2(0.5, 0.5)
- 벡터를 음수로 바꾸면 뒤집어진다.
- XYZ는 RGB와 동일
- float3(1, 0, 0)은 빨간색을 나타내기도 하면서 X쪽으로 길이가 1인 화살표를 나타낸다.
-이것이 화살표 색상의 의미이다
![](https://velog.velcdn.com/images/jungizz_/post/82c36810-a120-45d5-8df0-b2480b72376f/image.png)
5. 노멀 벡터 (Normal Vector)
- 노멀 벡터가 면에 있으면 부드러운 라이팅을 구현할 수 없으므로 요즘에는 노멀 벡터가 버텍스에 있다.
- 만약 각진 형태(Hard Edge)를 만들고 싶다면 한 버텍스에 노멀이 3-4개가 필요하며, 각 노멀은 각 면의 밝기를 나타내는 연산을 한다. (버텍스를 복사하여 같은자리에 표현한다.)
☑️ 최근에는 각진 형태를 표현하면 오히려 버텍스의 양이 더 늘어난다!![](https://velog.velcdn.com/images/jungizz_/post/6576a4b6-f41f-4675-912f-ddb0f9e71a6e/image.png)
6. 벡터의 연산
- 벡터의 내적 (Dot)
- 두 벡터의 각도 차이를 숫자로 표현한 것
- 단위 벡터 기준으로 두 벡터 사이 각도의 cos 값
- 두 벡터 각도 차이가 0이면 1, 90도이면 0, 180도이면 -1 (수직일 때 0이다.)
- float3(a, b, c) • float3(x, y, z) = ax + by + cz
7. 벡터 연산을 이용한 디지털 조명 연산
- 가장 밝은 경우를 내적 연산하면 -1 (cos
180
= -1)
![](https://velog.velcdn.com/images/jungizz_/post/9faa54c3-97cb-4597-aa8a-e7c8cf4f18a6/image.png)
- 가장 밝은 경우인데 -1이면 곤란하므로 뒤집힌 상태의 조명벡터를 사용하는 것이 일반적이다. 유니티에서도 조명벡터를 뒤집힌 채로 받아온다. (cos
0
= 1)![](https://velog.velcdn.com/images/jungizz_/post/89455caf-5f84-4edd-9a2b-5ed02c448f7c/image.png)
- 구(Spere)가 디렉셔널 라이트를 받을 때 각 버텍스 위치별 내적 값
![](https://velog.velcdn.com/images/jungizz_/post/3fde12be-5e76-411f-a338-8f338777b322/image.png)
![](https://velog.velcdn.com/images/jungizz_/post/1539a108-6524-4cf8-908c-165e68c1dbd4/image.png)