Unity3D/Light Map

Unity 3D Light Map

Soul-Learner 2014. 3. 17. 17:55

유니티 3D에서 라이트맵 설정

3D 장면에서 그림자는 사실감을 더해주는 요소이지만 그림자를 동적으로 생성하는 작업은 시스템 리소스를 차지하게 되어 전체적인 성능에 영향을 미치게 된다. 그러므로 굳이 동적인 그림자 효과가 필요 없이 변함 없는 그림자만 사용해도 되는 경우에는 그림자를 미리 텍스쳐 이미지에 적용하여 생성해 둔다면 실행시에는 시스템이 그림자를 위한 계산을 하지 않아도 되므로 성능향상에 도움이 될 것이다.

이렇게 조명의 적용으로 생기는 그림자 등의 효과를 미리 텍스쳐 이미지로 생성해 둔 다음에 텍스쳐 이미지를 사용하여 성능을 향상하는 방법을 라이트 맵이라고 한다


라이트 맵을 테스트하기 위해 아래 그림처럼 간단한 지형과(Terrain) Directional Light, 야자수, Cube, Sphere 등을 장면에 추가하고 Hierarchy 뷰에서 Directional Light 를 선택한 다음 Inspector 뷰의 Light 콤포넌트 섹션에서 Shadow TypeSoft Shadows 등으로 설정하여 그림자가 나타나도록 설정한다




여기서 한가지 가정을 하자면 Scene 뷰의 야자수(Terrain 의 일부)와 Cube는 정적인 오브젝트로 간주하여 실행시에 그 위치가 변함이 없다고 한다면 실행시에 동적으로 그들의 그림자를 생성할 필요는 없기 때문에 이들 오브젝트에는 라이트맵을 적용할 필요가 있다.




아래 그림과 같이 왼쪽에 별도의 라이트 맵 설정 윈도우가 나타나고 Scene 뷰에도 디스플레이가 추가된다




Hierarchy 뷰에서 정적인 오브젝트들(Terrain, Cube)을 선택하면 라이트맵 설정 윈도우에 자동으로 보이게 되는데 Lightmap Static 항목에 체크한다.

Scale In Lightmap 항목에 입력하는 수치가 클수록 더 정밀한 그림자를 표현하므로 적절히 가감하면서 테스트하여 불필요하게 큰 수치가 적용되어 메모리를 낭비하는 경우가 없도록 설정해야 할 것이다




라이트맵 설정을 마치면 설정 윈도우의 아래쪽에 있는 Bake Scene 버튼을 눌러서 조명효과를 텍스쳐로 구워내는(생성하는) 작업을 시작한다

라이트맵 텍스쳐를 구워내는 작업은 몇분의 시간이 소요되는데 유니티 화면 오른쪽 하단의 Baking Texture 문자열이 나타났가 사라지면 라이트맵이 완성된 것이다




라이트맵이 완성되면 아래 그림과 같이 라이트맵 텍스쳐가 Project 뷰에 자동으로 임포트되고 현재 Scene 뷰에 적용된다



테스트를 위해 Hierarchy 뷰에서 Directional Light 를 선택하고 Inspector 뷰에서 Directional Light 옵션을 해제하여 라이트를 장면에서 제거하면 다음 그림과 같이 라이트맵을 적용한 오브젝트는 라이트와 무관하게 그림자가 생성되어 텍스쳐로 구워진(Baked) 상태라는 것을 확인할 수 있다. 라이트맵을 적용하지 않았던 Sphere 오브젝트는 라이트가 설정되지 않은 상태에서는 그림자가 생기지 않는다.