[그래픽스 최적화] Global Illumination

Date:     Updated:

카테고리:

태그:

Main Reference:
- 유니티 그래픽스 최적화


🐳 Global Illumination

Global Illumination Light Mode
1 2

앞선 Rendering 단원에서 Real-time Lighting이 얼마나 복잡한 과정인지를 알아봤다. 하지만 실제 세상에는 직사광 이외에도 다른 물체에 반사되어 비치는 반사광 또한 존재한다. 이러한 Directional Light, Indirectional Light를 합친 현상을 Global Illumination(GI)이라 한다. GI를 실시간으로 처리한다는 것은 사실상 불가능하기 때문에 미리 구워두는 방식으로 처리하게 된다. Static 오브젝트냐, Dynamic 오브젝트냐에 따라 굽는 방식이 다르고 굽는 방식도 여러가지 방법이 존재한다. 얼핏 생각하면 무적의 기법인듯 하나 언제나 문제는 메모리 이슈이다. 아무리 미리 구워둔다고 한들, 수많은 텍스쳐들을 추가로 가져와야 한다.


🐳 Light Map

Lightmap

먼저 Static Object들에게 적용하는 라이트맵에 대해 알아보자. 라이트맵은 GI 및 그림자 정보를 미리 연산하여 텍스쳐 형태로 저장하는 방식이다. 이때 GI 정보에는 Albedo와 같은 오브젝트의 고유 색상이 포함되지는 않는다. 오른쪽 그림에 나와 있는 라이트맵을 보면 큐브의 고유 색상인 초록색은 포함되어있지 않지만, 바닥에 반사되어 비치는 초록빛을 발견할 수 있다.
어찌 되었건 추가적인 텍스쳐를 사용하는 방식이기 때문에 메모리 이슈가 발생할 수 있고, 씬이 크거나 라이트맵의 해상도가 올라가면 여러 텍스쳐에 나누어서 저장해야 한다. 이럴 경우 하나의 오브젝트 텍스쳐가 여기저기 쪼개져 있으므로 드로우콜 배칭에 영향을 미치기도 한다.


Directional Mode

Non-Directional Directional
3 4

라이트맵 옵션 중 Directional Mode는 normal map의 적용 여부를 결정한다. Directional 모드를 선택하면 라이트 정보에 Normal Map을 반영하여 오브젝트 표면에 디테일이 추가된다. 하지만 여전히 Specular 정보는 포함하지 않으며, 추가적인 메모리가 사용된다.


Lighing Mode

5

  • Baked Indirect : GI만 베이킹. Shadow는 런타임에 실시간 연산
  • Subtractive : GI, Shadow 모두 베이킹. 다만, real-time shaodw와 이질감 존재.
  • Shadowmask : GI, Shadow 따로 베이킹. 이후 real-time shadow와 자연스럽게 연결됨.
    • 텍스쳐 2배. 씬이 커지면 그림자 품질 떨어짐.
  • Distance Shadowmask : 가까운 애들은 real-time 연산. 먼 애들은 shadowmask.


🐳 Light Probe

LightProbesTestScene-sourceselected

라이트맵은 효율적인 방식으로 자연스러운 라이팅을 구현해준다. 하지만 움직이는 오브젝트에 라이트맵을 적용하게 되면 오브젝트가 어느 위치에 있든지 동일한 라이팅이 적용된다. 이럴 경우 그림자 안에 있는 캐릭터가 번쩍거리는 이상한 상황이 벌어지게 된다. Dynamic 오브젝트의 경우 라이팅 정보를 텍스처로 미리 구워두는 방식을 사용할 수가 없다. 이때 사용하는 기능이 Light Probe이다. 라이트맵이 오브젝트 표면에 맺히는 라이팅 정보를 저장한다고 치면, Light Probe는 빈 공간의 라이팅 정보를 저장한다. 즉 씬의 중간중간 라이팅 정보를 미리 연산하여 저장해둔 뒤, 오브젝트 움직임에 따라 주변 라이트 프로브의 정보를 이용하게 된다. 이때 라이트 프로브의 데이터는 구면 조화 함수를 이용하여 굉장히 효율적으로 인코딩되어 저장된다.
별다른 배치가 필요 없는 라이트 맵과 달리 라이트 프로브는 배치에 많은 신경을 써줘야 한다. 기본적으로 캐릭터가 움직이는 영역 위주로 배치해야 하고, 빛 변화가 심한 장소(그림자)에 배치하는 것이 좋다.


🐳 Reflection Probe

reflection

Reflection Probe는 라이트 프로브와 마찬가지로 씬의 중간중간 배치하여 주변 반사 라이팅 정보를 저장해 둔다. 다만 효율적으로 데이터를 인코딩하는 라이트 프로브와 달리, 리플렉션 프로브는 라이팅 정보를 큐브 텍스쳐 형태로 저장한다.



맨 위로 이동하기

Unity 카테고리 내 다른 글 보러가기

댓글 남기기