[Unity] 그래픽-3. Fix normal-map with ShaderGraph

KYO
KYO
∙∙조회 5

Custom Shader Graph for fixing normal map

  1. 마테리얼 선택
  2. 셰이더 - URP - Lit or Unlit 선택
  3. Create - Shader Graph - URP - Lit / Unlit Shader Graph
  4. lit(lighten)
  5. unlit(no lighten) UI나 파티클에 사용
  6. Base Map, Normal Map, Metal Map, (Occlusion Map) 에 텍스쳐 적용
  7. 먼가 이상하다: ~Map을 Unity에 맞게 수정하는 작업 필요. 1. Unity는 Normal Map을 y+ 방식으로 표현하여 호환 문제 발생할 수 있음
  8. 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