[유니티 TIPS] 핵심만 쏙쏙! Baked Lighting 이해하기
💡 Baked Lighting
🥕 Shadow
- 입체감과 공간감을 직관적으로 보여줌
- 그래픽에서 표현하기 위해서 매우 비싼 연산
- 대부분 Shadowmap 기법을 사용해서 표현
- Dethmap (Depth from the camera)
- 카메라로부터 픽셀이 얼마나 떨어져있는지
- 카메라 기준
- Shadowmap (Depth from the light)
- Light 기준의 Depthmap
- Directional Light는 방향만 있어서 Position이 없음
→ Shadowmap에서 만들기 위해 가상의 Position을 이용
- 그림자가 생긴다 ⇒ 빛이 맺힌다
- 표면에 빛이 맺히지 않아서 어둡게 보이는 것
- Light로부터의 거리를 Shadowmap에 저장
- 현재 그림자 처리를 하려는 pixel이 Shadowmap에 저장된 데이터보다 멀리 있는가, 가까이 있는가
→ 멀리 있으면 그림자로 판단
- Hard Shadow는 한 번만 샘플링
- Soft Shadow는 경계를 부드럽게 만들기 위해 여러 번 샘플링
🥔 Global Illumination
- 직접 광(Direct)과 간접 광(Indirect)
- 직접 닿는 빛이 직접 광, 다른 곳에 반사되어 닿는 빛이 간접 광
- GI를 실시간으로 연산하는 것은 성능에 매우 큰 영향
→ 미리 구워놓음
- 환경 광
- GI를 시뮬레이션 한 것
- 3가지 모드
- Skybox : Skybox로부터 빛을 뽑아냄
- Gradient : 오브젝트의 Normal 방향에 따라 세 가지 컬러를 간략히 표현
- Color : 단색 컬러
- 기본 환경 광만으로는 부족
→ Lightmap, Light Probe, Reflection Probe 등이 필요
🍠 Lightmap
- Light를 map(Texture)로 만든 것
- 오브젝트의 UV를 펴서 그 위에 Light를 그리는 것
- Ambient Occlusion도 Lightmap에 넣을 수 있음
- Mesh Renderer - Receive Global Illumination
- 메모리 이슈 발생 가능
- 드로우 콜 배치에 영향
- Texture가 나눠지게 되므로 한 번의 콜에 처리할 수 없음
- Lightmap의 해상도를 높일수록 퀄리티는 좋아지지만 메모리를 많이 차지
- Directional vs Non-Directional
- Directional은 Normal 정보까지 포함해서 더 정밀한 Light 표현
→ Specular까지 표현하진 않음
- 시각적 효과보다 메모리 크기가 늘어날 수 있음
- 프로젝트와 메모리, 해상도 등의 상황에 따라 적절하게 사용 결정
- Baked Indirect
- 간접 광 정보만 저장
- 그림자는 Realtime
- Substractive
- 전통적인 라이트 맵 처리 방법
- 동적인 오브젝트만 Realtime 연산
- Realtime과 Baked 그림자 차이 발생
- Shadowmask
- 그림자 정보를 따로 저장
- Realtime과 Baked가 자연스럽게 이어짐
- Distance Shadowmask
- 가까운 거리는 Realtime
- 일정 거리 이상은 Realtime 대신 Baked
- 드로우 콜이 많아질 수 있음
🌽 Light Probe
- 주로 동적인 오브젝트에 사용
- 표면에 대한 정보를 기록한 것이 Lightmap, 공간에 대한 정보를 기록한 것이 Light Probe
- 어두운 영역에 가면 Shadow가 어두워지고 밝은 영역에 가면 밝아짐
- Light Probe끼리 서로 보간을 해줌
- 오브젝트가 이동할 때마다 서로 보간하여 자연스럽도록 처리
- 실제 Scene에서는 Light Probe들을 수동으로 깔아야 함
- 자동 API가 있지만 수동으로 할 수 밖에 없음
- 무작정 많이 하면 Volume이 커질 수 있음
- Mesh Renderer - Receive Global Illumination
- 구면 조화 함수(SH)
- 숫자를 저장하는 것 (계수)
→ 데이터 사이즈가 작음
- 선형 보간 가능
🌰 Reflection Probe
- 반사 정보를 Texture로 저장
- Cubemap Texture
- 6장의 이미지
- Scene에 많이 배치하게 되면 메모리 이슈 발생 가능
끄읏