본문 바로가기

유니티 최적화

[유니티 최적화] 앱 다운로드 크기 최적화 #7 ( Texture 최적화 )

  • 텍스쳐(Texture) 사이즈 최적화
    • 중요도 : 상 ( 매우 중요 )
      난이도 : 경우에 따라 다름
      • Texture라는 용어는 Image나 Sprite 다르게 조금 생소할 수 있는데,
        컴퓨터에서 화면이 그려질때는 모든 이미지들이 GPU에서 렌더링 과정을 거쳐서 화면에 보이게 된다.
        이때 GPU에서 처리하기 위한 이미지 데이터를 Texture라고 생각하면 이해하기 편하다.
        즉 2D UI Sprite도 Texture 형식으로 GPU에 넘어가고,
        3D 오브젝트에 맵핑되어 있는 이미지도 Texture 형식으로 GPU에 넘겨진다.

        때문에 Texture에는 GPU에서 연산하기 위한 옵션들을 설정 할 수 있다.

      • Texture 최적화는 게임 제작시 매우 중요한 부분이기 때문에 용량 외에도 고려해야 할 것이 많다.
        이번 포스팅에서는 Texture 옵션들을 살펴보고 각각 성능과 용량, 메모리면에서 어떤 영향을 미치는지 살펴보도록 하겠다.
    • 유니티 상에서 각각의 이미지들을 선택하면 다음과 같은 Import Settings을 볼 수 있다.

텍스쳐 설정 화면

 

텍스쳐 설정 화면 스크롤 내린 모습

  • 가장 중요한 옵션은 하단에 Format 옵션인데 텍스쳐의 압축 형식에 대한 옵션이다.
    보통 사용하는 PNG나 JPG 파일 형식은 모두 원본인 BMP 형식의 이미지를 저장용량을 줄이기 위해 압축된 형태인데
    결국 그림판 같은 편집기를 사용해서 로드하면 메모리에 BMP형식으로 메모리에 존재하게 된다.

    게임에는 많은 이미지를 사용하기 때문에 유니티에서 제공 하는 압축포맷을 사용하면
    GPU 메모리 상에서도 압축된 형태로 Texture가 유지되게 된다.

    해당 옵션은 어떤 압축 형식을 사용할건지에 대한 옵션이다.

    유니티에서는 
    주로 사용 하는 압축 설정은
    RGBA Compressed ASTC( 안드로이드, ios 공용 )
    RGBA Compressed ETC( 안드로이드)
    RGBA Compressed PVRTC(ios)

    ASTC는 이미지의 사이즈에 영향을 받지 않고 압축 할수 있지만 일부 저성능 기기에서 지원하지 않는다.
    ETC, PVRTC 는 모든 기기에서 지원하지만 POT 형태의 사이즈만 가능하다
    ( 2의 n승 크기를 POT 이라고 함 16,32,64,128,256,512,1024,2048....).

    설정창 제일 하단에 이미지 표시와 함께 (NPOT)이라고 표시가 된걸 확인 할 수 있는데
    이미지 사이즈가 2의 n승이 아니라는 뜻이다. 
    예시 화면에 127 X 128 사이즈의 이미지를 편집기를 통해 128 X 128로 수정하게 되면 NPOT 표시가 사라진다.

    만약 ETC나 PVRTC 설정을 사용한다면 이미지의 사이즈가 NPOT일 경우
    이미지가 압축 되지 않고 빌드에 포함되어 메모리, 앱 용량 모두에 악영향을 미친다(매우 중요).

    ASTC는 안드로이드와 IOS를 모두 지원하고 이미지 크기에 큰 영향을 받지 않아 개발이 편하기 때문에 최근 많이 사용하는 추세다.

    ASTC에는 4x4, 5x5, 6x6 등 다양한 옵션이 있는데 숫자가 커질수록 압축률이 좋아 텍스쳐의 용량이 줄어든다.
    텍스쳐의 용량은 Apply를 누른 뒤 하단에서 확인 할 수 있다. 

    압축률이 좋아 질 수록 퀄리티에 차이가 있기 때문에 이미지별 설정이 필요하다.

    정해진 값은 없지만 디폴트는 6x6, 중요한 이미지라면 4x4, 중요하지 않다면 8x8, 이펙트에 쓰이는 텍스쳐와 같은 뭉개져도 티가 나지 않는 이미지는 10x10, 12x12를 추천

    6x6과 4x4는 양쪽 숫자 두개를 곱해서 36과 16 만큼의 비율로 이미지 용량이 차이난다 ( 2배 이상 )




  • Max Size 옵션은 이미지를 임포트 할때 원래 원본 이미지의 크기 제한을 설정하는 옵션이다. 예를 들어 2048x1024 원본 이미지를 Max Size 1024로 설정해서 유니티에서 사용하면 1024x512로 유니티에 임포트 된다. 유니티에서 사용하는 최종 사이즈는 하단에 표시된 사이즈

Max Size