내가 일하며 알게 된 프로그래밍
article thumbnail

Unity Sprite Atlas

 

스프라이트 아틀라스 - Unity 매뉴얼

2D 프로젝트는 스프라이트와 다른 그래픽스를 사용하여 씬의 시각적 요소를 만듭니다. 따라서 단일 프로젝트에 다수의 텍스처 파일이 들어 있을 수 있습니다. 일반적으로 Unity는 씬의 각 텍스처

docs.unity3d.com

 

스프라이트 아틀라스는 여러개의 텍스쳐를 단일 텍스쳐로 결합하는 에셋이다.

왜 여러개의 텍스쳐를 그대로 쓰지않고 단일 텍스쳐로 만들어서 사용하는 기능을 만들었을까?

그건 바로 Drawcall과 관련이 있다.

Material을 로드하게되면 Material 1개당 1개의 batches가 발생한다.

batches 란 오브젝트를 그릴 횟수 + Set Pass Calls의 카운트로 계산된다

Set Pass calls는 shader의 종류를 전달하는 수를 뜻한다.

한번 확인해보자

먼저 빈 화면에 Main Camera만 Solid Color로 설정되어 있을 시
기본 배경화면을 만드는데 필요한 사각형 1개를 이루는데 필요한 Tris (트라이앵글)은 2개
그리고 그에 따른 Batches 1개와 SetPass calls 1개를 확인할 수 있다.

여기서 4개의 패킹되지 않은 이미지를 추가 후 각 이미지마다 Sprite를 넣게되면
Batches는 5개 SetPass Calls는 2개가 된 것을 확인 할 수 있다.
(Material을 추가로 생성하지 않았기때문에 Default Material의 shader로 통일되어 SetPass calls는 증가하지 않는다)

 

 

하지만 스프라이트 아틀라스를 생성하여 추가한다면

//예시코드
public SpriteAtlas atlas;

public Image img1;
public Image img2;
public Image img3;
public Image img4;
// Start is called before the first frame update
void Start()
{
    img1.sprite = atlas.GetSprite("profile 1");
    img2.sprite = atlas.GetSprite("profile 2");
    img3.sprite = atlas.GetSprite("profile 3");
    img4.sprite = atlas.GetSprite("profile 4");
}

코드를 통해 스프라이트 아틀라스에서 이미지를 불러온다면 Batches의 수가 늘어나지 않는 것을 확인할 수 있다
(스프라이트 아틀라스에 대한 Material 1개만 로드)

 

 

이번엔 다르게 위 이미지들에 모두 다른 Material을 추가로 넣게된다면
(각 Material의 Shader는 모두 다르다)

Batches와 SetPass calls가 증가한 모습을 확인 할 수 있다.

 

정리.

  • Sprite Atlas를 사용해야하는 이유는 Draw Call을 줄이기 위함이다.
  • Material의 로드에 따라 Batches가 증가한다
  • Material들을 표현하는 Shader의 수에 따라 SetPass calls가 증가한다

Draw Call 최적화 방법

  • 가능한 많은 오브젝트가 동일한 Material을 공유하도록 한다.
  • 사용하는 Shader를 최적화하여 SetPass Calls를 줄인다.

 

추가로 보면 좋은 내용

  • LOD (Level of Detail) : 멀리 있는 객체에 대한 표현을 간소화 (Tris의 수를 줄인다)
 

LOD 그룹 - Unity 매뉴얼

LOD Group 컴포넌트는 게임 오브젝트의 디테일 수준(LOD)을 관리합니다.

docs.unity3d.com

 

'프로그래밍 > Unity3D' 카테고리의 다른 글

Unity - 터널링 현상 (Tunnelling)  (0) 2023.12.22
Unity - SendMessage  (0) 2023.11.03
Unity - 가비지 컬렉터 (Garbage Collector)  (1) 2023.10.24
Unity IL2CPP 는 무엇인가?  (0) 2023.04.15
Unity UI 최적화 (UGUI Optimization)  (0) 2022.08.24
profile

내가 일하며 알게 된 프로그래밍

@CtrlVGames