1. 드로우 콜 (Draw Call)
드로우 콜은 그래픽스 API가 스크린에 그려야 할 오브젝트의 텍스쳐, 셰이더, 버퍼 등과 같은 정보를 전송하는 것이다. 드로우 콜은 리소스를 많이 소모한다. 그래서 드로우 콜이 많아질수록 성능 저하가 발생한다. 물론 드로우 콜을 준비하는 과정에서 더 많은 리소스를 소모할 수도 있다 [1].
2. 드로우 콜 배칭 (Draw Call batching)
드로우 콜 배칭은 유니티가 더 적은 드로우 콜로 렌더링 할 수 있도록 메시를 결합한 드로우 콜 최적화 메서드이다 [2].
유니티는 동일한 머티리얼을 사용하는 오브젝트들의 드로우 콜을 배칭 한다. 즉, 여러 개의 텍스쳐(Texture)를 하나로 만들어 하나의 머티리얼을 사용하도록하면, 동일한 머티리얼을 사용하는 오브젝트들을 묶어서 하나의 드로우 콜을 만든다.
3. Sprites and Sprite Atlas 드로우 콜 배칭 비교
아래의 이미지는 Sprite를 단일로 사용하였을 때와 Sprite Atlas를 사용하였을 때를 보여준다.
- Sprite Batches : 13
- Sprite Atlas Batches: 4
4. 스프라이트 (Sprite)
스프라이트는 2D 그래픽에 사용되는 텍스쳐이며, 2D 그래픽 오브젝트이다.
자세한 사항은 아래 링크를 참조해 주세요.
2020.11.06 - [유니티/기초] - 유니티 스프라이트 (Sprite)
유니티 스프라이트 (Sprite)
1. 스프라이트 ( Sprite )스프라이트는 텍스쳐이며, 2D 그래픽 오브젝트이다. 스프라이트는 2D 그래픽에 사용된다. 스프라이트는 PNG, JPG와 같은 이미지 파일이 아니다. UI에 그림파일을 등록하고, Scen
notyu.tistory.com
5. 스프라이트 아틀라스(Sprite Atlas)
앞서 언급하였듯이 드로우 콜 배치 최적화를 하는 방법 중의 하나로 스프라이트 아틀라스가 있다. 스프라이트 아틀라스는 스프라이트의 묶음으로 여러개의 텍스쳐를 하나의 텍스쳐로 만든 텍스쳐이다. 하나의 텍스쳐이기 때문에 실제 사용하기 위해서는 유니티에서 추가적인 작업이 필요하다.
6. 스프라이트 아틀라스 제작 및 변환 그리고 사용
스프라이트 아틀라스를 제작하는 방법은 하나가 아니다.
2D Sprite 패키지가 필요하다.
Window → Package Manger → Packages : UnityRegister 선택 → 2D Sprite
6.1 텍스쳐 파일 제작 및 분할
텍스쳐를 제작하는 과정의 처음부터 여러 텍스쳐를 묶어서 하나의 텍스쳐 파일로 만드는 방법이다.
6.1.1. 포토샵과 같은 프로그램을 사용하여 이미지들을 합쳐 단일 파일로 만든다.
아래의 이미지는 512 x 512 크기에 128 x 128 크기의 이미지들을 각 셀의 크기에 맞게 배치하여 제작하였다.
6.1.2. 유니티로 임포트하여 이미지 파일을 Sprite로 변경 및 Sprite 모드를 변경한다.
Texture Mode : Sprite (2D and UI) → Sprite Mode : Multiple → Apply
6.1.3. SpriteEditor를 사용하여 스프라이트를 분할한다.
Sprite Editor 선택 → Slice → Type : Grid by Cell Size → Pixel Size 128 x 128 → Slice → apply
※ 아래 이미지는 128 x 128로 제작하였다. 스프라이트 아틀라스 파일을 만드는 과정에서 달라질 수 있다. 본인이 제작한 방식에 맞게 스프라이트를 분할한다.
6.1.4. 스프라이트 아틀라스 사용
6.1.3의 과정을 거치면 아래의 이미지와 같은 상태가 된다. 각각의 스프라이트는 단일 스프라이트와 같다.
7. 텍스쳐 파일 패키징
유니티에서 제공하는 API를 사용하여 패키징 하는 방법이 있다.
7.1 스프라이트 패킹 모드 설정
스프라이트 패킹 모드를 설정해야 적용된다.
Edit → Project Settings → Editor → Sprite Packer → Mode : Sprite Atlas V2 : Enabled 선택
변경하지 않으면 다음과 같은 메시지가 출력된다.
※Sprite Atlas packing is disabled. Enable it in Edit > Project Settings > Editor.
V1은 Legacy 버전이다. V2에서는 캐시 서버 지원과 같이 AssetDatabas V2(ADBV2)에서 제공하는 기능을 사용한다.
구 버전을 사용하는 경우 Sprite Atlas V1일 수 있다.
유니티 2022.2 버전부터 기본 모드는 Sprite Atlas V2 : Enabled이다 [3].
Enabled와 Enalbed for Builds는 무엇을 사용하든 상관이 없다. 파일을 배포할 때에는 두 가지 모드 둘 다 패킹이 되어 배포되기 때문이다. Enabled는 유니티 에디터에서 적용이 되고, Enabled for Builds는 유니티 에디터에서 적용이 되지 않는다.
Sprite Packer Mode
- Disabled : 스프라이트 패킹 모드를 사용하지 않는다.
- Sprite Atlas V1 : Enabled for Builds
- Sprite Atlas V1 : Always Enabled
- Sprite Atlas V2 : Enabled
- Sprtie Atlas V2 : Enabled for Builds
7.2 이미지 파일 설정
유니티로 임포트 한 이미지 파일의 설정을 변경한다.
- Texture Mode : Sprite (2D and UI)
- Compression : None
유니티로 이미지 파일을 로드하면 기본 설정이 Normal Quality로 압축이 된다. 설정을 None으로 하지 않으면, 스프라이트 패킹 시에 다음의 메시지가 출력된다.
Warning Message
Source Texture (Assets/RenderExample/Atlas/Packing/1.png) of Sprite (1) is using compressed format. To ensure no loss in source pixel details when packing to SpriteAtlas, please use uncompressed format in TextureImporter.
7.3 스프라이트 아틀라스 파일 생성
스프라이트 아틀라스 파일을 생성한다. 위치는 다음과 같다.
Project View → Create → 2D → Sprite Atlas
7.4 Sprite Atlas에 파일 추가하기
생성된 스프라이트 아틀라스를 선택하고 파일을 추가한다. 다음의 과정을 반복하여 패킹하고자 하는 스프라이트들을 등록한다.
Objects for Packing → + 버튼선택 → Sprite 선택
7.5 Pack Preview
패킹 프리뷰를 눌러 확인 및 설정을 변경한다.
7.6 스프라이트 아틀라스 사용
스프라이트 아틀라스는 빌드 및 플레이 시점에 자동으로 패킹을 한다. 사용을 할 때에는 기존의 스프라이트 파일을 사용한다.
Reference
[1] Sprite Atlas
https://docs.unity3d.com/kr/2021.3/Manual/class-SpriteAtlas.html
스프라이트 아틀라스 - Unity 매뉴얼
2D 프로젝트는 스프라이트와 다른 그래픽스를 사용하여 씬의 시각적 요소를 만듭니다. 따라서 단일 프로젝트에 다수의 텍스처 파일이 들어 있을 수 있습니다. 일반적으로 Unity는 씬의 각 텍스처
docs.unity3d.com
[2] Draw Call Batching
https://docs.unity3d.com/kr/2021.3/Manual/DrawCallBatching.html
드로우 콜 배칭 - Unity 매뉴얼
드로우 콜 배칭은 Unity가 더 적은 드로우 콜로 렌더링할 수 있도록 메시를 결합한 드로우 콜 최적화 메서드입니다. Unity는 두 가지 빌트인 드로우 콜 배칭 메서드를 제공합니다.
docs.unity3d.com
[3] Sprite Atlas V2
https://docs.unity3d.com/kr/2022.3/Manual/SpriteAtlasV2.html
스프라이트 아틀라스 V2 - Unity 매뉴얼
스프라이트 아틀라스 시스템의 원래 버전 1은 텍스처(스프라이트, 텍스처 내 스프라이트, 폴더 내 스프라이트)를 아틀라스 텍스처로 패킹합니다.플레이 모드로 전환하거나 플레이어 또는 에셋
docs.unity3d.com
'유니티 > 중급' 카테고리의 다른 글
유니티 시간 (DateTime) (0) | 2025.02.21 |
---|---|
유니티 시간(Time) (0) | 2025.02.19 |
유니티 Resolving Android Dependencies (0) | 2025.01.29 |
유니티 Advertisement Legacy (0) | 2025.01.29 |
유니티 Advertisement Legacy - Monetization 연동 (0) | 2025.01.29 |