Unity
[유니티] 쉐이더 기초 : 램버트 라이팅 (Lambert Lighting)
l__j__h
2024. 2. 20. 16:45
(유니티 외에 쉐이더가 필요한 곳에서 범용적으로 쓰이는 기법임)
Lambert Lighting?
- 월드 노말과 메인 라이트 방향의 반대를 내적(dot)하여 빛을 연산한 것 = ndotl
Half Lambert Lighting
- 내적 연산은 cos으로, 빛을 받는 부분과 못 받는 부분의 차이가 너무 극심해서 어색함
- 따라서, 위에서 구한 램버트 라이팅 값에 *0.5 + 0.5(Magic Number) 를 해주어 차이를 부드럽게 만듬
- 물리적으로 올바른 표현 방법은 아니지만, 보기에 좋아서 많이 씀
- 그런데 하프 램버트만 해주면, 원래 빛을 못 받았을 부분이 실제보다 많이 밝아짐
- → 따라서 보통은 하프 램버트 값을 제곱(pow)하여 사용함. 2-3번하면 자연스러워짐
Magic Number는 *2 - 1 도 있음
이렇게 만든 램버트 라이팅에
- 텍스처 (곱셈)
- 노말맵 (ndotl의 월드 노말을 노말맵(탄젠트공간→월드공간 변환 노드 필요)으로 대체해주면 됨)
- 앰비언트(환경광) (덧셈)
- 앰비언트 오클루젼(AO) (앰비언트에 곱셈)
- 스페큘러
- Shadow casting / attenuation (그림자 드리우기/받기)
를 추가해주면 됨
728x90