NPR셰이더 2탄입니다
1. 음영 단계를 텍스쳐로 만들어버리기
저번엔 음영 나뉘는 걸 수학연산을 통해서 구현했었죠
이번엔 텍스쳐를 사용하여 나누는 방법을 사용할겁니다
일단 하프램버트를 준비합니다
그 다음 이런 식으로 단계가 나눠져있는 텍스쳐를 준비합니다
저 텍스쳐를 가지고 음영 단계를 나눌건데
옛날 UV 조절했을 때의 기억을 보자면 저 UV의 왼쪽 아래 부분이 (0,0)이고, 오른쪽 위가 (1,1) 이었죠?
그리고 텍스쳐를 보면 왼쪽으로 갈 수록 어두워지고, 오른쪽으로 갈수록 밝아집니다. 즉, UV의 x값이 커질수록 밝아지는 텍스쳐라는 것이죠
여기에서 그럼 UV에 위에서 만들었던 하프램버트값을 넣으면...
이런식으로, 어두운 쪽은 x가 낮아지니까 텍스쳐의 왼쪽(어두운쪽)이 칠해지고, 반대로 밝은 쪽은 텍스쳐의 오른쪽(밝은쪽)이 칠해지게됩니다
저 빨간 텍스쳐 대신 이런 텍스쳐를 넣으면 uv의 x위치가 0일땐 검은색, 1일땐 하얀색이니까 하프램버트와 비슷한 느낌이 나옵니다(중간값이 변화가 큰걸 보면 리니어는 아닌것같지만)
텍스쳐에 따라 여러가지 결과물을 낼 수 있습니다
가끔 어두운 쪽에 밝은 영역이 어색하게 끼어있을 때가 있는데 이건 텍스쳐 속성을 변경하시면 됩니다
2. 음영텍스쳐 응용
위에서는 UV의 x값만 사용했죠
이번엔 y값도 사용해봅시다
이런식의 텍스쳐를 준비해준 뒤,
프레넬을 만든 후, vector2를 생성해서 x에는 위에서 하프램버트, y에는 프레넬을 넣어줍니다
이렇게 되면 x쪽은 그대로 밝을수록 오른쪽 위치를 그리게 되고
y에는 프레넬을 집어넣었으니, 밝을수록 위쪽 위치를 그리고, 어두울 수록 아래쪽 위치를 그립니다
근데 아까 위에서 텍스쳐의 아래쪽을 검게 칠했었죠?
짜잔, 아웃라인이 만들어졌습니다
프레넬값에서 바깥쪽으로 갈 수록 0에 가까우니까 텍스쳐의 아래쪽에 가깝게 그려지겠죠
그래서 0값에 가까운 바깥쪽은 텍스쳐의 아래쪽인 검은색이 그려지는것이죠
여기서 텍스쳐를
이런 텍스쳐를 사용한다면
x값이 일정수준 이상이면 y값의 영향을 거의 안받고(위아래 색이 거의 똑같아서), 일정 수준 이하면 y값에 따라 약간 붉은 색 / 검은색이 나오게 됩니다
3. AO 사용하기
보면 붉은 부분이 너무 과한 걸 볼 수 있습니다
이걸 줄이기 위해 ao텍스쳐를 사용할겁니다
이런식으로 ao텍스쳐를 반전시킨 값을 y값에 대신 넣어줍니다
그럼 비교적 얇은 부분에서 어두워졌을 때 붉은 기를 더 많이 받게 되죠
아까보다 훨씬 나아진 것을 볼 수 있습니다
엠비언트까지 계산해서 추가해줍니다
텍스쳐 * 엠비언트 * ao텍스쳐를 곱해준 값을 기존 결과와 더해주면 됩니다
'그래픽(기타)' 카테고리의 다른 글
유니티 SRP 셰이더 그래프 - 13 (0) | 2020.02.09 |
---|---|
유니티 SRP 셰이더 그래프 - 12 (0) | 2020.02.07 |
유니티 SRP 셰이더 그래프 - 10 (0) | 2020.01.31 |
유니티 SRP 셰이더 그래프 - 9 (0) | 2020.01.28 |
유니티 SRP 셰이더 그래프 - 8 (0) | 2020.01.23 |