Crunch Texture Compress

크런치 텍스쳐는 이미 압축된 DDS, ETC등의 텍스처를 용량 감소를 위해 한번 더 손실 압축하는 것입니다.

따라서 메모리를 올리는 시점에서 압축이 풀어지므로 시스템 또는 비디오 메모리 감소 효과는 없습니다. 하지만 디스크 차지 용량은 드라마틱하게 감소되는데 적게는 20~30%에서 많게는 10%이하로 감소시킬 수 있습니다. 이로서 게임의 용량 감소 및 로딩 속도 증가등의 효과를 가져갈 수 있습니다.

오픈 소스이며 라이센스도 Public Domain으로 사용에 전혀 제한이 없어 많은 엔진에서 사용하고 있습니다.

Crunch Texture Compress

추가1. 최근 크런치 텍스처를 이용한 스프라이트 시트 애니메이션 하면서 알게 된 사항 몇 개를 적어봅니다. 커스텀 크런치 텍스처 포맷을 쓰신다면 참고하시면 됩니다.

  1. 깃허브에서 위 크런치 텍스처 압축 저장소로 가면 바이너리 파일이 있는 데 그걸 통해 간단히 PNG등의 파일을 CRN(자체 크런치 파일 포맷) 으로 변경할 수 있다.
  2. CRN 파일은 내용 그대로 읽어서 유니티의 Texture.LoadRawTextureData 함수를 통해 바로 적용할 수 있다.
  3. 단, 위의 저장소에서 받은 바이너리 파일은 유니티에서 바로 적용할 수 없으며 CRN 내부의 m_userdata0 의 값을 1로 줘야 한다. 따라서 코드 수정이 필요한데, 역시 이 작업을 한 미리 한 사람이 있다.
    1. 수정된 Crunch Texture Compress
    2. 관련 히스토리 Unit Forum

추가2. DXT, 크런치 텍스처 압축 방법 Crunch compression of ETC textures

Texture Atlas

텍스쳐 아틀라스는 여러 텍스쳐를 한곳에 모아둔 것입니다. NGUI등의 UI 툴에 주로 있어서 UI에만 사용한다는 인식도 있지만 텍스쳐 아틀라스는 모든 대상에 대하여 적용이 가능합니다.

타일맵 텍스쳐 아틀라스
UI 텍스처 아틀라스

굳이 텍스처를 모아서 쓰는 이유는 DP콜을 줄이기 위함입니다. DP콜이 줄어들면 성능이 향상되기 때문입니다. (메모리 감소측면도 있지만 굳이 2의 지수승으로 크기를 맞추지 않아도 되는 최근 그래픽 카드의 특성상 메모리 감소는 크지 않을 거라 생각됩니다.)

하지만 아틀라스로 묶는 단위가 명확해야 하며 사용시 주의를 해야 합니다. 잘못하면 텍스쳐 하나를 쓰기 위해 2048 또는 4096짜리 아틀라스 전체를 로딩해야 하는 경우가 생기기 때문입니다.

GitHub - Copilot 유료화

코파일럿이 유료화되었습니다. 생각보다 이른 시기에 유료화된 거 같습니다. 내세운 Your AI pair programmer에 한참 미치지 못하는 상태에서 유료화는 아무래도 시기상조란 느낌이 드네요. 전 포스트에서 추천했던 거와 달리 유료화 코파일럿은 추천하지 않습니다. 차후 몇 년 더 지나 진짜 pair 프로그래밍이 된다면 다시 판단해야 할 거 같습니다.

두번째 오픈소스 - D2M

스프라이트 시트 애니메이션은 게임 개발 초창기부터 움직이는 개체를 표현하는데 사용된 방식입니다.

하지만 전통적인 방식을 사용할 경우 가장 큰 문제는 바로 용량입니다. 최근 게임들의 커진 캐릭터와 다양한 동작은 많은 메모리를 필요로 합니다. 이에 DDS기반으로 이전 영상과의 차이점을 이용하여 파일 용량을 감소시킨 D2M을 만들게 되었습니다.

기본 컨셉은 일반적인 스프라이트의 경우 공백이 많다는 것입니다. 아래 애니메이션을 보시면 많은 공백이 있습니다. 이러한 공백은 다음 프레임에서도 상당 부분 유지가 되고 있습니다.

run

D2M은 이러한 프레임간의 차이점을 4x4(DDS와 같은 블럭크기)로 비교하여 저장합니다. 즉, 이미지가 변하지 않은 부분이 많으면 많을수록 압축률 및 성능이 올라갑니다.

256x256x32Bit 스프라이트 30장을 압축 없이 사용 할 경우에는 7,680KB이를 DDS(DXT5)로 변경할 경우에는 1,920KB가 됩니다. D2M의 경우 463KB로 줄어 들게 됩니다.

메모리에서 축소된 상태로 올라가 있다 한장 단위로 풀어 비디오 메모리로 올리므로 512~1024크기의 30fps 애니메이션을 동시에 16장 내외를 돌리더라도 60fps를 유지할 만큼의 성능이 나오고 있습니다. 차후 시스템 메모리를 사용량을 더 감소 시키기 위하여 스트리밍 방식도 고려중입니다.

단점으로는 D2M은 기존의 동영상 포맷을 대체할 수 없습니다. 이는 공백이 많거나 움직이지 않은 부분이 많은 스프라이트 시트 애니메이션을 산정하고 디자인 하였기 때문에 모든 화면이 차있고 변경되는 부분이 많은 일반 영상의 경우 압축 여지가 충분하지 않을 수 있기 때문입니다.

DDS2Movie-Maker
DDS2Movie-Player

PS. 최근에는 3D 게임이 많아지고 2D 애니메이션도 Spine, Live2D등 키프레임 기반으로 하는 경우도 많이 있습니다.

파일 구조

입사 면접을 볼때 면접자들에게 가장 크게 놀라는 부분이 파일 구조에 대해 매우 약하다는 것입니다.

요즘 엔진은 이미지 파일, 3D 메시 파일, 사운드 파일등 대부분의 파일을 손쉽게 로딩하여 사용할 수 있는 기능을 제공합니다. 그러다 보니 이러한 파일들이 저장될 때는 어떠한 구조로 그리고 메모리에 올라와 사용할 때는 어떠한 구조이며 얼마나 메모리를 사용하는지에 대해서 무지 한 경우가 있습니다.

휴대폰도 충분한 용량과 성능이 나오다 보니 하이엔드 게임을 제외하면 메모리나 로직의 최적화도 그다지 필요하지 않아 중요해 보이지 않기도 합니다. 교육 기관에서도 그닥 가르치는 거 같아 보이지 않습니다.(이것은 제가 모르는 것일 수 있습니다.)

하지만 알려진(또는 유명한) 파일의 구조는 배울 점이 많습니다. 다양한 기능을 효율적으로 정리하고 높은 확장성을 가지며, 많은 알고리즘이 적용되어 있는 등 알아가면 알아 갈수록 많은 것을 배울 수 있는게 파일 구조이지 않을까 싶습니다.

DataFormat by curlie - https://curlie.org/en/Computers/Data_Formats/