램버트 라이트
커스텀 라이트로 램버트 라이트 구현하기
알아 두어야 할 것
법선 벡터가 조명벡터를 마주볼 때 해당 버텍스는 가장 밝다.
두 벡터의 각도의 따른 내적 값
0도이면 =>1
90도이면 =>0
180도이면 => -1
램버트 라이트란
밸브에서 개발했으며 하프라이프에서 처음 사용되었다고 한다.
주변 및 방향 조명을 통합하여 3D장면의 개체를 음영 처리한다.
공식 Dot(L,N) L:라이트벡터, N:법선 벡터(노말 벡터)
법선 벡터가 곱해지면 표면에 굴곡진 라이팅을 생성하게 해주는 방법
float4 LightingTest(SurfaceOutput s, float3 lightDir, float atten)
{
float4 ndot1 = dot(s.Normal, lightDir);
return ndot1;
}
dot 함수 : 노멀벡터와 라이트 벡터를 내적 연산
내적 연산한 값은 1~ -1까지 범위의 숫자가 나온다.
즉, 그림에서 가장 밝은 곳은1, 어두워지는 경계선은 0 아예 어두운 곳은 -1일 것이다.
-1인 부분은 너무 어둡기 때문에 변경이 필요하다.
float4 LightingTest(SurfaceOutput s, float3 lightDir, float atten)
{
float4 ndot1 = saturate(dot(s.Normal, lightDir));
return ndot1+0.5;
}
saturate 함수 : 이 안의 값을 0~1사이로 잘라줌 0보다 작은 값은 0으로 1보다 큰값은 1로
+ 차이를 위해 결과 값에 +0.5를 해준다.
(NormalMap 추가했음)
(아까 더했던 0.5를 지우고)
학습참고 :
1) https://www.slideshare.net/tartist/ss-56389186
2) 유니티쉐이더 스타트업 도서
'유니티 > 셰이더' 카테고리의 다른 글
셰이더) 조명셰이더 난반사광 (0) | 2019.03.09 |
---|---|
셰이더) 서피스 툰셰이더 #1 학습중 (0) | 2019.03.03 |
유니티) 기초 셰이더 #2 서피스 셰이더 (0) | 2019.02.28 |
유니티) 기초 셰이더 #1 (0) | 2019.02.24 |
유니티) 버텍스 및 프래그먼트 기초 셰이더 #2 (0) | 2019.01.11 |