
전역 조명 이해하기
Tutorial
Beginner
+10XP
10 mins
Unity Technologies
Universial 2D 프로젝트에서 기본으로 사용하는 전역 조명인 Global Light 2D에 대해 학습하는 차시입니다.
1. Global Light 2D 살펴보기
유니티 2D 라이팅의 기본은 Global Light 2D 입니다. 이전 차시에도 만났던 Global Light 2D 객체를 다시 살펴보도록 하겠습니다.
Light 2D 컴포넌트 하나가 포함되어 있습니다. Light Type을 보면 Global로 되어 있기 때문에 이 객체는 global Light 2D 역할을하고 있다는 점을 파악할 수 있습니다. 그 다음 중요한 속성은 바로 Color와 Intensity입니다. 이 두 속성으로 장면 전체의 분위기를 바꿀 수 있기 때문이죠.
- Light Type : Light 2D의 형태를 결정하는 속성으로 4가지가 있습니다.
- Freedom : 정점을 자유롭게 편집하여 Light 영역을 제작하는 타입
- Sprite : 스프라이트 모양을 그대로 Light 영역으로 활용하는 타입
- Spot : 원형 혹은 호 형태로 퍼지는 Light 영역을 생성하는 타입
- Global : 장면 전체에 Light를 반영하는 타입
- Color : Light에 반영되는 색상
- Intensity : Light에 반영되는 밝기
그렇다면 Color 와 Intensity를 조절하여 해당 장면을 분위기 맞게 어둡게 표현해보도록 하겠습니다. Color를 어두운 색으로 지정하고 Intensity도 1보다 낮은 값으로 설정해봅니다.
이렇듯 Global Light 2D는 장면의 모든 2D Renderer (Sprite, Tile, SpriteShape 등)에 영향을 줍니다.
2. Light Pass 생략하기
만약 Global Light 2D와 함께 Light 2D를 전혀 사용할 필요가 없는 프로젝트가 있다고 가정해봅시다. (마치 Built-in RenderPipeline 프로젝트처럼) 이 때 기본으로 존재하고 있는 Global Light 2D 객체는 그대로 두는 것이 좋을까요?
유니티 6에서는 그래픽이 어떤 단계를 거쳐가며 사용자를 위한 화면이 제작되는지 파악할 수 있는 Render Graph Viewer 도구가 새롭게 추가되었습니다. Windows > Analysis > Render Graph Viewer 메뉴를 클릭하여 창의 띄워봅니다.
아무리 간단한 2D 장면이라고 해도 꽤 여러 단계를 거치게 됩니다. 이러한 단계가 많으면 그만큼 CPU 및 GPU가 연산에 부담이 되므로 사양이 낮은 디바이스 환경에서 사용자의 플레이 경험을 방해할 위험이 있습니다. 그 중 Light2D Pass는 Global Light 2D가 장면에 존재함으로서 추가된 단계라고 말씀드릴 수 있습니다.
Global Light 2D의 기본 상태 (Color : White, Intensity : 1)에서는 제거해도 시각적으로는 차이점이 없음을 알 수 있습니다. 하지만 내부적으로는 차이가 발생합니다.
Global Light 2D 객체를 제거한 후 Render Graph Viewer를 다시 새로고침하면 Light2D Pass가 없어진 점을 확인할 수 있습니다. 단순히 객체 하나를 제거함으로서 그래픽 렌더링 단계 하나를 생략할 수 있는 것입니다. 이러한 사소한 변화에 최적화에 꽤 도움이 될 수 있다는 점 알아두시길 바랍니다.하지만 이번 샘플 프로젝트는 던전의 어두운 분위기를 위해 위에서 했던 작업처럼 Global Loght 2D를 어둡게 설정한 후, 계속 작업을 이어가겠습니다.
3. 2D 그래픽 정렬 개요
2D 프로젝트는 스프라이트를 그리는 순서 또한 매우 중요한데 먼저 그려지만 나중에 그려지는 스프라이트에 가려질 수 있기 때문입니다. 유니티 엔진에서 2D 스프라이트를 그릴 때 3가지 상황과 속성으로 그려지는 순서를 결정합니다.
- Transform-Z : Z축 위치가 투시하는 카메라 방향과 가까워질 수록 나중에 그려집니다.
- Sorting Layer : 정렬만을 위한 레이어로 순위가 높을 수록 나중에 그려집니다.
- Order in Layer : Sorting Layer가 동일할 때, 이 숫자가 높을수록 나중에 그려집니다.
지금 바로 With 객체와 Mineral 객체를 겹쳐보면 플레이어 역할인 Witch가 가려지거나 아닐 수도 있는데 이것은 두 SpriteRenderer가 정확히 정렬 순서가 일치하기 때문입니다.
Witch의 Order in Layer를 높여서 해결하는 방법도 있지만 여기서는 조금 더 고급화 전략으로 Sorting Layer를 제어 것입니다. Mineral과 Ground > Back(Tiled) 두 객체의 Sorting Layer를 Background로 변경하면 정상적으로 정렬이 됩니다.
이 프로젝트에서 미리 설정된 Background 레이어는 Default 레이어보다 먼저 그려지게 되는데 그 이유는 Edit > Project Settings > Tags and Layers에 있습니다.
Sorting Layers 리스트에서 Background의 순서가 Default 보다 앞서기 때문에 먼저 그려지는 것이죠. 물론 +버튼을 통해 새로운 레이어를 추가할 수 있고 마우스로 드래그하여 순서를 변경할 수 있습니다. 전경 및 후경이 여러 레이어로 나누어지는 디테일한 장면을 제작할 때는 Sorting Layer가 많은 도움이 됩니다.
참고로 새로운 Sorting Layers를 추가한 이후에는 File > Save 및 Save Project 를 한 후, 유니티 에디터를 재가동하시길 바랍니다.
4. 정렬 레이어를 통한 부분 라이팅
갑자기 2D 정렬에 대해 소개하는 이유는 위에서 살펴본 Light 2D의 속성 중에서 아직 말씀드리지 않은 Target Sorting Layer를 소개할 차례가 왔기 때문입니다. 이름 그대로 2D Renderer가 사용하는 Sorting Layer에 라이팅을 대상을 지정하는 속성인데 기본적으로는 Everything으로 설정되어 있습니다.
이것을 Noting으로 변경하면 장면이 하나도 보이지 않는 검은색으로 바뀌게 됩니다. 그야말로 빛이 없는 공간과도 같죠. 여기서 다시 Target Sorting Layers를 눌러서 Default만 선택해봅시다.
Default로 설정된 2D Renderer 객체만 보이게 됩니다. 이렇게 정렬 레이어를 활용해서 부분적으로 라이팅을 할 수 있는 것입니다. 여기서 한단 계 더 나아가서 Global Light 2D를 하나 더 추가하고 Target Sorting Layer를 Background으로 설정하면 서로 다른 명암을 갖춘 세밀한 장면을 연출이 가능해집니다.
여러 개의 Global Light 2D가 동일한 Target Sorting Layer를 가지면 에러가 발생하기 때문에 주의하시길 바라며 다음 차시로 넘어가겠습니다.