안녕하세요 꼼수입니다.
아주 기초적인 것 부터 한글화에 필요한 부분들을 포스팅 해 보겠습니다.
오늘은 그 첫번째로 게임에서의 자료가 실제 파일에 어떤식으로 표현이 되고 그 자료들은 아키텍처에 따라서
어떤 차이점이 있는지에 대해서 알아 보도록 하겠습니다.
1. 자료표현의 단위
컴퓨터로 자료를 표현한다는 것은 0,1의 조합인 비트로 데이터를 표현합니다. 모든 자료표현의 기초가 되는 단위이죠.
이 비트의 연속성을 가지고 실제 프로그램에서 필요한 자료들을 저장하고 불러오고 합니다.
이 비트를 어떤 조합으로 사용하느냐에 따라서 자료형이 결정이 됩니다. 여기서 전부를 다루지는 않고 여기서는
사이즈별 구분만 설명하도록 하겠습니다.
(1) Char (Byte)
8 비트의 조합으로 이진수로는 10101010 의 형태로 표현이 가능합니다. 16진수로는 0x00 ~ 0xFF 까지 표현이 가능합니다.
일반적으로 유니코드가 아닌 아스키 코드의 문자열을 표현할때 많이 사용합니다.
프로그래밍에서는 char, unsigned char로 선언되면 1 바이트로 표현됩니다.
(2) Short (2Bytes)
16 비트의 조합으로 이진수로는 1010101010101010 의 형태로 표현이 가능합니다. 16진수로는 0x0000 ~ 0xFFFF까지 표현
이 가능합니다.
실제 프로그래밍에서는 unsigned short, short 형태로 선언되면 2 바이트 자료형이 선언됩니다.
(3) Word (4Bytes)
32 비트의 조합으로 이진수로는 1010101010101010 의 형태로 표현이 됩니다. 16진수로는 0x00000000 ~ 0xFFFFFFFF까지
표현이 가능한 자료형입니다.
프로그래밍에서는 int, unsigned int, unsigned long, long 이런형태로 선언되면 선언됩니다.
일반적으로 Word는 컴퓨터에서 한번에 처리할 수 있는 양을 자료형으로 사용됩니다. 즉 32비트와 64비트에서의 Word
크기는 다릅니다. 따라서 64비트형에서는 Word가 64비트가 됩니다.
추가로 게임 한글화 시 필수로 2진수 및 16진수에 대해서는 필수로 익히셔야 합니다. 이건 구글링 및 계산기에서도 각진수로
변환이 가능하니 익히시기 바랍니다.
2. 컴퓨터 아키텍처
XBOX360 및 PS3도 기본적으로는 컴퓨터와 동일합니다. 즉, 컴퓨터 아키텍처를 그대로 사용합니다.
우리가 일반적으로 사용하는 PC (X86 계열이 많겠지요?)와 XBOX360 및 PS3는 PowerPC 아키텍처입니다.
자료를 표현하는데 있어서 일관되게 사용되면 좋겠지만 컴퓨터 세계에서는 대부분 한쪽 파라다임에 반대되는 파라다임이
거의 존재합니다. 아키텍처 부분도 예외는 아니어서 PC 에서는 자료표현을 Little Endian 형태로 표현합니다.
불행히도 PowerPC계열에서는 Big Endian 형태를 기본으로 사용합니다.
물론 특정 아키텍처가 Endian을 고정으로 사용하는 것은 아니지만 어쨌든 PS3/XBOX360에서는 Big Endian형태를
사용합니다.
여기까지 읽으시면 이게 뭔소리야 하시는 분들이 계실것 같습니다.
제가 아키텍처를 설명드리기 이전에 비트와 데이터의 범위에 대해서 설명을 드린 이유가 있습니다.
3번에서 실제 PC와 XBOX360의 파일을 비교한 그림으로 설명드리도록 하겠습니다.
3. 엔디안의 표현방식
기본적으로 자료표현의 방식에서 1 바이트로 이루어져 있는 바이트형에서는 엔디안간 차이점이 없습니다.
바이트형 데이터를 하나를 선언하던 10개를 선언하던 메모리 및 파일에 저장되는 형태는 동일하게 저장된다는 것입니다.
뭐 이런 당연한걸 설명하냐고 반문하시는 분이 계시겠지만..
문제의 포인트는 바이트형이 아닌 2바이트, 4바이트 형태를 표현하는데 있어서 결정적인 아키텍처간 차이점이 존재합니다.
아래 그림은 제가 처음으로 한글패치를 시도했던 피시판 매스이펙트 2 폰트가 패키징 된 파일과 XBOX360용 폰트가 패키징된
파일을 프로그램을 통해서 비교한 그림입니다. 사용한 프로그램은 UltraCompare라는 프로그램으로 바이너리 파일 비교를
해서 차이점을 알 수 있는 툴입니다.
아래 그림은 왼쪽화면이 PC용 파일이고 오른쪽 그림이 XBOX360 파일입니다.
먼저 왼쪽의 빨간 박스로 칠해져 있는 부분이 언리얼 패키지의 헤더를 구분하는 Magic Number입니다.
언리얼 패키지의 파일들은 제일 시작부분의 4바이트(즉, Word형..)의 자료형을 가지고 값을 찾아 옵니다.
Magic Number는 0x9e2a83c1 입니다.
즉 4바이트를 표현할때 Big Endian에서는 0번지에 4바이트중 최상위 1바이트 부터 표현을 하게 됩니다.
반면 Little Endian인 PC에서는 4바이트의 순서가 뒤집혀 있는 것을 확인 할 수 있습니다.
이게 바로 Endian의 차이에 따른 자료표현의 차이입니다.!!!!
두번째 파란박스로 되어 있는 부분인데 여기서는 자료의 성질은 중요하지 않고 박스친 부분이 2바이트 형태인 short형태라는
것입니다. 똑같은 값인데 자료표현이 PC와 XBOX360의 표현이 다른 것을 확인 할 수 있습니다.
세번째 보라색 박스인데 이부분은 PC와 XBOX360 부분이 동일한 것을 확인 할 수 있습니다. 이것은 앞서 설명드린
데이터의 표현을 1바이트 형태의 자료형을 연속적으로 사용한 결과입니다.
즉 PC와 XBOX360에서는 실제 게임상에서 완전히 같은 형태의 자료를 사용한다고 하더라도 아래 그림과 같이
실제 메모리나 파일에 저장되는 형태는 다르다는 것을 숙지하시면 됩니다.
첫번째 허접한 강의는 여기까지 하도록 하겠습니다.
두서없이 진행되는 강의라 다음번엔 어떤걸 하게 될지 고민좀 해보겠습니다..
※ 2012.05.03 19:43분 다크아이리스에 의해 XBOX 정보게시판에 복사 되었습니다.
|