2023. 7. 18. 18:44ㆍUnity
간단한 Lambert Light
[Normal Vector] 노드와 [CustomLight] 커스텀 노드를 [Dot Product]로 내적하여 Lambert Light를 표현할 수 있게 되었다.
하지만 여기서 -1부터 1까지 표현되는 그림자이기 때문에 추가 조명을 더해도 -1에서 0이상 밝아지지 않는 문제가 있을 수 있으므로 0~1로 제한하는 [Saturate] 노드를 붙여준다. ([Maximum] 노드를 사용해 들어온 값과 0을 비교하여 0 이하는 더 큰 값인 0을 출력하게 할 수도 있고, [Clamp] 노드를 이용하여 직접 0~1 범위를 설정할 수도 있다.)
Normal Map 적용
예제 파일에 함께 들어있는 Normal Map을 사용한 모습인데, 기존 Normal Map의 Space가 Tangent로 설정되어있기 때문에 [Transform] 노드를 사용하여 Tangent -> World로 바꿔주는 작업을 해야한다.
Half Lambert
[Unity] URP 셰이더 BRDF(양방향 반사도 분포 함수)
이전 글에서 HLSL로 표현한 Half Lambert를 만들 때 보았던 것을 Shader Graph로 보면,
0.5를 곱하고 0.5를 더해서 더 부드러운 음영으로 표현할 수 있다. 하지만 물리적으로 맞지 않고 거의 빛의 반대편까지 영향을 받기 때문에 실제 사용에서는 [Pow]를 사용한다고 한다.
[Pow] 사용
*0.7+0.3 사용
Half Lambert 비교
Base Map 연결하기
Lambert Light의 완성을 위해 Base Map과 연산을 한다. 하지만 여전히 라이트의 색상을 받아올 수는 없다.
라이트 색상 받는 기능 추가
라이트의 색상을 받기 위해 [CustomLight] 노드에 컬러에 관한 줄을 추가한다.
환경광 추가하기
[Baked GI] 노드를 연결해 보면 환경광이 작용하는 모습을 볼 수 있다.
Background에 따라서 환경광이 다르게 나오는 것을 볼 수 있다.
[Baked GI] 노드는 World Space로 Transform 된 Normal Map을 받아서 Base Map과 곱해서 마지막에 주광에 더해주게 된다.
직접광이 닿지 않는 부분도 환경광에 의해 빛이 닿는 것을 볼 수 있다.
Ambient Occlusion 추가하기
AO 텍스쳐는 환경광을 차폐하는 것이기 때문에 환경광에 곱하면 된다.
SubGraph로 정리하기
[CustomLight] 노드부터 선택된 [Multiply] 부분 까지를 묶어서 SubGraph로 만들어 준다.
텍스쳐들과 베이스 컬러 조절, AO 조절은 프로퍼티로 조절 가능하게 하여 정리한 모습이다.
참고자료
'Unity' 카테고리의 다른 글
[Unity] URP 프레넬 셰이더(Fresnel Shader) 응용 (조명 효과, 깜빡이는 조명 만들기) (0) | 2023.07.20 |
---|---|
[Unity] URP 셰이더 프레넬 셰이더(Fresnel Shader) (0) | 2023.07.20 |
[Unity] URP 셰이더 커스텀 노드로 Light Vector 노드 만들기 (0) | 2023.07.18 |
[Unity] URP 셰이더 Normal Vector 정리 (0) | 2023.07.18 |
[Unity] URP 셰이더 돌이 물에 젖고 마르는 셰이더 만들기 (0) | 2023.07.17 |