Unity/Unity Study

Baked Lighting과 노말맵 이해하기

pnltoen 2023. 6. 6.
반응형

Baked Lighting

Unity Technologies


서론

 

 

 

 

라이트... 너란 존재 너무 어렵다... 이 쪽을 잘 모르니까 뭐가 문제인지 자체를 모르겠음...ㅠ.ㅠ 관련해서 지현님의 노말맵 그리고 Baked Lighting에 대해 이해해보는 시간을 가져보자...

 

Baked Lighting으로 빛을 굽는 방법

 

  • Depthmap -> 관련 내용 찾아보기 (RGB-D 구현의 새로운 방법?)
  • Shadowmap -> Lightmap 기준의 Depth Map
    • Hard Shadow -> 한번만 Sampling
    • Soft Shadow -> 경계를 부드럽게 하기 위해 여러번 Sampling -> Pixel Shader 비용이 더 많이 들어감
  • Lighting Mode
    • Baked Indirect
      • 간접광 즉 GI 정보만 저장함 -> 그림자 연산은 실시간 -> 가장 비쌈 -> 쓸일 없음
    • Subtractive
      • 전통적인 방법 -> 미리 구워놓은 그림자와 실시간 그림자의 차이가 남. 그림자 위에 그림자
    • Shadowmask
      • 가장 최근(?) 방법 : 미리 연산 후 가까운 곳은 리얼타임으로 먼 곳은 Baked -> Specular를 실시간 연산함
      • 그림자 정보를 따로 저장하여 Realtime과 Baked가 자연스러움 쉐도우 맵을 쓰는 것이 아닌 구워놓은 ShadowMask 맵을 사용함
      • 필드 사이즈가 커지면 또 퀄리티 안나옴 -> Distance Shadowmask 사용 하는 것이 좋음
    • Distance Shadowmask
      • Project Settings -> Quality에서 설정 해야 함 -> 설정 찾느라 오래걸림 ㅠ.ㅠ
      • 원경에 대한 내용은 그림자 퀄리티를 낮추고 
  • Baked Lightmaps (Static)
    • ASTC 포맷을 많이씀 2021 버전에서 기본 BC6H
  • Light Probe (Dynamics 주로!)
    • 빛에 대한 정보를 기록? -> Lightmaps
    • 공간에 대한 정보를 기록? -> LightProbe
    • 빛이 극단적으로 변하는 경우에는 촘촘하게 배치해야 함
      • 그렇지 않을 경우 어두운 곳에서 발광체를 띄는 것 처럼 잘못 렌더링 될 수 있
    • 어쩔 수 없이 수동으로 해야 하는 부분
    • 오히려 작은 물체들은 라이트맵이 아니라 라이트 프로브로 하는 경우도 있음 -> Light Map으로 했을 때 퀄리티는 안나오고 성능만 잡아먹는 경우
      • Mesh Renderer에서 Lightmaps을 할 것인지 Light Probes를 할 것인지 설정
      • 하이어리키 잘 정리해야 나중에 정리하기 쉬움

 

노말맵에 대한 이해

 

  • 노말맵의 개념
    • 리소스를 아끼고 디테일을 표현 (Fake)
      • 모델 경량화 vs 노말맵?
        모델 경량화 시 오브젝트 클릭 및 상호작용이 가능하지만 노말맵은 불가능함...? 
  • Normal Mapping이란?
    • 빛의 반응하기 위해 필요함
    • 평면에 빛이 맺히는 경우 -> 100% 산란 X, 소실 X
    • 곡면에 빛이 맺히는 경우 -> 에너지는 동일, 면적은 넓어짐 -> 빛의 밝기가 내려감
    • Hard Edge -> 버텍스 하나에 2개
    • 면에 상대적인 각도를 저장하여 음영을 표현함.

  • Normal mapping x Parallax mapping x Displacement mapping
    • Heightmap (가성비 똥, 거의 안씀)
      • 방향의 편차를 계산하는 Normal Mapping과는 달리 높이 값 기반으로 깊이 값 제공
      • 외곽 쪽 보면 확실히 한계는 있음. 픽셀 연산
      • 인접한 픽셀이 차폐되어있는지 체크함 -> 연산을 많이 먹음

    • Displacement mapping with Tessellation
      • 실제 버텍스 조작 Heightmap 보다 Displacement 쓴다..
      • 모바일에서는 아직 Tessellation 제약이 있음.

  • NormalMap이 파란색인 이유?
    • RGB로 XYZ를 저장함
    • 옷으로 따지면 안감 모델의 밑은 렌더링할 필요 없음 -> 따라서 Z축은 -1 ~ 1이 아닌 0 ~ 1이 맞음. Z축은 Blue에 대응하니까 Normal Map이 파란색인 경향이 있음.

  • Normal Map Compression
    • 특수한 압축이 가능함.
      ASTC -> 퀄리티가 되게 좋음. -> ASTC은 압축을할 때 Normal 속성을 부여할 수 있음.

반응형

댓글