[Unity] 그래픽-3. Fix normal-map with ShaderGraph
Custom Shader Graph for fixing normal map
- 마테리얼 선택
- 셰이더 - URP - Lit or Unlit 선택
- Create - Shader Graph - URP - Lit / Unlit Shader Graph
- lit(lighten)
- unlit(no lighten) UI나 파티클에 사용
- Base Map, Normal Map, Metal Map, (Occlusion Map) 에 텍스쳐 적용
- 먼가 이상하다: ~Map을 Unity에 맞게 수정하는 작업 필요. 1. Unity는 Normal Map을 y+ 방식으로 표현하여 호환 문제 발생할 수 있음
- Import할 때 TA가 조절할 수 있으나, 책임소재 애매함.
Fragment
- Base Color
- Normal(Tangent Space)
- if 빛과 평행 and 내적 > 0 then 최대 밝기
- if 빛과 직교 then 빛 안 받음.
- Metalic
Unity Normal Map 특수
근데 Unity는 Normal Map을 R, G만 사용하고 B는 사용 안 함(R cross G = B 이므로 0.3공간 절약 효과)
근데 모델러 쪽에서는 R, G, B 모두 사용하는 Normal Map이 건너오기에 둘을 호환시켜야됨.
Shader Graph 사용한 보정
- Normal Map 텍스쳐를 텍스처 설정 인스펙터 창에서 TextureType = NormalMap으로 설정
- Normal Map으로 설정하고 ShaderGraph에서 텍스쳐 RGBA가 Normal Unpack 노드를 거쳐 Fragment 노드의 Normal로 들어가도록 설정
- Default로 설정하고 ShaderGraph에서 텍스쳐 RGBA를 Fragment 노드의 Normal로 넣어줌
더 간단한 보정들. 셋 중 하나 하면 됨.
- 텍스쳐 인스펙터에서 Normal Map으로 설정
- == RGB to RG
- 텍스쳐 인스펙터에서 Normal Map으로 설정 후 (Shader Graph) Unpack 후 Fragment Normal에 연결
- == RGB to RG to RGB
- 텍스쳐 인스펙터에서 Default로 설정 후 (Shader Graph) Fragment Normal에 연결
- == RGB to RGB

