오늘 할 툰 쉐이더는 아웃라이너를 frensel로 표현한 방법이다.
cull back cull front를 이용한 쉐이더 방식이 아니다.
우선 툰 쉐이더를 만들기 전에 half Lamber공식을 이용한 기본적인 쉐이더를 만들어 준다.(자세한건 간단하니 검색)
그러고 나서 끊어지는 음영을 처리해줘야 하는데,
Half람버트의 빛의 강도 공식
float ndot = dot(s.Normal, lightDir)*0.5f+0.5f;
여기서 ndot의 값을 변경해주어 표현하면 된다.
그 표현 방법이 if문이나 ceil을 이용하는 방법인데
if문을 이용하는 방법은 아래와같고 굉장히 무겁다.
if(ndot>0.7f)
{
ndot=1;
}
else if(ndot>0.4f)
{
ndot=0.7;
}
ceil을 이용하는 방법은
ceil은 소수점아래를 올리는 것이다.
※0.01~1.0 = 1
※1.01~2.0 = 2
그러므로 이때 그림자를 5분할 하고 싶다면
ndot*=5;(0~5)값을 나타냄
ndot=ceil(ndot)/5;(나누어 줘서 0~1사이 값으로 나타내기)
하지만 이렇게하면 좀 더 세부적으로 표현할 수 없다.
이제 외곽선을 표현해볼것인데.
림을 이용하여 표현해 볼거다.
림은 표현방식이 빛의강도와 다르게
viewDir과 Normal을 내적한 값이다.
이때 이를 abs(절대값)을 취해서
if(rim>0.3)
rim=1;
else
rim=-1;// 노멀과 viewDir의 사이각이 크면 외곽선 처리를 해줌 (보통 가장자리거나 눈 아래같은 곳이겠지!)
그럼 이런식으로 된다.
끝!
덧붙여서, Diffuse Wrapping 방식은 지정된 텍스처를 음영으로 이용해서 음영을 표현하는 방식인데
내가 지금 자료가 없는 관계로 나중에 찾아서 해보거나 자료를 찾아보길 바란다!
'개발 > 쉐이더' 카테고리의 다른 글
카메라 이미지 이펙트 만들기 - 기초지식, 반전효과 (0) | 2020.07.11 |
---|---|
노드 툰 쉐이더 멀티라이팅 (0) | 2020.06.26 |
유니티 쉐이더 - 블린퐁 (0) | 2020.05.04 |
Unity Shader 공부- 림라이트 (0) | 2020.05.04 |
유니티 쉐이더 공부 - 디퓨즈 , 앰비언트 , 스페큘러 , 텍스처 구현 (0) | 2020.04.03 |