2022. 1. 18. 22:02ㆍGame Development/Unity
/* 본 글은 Unity 2020.3.25f1 LTS 버전을 기반으로 작성되었습니다. */
유니티 2D 프로젝트에서 일반적인 방법으로는 조명 처리가 되지 않는다는 사실을 발견했다. 구글에 검색 해보며 찾아보니, 2D에서는 빛(Light)이 존재하는 것이 아니라 빛을 흉내내는 여러 기법들로 표현을 해왔다고 한다.
광원에 가까이 있는 정점(Vertex)은 밝게 하고, 멀리 있는 정점은 어둡게 하거나 Material의 Shader 설정을 "Sprite/Diffuse"로 바꿔주는 등의 기법을 통해 빛의 처리를 표현해왔다고 한다.
그런데, 유니티 2D에서도 이제 빛 처리에 대한 패키지를 지원을 한다. URP(Universal Render Pipeline)이다. 이전 버전은 경량 렌더 파이프라인(LWRP)이라고 불렸는데, 지금은 URP가 LWRP의 기능까지 대체를 하는 것 같다. Unity 공식 사이트에 보면 URP에 대해 다음과 같이 간략하게 설명이 되어 있다.
URP(Universal Render Pipeline)이란?
- Unity에서 만든 사전에 빌드(build)된 스크립터블 렌더 파이프라인(Scriptable Render Pipeline)
- 모바일, 고급 콘솔 및 PC까지 다양한 플랫폼에서 최적화된 그래픽을 빠르고 쉽게 만들 수 있는 아티스트 친화적인 워크플로 제공
위와 같은 설명 말고도 굉장히 많은 설명들이 나와 있다. 렌더 파이프라인 개념, 표현, 조명, 카메라, 포스트 프로세싱, 셰이더 및 머티리얼 등등... 다 공부 해보고 싶은 그런 내용들이지만, 천천히 하기로 하고 우선은 URP의 2D 조명 사용법들을 살펴 보기로 했다.
URP 2D 조명 사용법
작업 전 요구 및 참고사항
- Unity 2021.2.0b1 이상 버전
- Universal Render Pipelie 버전 10이상
- 프로젝트에서 2D 렌더러를 사용하는 경우, URP Asset의 3D 렌더링과 관련된 일부 옵션은 최종 앱 또는 게임에 영향을 미치거나 미치지 않는다.
Universal RP를 사용하기 위한 사전 셋팅
1. Unity 상단 메뉴바 Window → Package Manager
2. Unity Registry에서 "Universal RP" 설치
처음 Package Manager를 열면, Packages: In Project로 되어 있다. Packages: Unity Registry로 바꾼 후, Universal RP를 검색하여 설치하자.
3. Assets 창 우 클릭 → Create → Rendering → Universal Render Pipeline → "Pipeline Asset(Forward Renderer)" 생성
생성하면, 다음과 같이 RenderPipelineAsset과 RenderPipelineAsset_Renderer가 생성된다.
RenderPipelineAsset_Renderer 파일에는 Universal RP 패키지를 설치할 때 만들어진 포스트 프로세스 데이터가 연결되어 있다.
이제 Universal RP에서 제공하는 렌더 파이프라인으로 그래픽 설정을 해야 한다.
4. Unity 메뉴바 Edit → Project Settings → Graphics → Scriptable Render Pipeline Settings에 생성한 "RenderPipelineAsset" 넣기
마우스 드래그를 해서 넣어도 되고, 오른쪽에 있는 ⨀ 아이콘을 눌러서 넣어도 된다.
만약 품질 수준별로 설정이 하고 싶다면?
Edit → Project Settings → Quality → 원하는 품질 레벨 선택 → 이전에 생성한 RenderPipeline Asset을 Rendering에 넣기

프로젝트에 포함된 각 품질 수준 및 플랫폼에 대해 위에서 진행했던 2~3단계를 반복
5. Assets 창 우 클릭 → Create → Rendering → Universal Render Pipeline → "2D Renderer(Experimental)" 생성
이제 2D 렌더러 데이터를 생성해줘야 한다. 위와 같이 생성했다.
6. Render Pipeline Asset 클릭 후 Inspector 창에서 General → Renderer List → 생성한 2D Renderer Data 넣기
생성했던 2D Renderer를 넣어주고, Default로 설정 해주면 된다. 이로써, 준비는 모두 끝났다.
2D Renderer로 업그레이드
Edit → Render Pipeline → Universal Render Pipeline → 2D Renderer → 옵션 선택
선택 옵션이 두 가지가 있다. 선택해서 사용하면 될 것 같다.
- Upgrade Scene to 2D Renderer (Experimental) : 현재 씬(Scene)을 2D 렌더러로 업그레이드
- Upgrade Project to 2D Renderer (Experimental) : 현재 프로젝트(Project)를 2D 렌더러로 업그레이드
본인은 Upgrade Scene to 2D Renderer 옵션을 선택해서 진행했다. 그렇게 되면, 씬 내에 빛(Light) 오브젝트가 없을 경우 다음과 같이 오브젝트가 까맣게 된다.
빛(Light) 오브젝트 생성
Hierarchy 창 우 클릭 → Light → 2D
빛 오브젝트 유형이 2D에서 5가지가 있다.
- Freeform Light 2D (Experimental) : 빛의 모양을 원하는 모양으로 자유롭게 변경이 가능
- "Spline editor"를 사용하여 모양 편집 가능
- Sprite Light 2D (Experimental) : 빛의 모양을 원하는 이미지 모양으로 설정 가능
- Parametric Light 2D (Experimental) : 빛의 모양을 매개변수의 개수를 통해 삼각형, 사각형 등의 모양으로 설정
- Point Light 2D (Experimental) : 원의 내각, 외각을 조절하여 전구처럼 할 수도, 손전등처럼 부채꼴 모양으로도 설정 가능
- Global Light 2D (Experimental) : 전역적으로 비춰주는 조명. 태양이나 달을 생각하면 이해하기 쉽다.
- 레이어(Layer)를 이용해 특정 오브젝트를 비출 수도 있다.
본인은 점 광원(Point Light 2D)를 생성해봤다.
실시간으로 조명 처리와 그림자 처리를 해주는 것을 볼 수 있었다. 이 패키지를 이용하여, 보다 완성도 높은 그래픽의 2D 게임을 만들 수 있을 것 같다. 내용이 원래 더 많던데, 우선 간략하게 사용할 수 있을 정도로만 정리를 해놨다.
주의사항
2D Renderer 업그레이드를 했는데도 빛에 영향을 받지 않는 오브젝트가 있을 경우
- 해당 2D 게임 오브젝트의 Sprite Renderer의 Material에 Sprite-Lit-Default로 되어 있는지 확인
- Sprite-Lit-Default는 오브젝트가 빛에 대한 처리를 할 수 있게 하는 기본 Material
<참고>
'Game Development > Unity' 카테고리의 다른 글
[Unity] New Input System #1 | 세팅하기 (15) | 2022.01.26 |
---|---|
[Unity] OnTriggerStay() 함수: 오브젝트의 변화가 감지되지 않으면 더 이상 호출되지 현상 해결법 (6) | 2022.01.19 |
[Unity] 최적화를 위한 게임 오브젝트 태그(Tag) 비교 방법 (0) | 2022.01.17 |
[Unity, C#] 구조체(struct)는 왜 new 문법을 지원할까? (2) | 2022.01.13 |
[Unity] 2D 게임 오브젝트가 바라보는 방향 전환하기 (0) | 2022.01.13 |