마인크래프트 짭겜 개발노트 #2 "텍스쳐 아틀라스"

개발노트

2018. 10. 26. 14:36

마인크래프트는 1.7.10 버전을 경계로 블록 텍스쳐를 관리하는 방법이 바뀌었던 것으로 기억한다.


이전에는 모든 텍스쳐들을 하나의 큰 아틀라스로 저장했었는데

1.7.10 부터는 텍스쳐 하나하나 별개의 이미지 파일로 저장해 두는 구조로 바뀌었다.

유저들이 텍스쳐팩을 만들거나 모드를 만들때 텍스쳐를 관리하기 더 쉽게 하려는 의도일 것이다.


minecraft texture atlas에 대한 이미지 검색결과 


(전자가 옛날 방식, 후자가 현재 방식)


비록 텍스쳐를 쪼개서 여러 파일로 저장하는 구조로 바뀌었다고 하더라도

게임 내에서는 그것들을 하나의 이미지로 묶어서 사용해야 한다. 앞에서 말했듯이 그래야 효율적이기 때문이다.



실제로 1.7.10 이후 버전부터는 로딩과정 중에 텍스쳐들을 통합하는 절차가 추가되었다.

로그를 자세히 보면 Texture stitching 이라는 문장이 있다. 'Stitch' 는 '바느질하다' 라는 의미이다.


텍스쳐를 수정할 때마다 매번 직접 아틀라스를 수정하는 건 아무래도 번거로워서

마인크래프트처럼 텍스쳐 파일은 따로따로 관리하고 Texture Stitching 절차를 추가해 놓는 편이 개발하는 데 훨씬 편리했다.


유니티에는 텍스쳐들을 합쳐서 하나의 파일로 만들어주는 유틸리티를 제공하므로 쉽게 구현할 수 있다.

Texture2D.PackTextures


아무튼 텍스쳐를 파일 하나로 관리하든 여러 파일로 관리하든

모든 블록 텍스쳐들이 모여있는 아틀라스를 청크 머테리얼에 적용시키고

블록의 각 면에 원하는 텍스쳐의 좌표를 매핑해 주는 방식으로 청크를 그리게 된다.

마침 마인크래프트 텍스쳐들은 모두 정사각형에 크기가 같으므로 좌표를 매핑하는 것은 별로 어렵지는 않다.