NDS의 이미지 처리를 앞서 하드웨어 제원을 살펴보겠습니다.

3인치 2LCD, 256x192 해상도를 가지고 있으며, 색상컬러는 RGB 각각 2^5를 할당하는 15bit체계를 사용합니다.

H/W 제약상, LCD에서 3D가 나오면 다른 한곳은 2D가 나옵니다.

NDS의 그래픽 처리 방식에 대해서 이야기 하겠습니다.

NDS
의 메모리는 Main Memory 4MB, 비디오 메모리 640Kbyte로 구성되어있습니다.


요즘 PC의 최소 메모리 등급인 128MB에 비하면, 정말 엄청 적은 메모리입니다
.

이 메모리도 한 LCD에서 사용하는 것이 아니라 2LCD에서 나눠서 사용합니다
.


언뜻, 640Kb 2로 나눠서 1LCD 320Kb를 배정해서 프로그래밍 해야 한다고

생각할 수 있지만
,

실상, NDS의 게임을 자세히 보시면, 플레이어가 집중하는 LCD는 화려한데에 비해,
 
단순히 정보 제공 능력만
하는 LCD(보통 터치 스크린있는 하단 LCD)는 간단한
 
그림으로 채워져 있습니다
.

, 플레이어가 2LCD를 동시에 집중해서 플레이하는건 어려우니 한개의 LCD에만

리소스를 집중하는 방식입니다
.


이에 H/W적으로 NDS에서 VRAM 구성은 아래와 같은 식으로 되어있습니다.


사용자 삽입 이미지

하지만, LCD 1곳에 BG 4개를 겹처서 Main LCD에 그리게 할려면 (참조 : New Super Mario brothers가 그런 구조입니다)
256x192(
화면 해상도) = 49152(Byte) x 4( BG) = 196608(Byte) => 196Kbyte가 필요하게 됩니다
. 물론 이것은 무압축 모드이고, 압축하면 128KB 이하로 가능합니다.
(그림이 단순하면 단순할수록 압축효과는 좋아집니다. 자세한건 BG 설명 포스트로)

현제 BMP Converter Tool 에서는 무압축 모드만 지원하므로, 위의 최대 그림크기를 가정하면,  VRAM_A(128KB)으로는 들어가지 않으므로, HW_LCD_VRAM_AB(256Kbyte)와 같은 구조를 사용합니다
.

, 이와 같은 여러 제약으로 NDS 게임을 제작할 때 가장 먼저 고려할 것이 그래픽이라 생각합니다.

그래픽은, 가급적, 256Color을 사용하며, 화면 크기도 LCD최대 해상도인 256x192이지만
, 전체적으로 512x512해상도의 그림까지는 메모리에 올릴 수 있습니다.

256Color를 사용하기 때문에 배경은 단조롭게,
OAM
은 한가지 컬러 계통으로 디자인해야 한다고 생각합니다
.

사용자 삽입 이미지
(에밀크로니클 온라인의 몬스터(시나몬)의 디자인. 갈색 컬러 계통의 예)

이제 프로그래밍 순차적으로 접근하겠습니다.

1. VRAM을 어디까지 할당 하는 것에 관해 초기화 시켜야 합니다
2.  각각 사용에 맞게 초기화 함수를 사용해야 합니다
.

여기선 공통적으로 2진 파일을 읽어서 NDS에 출력하게 할것입니다
.

3. NDS 파티션은 NDS FTA 구조를 사용하며, DOS FTA16과 그 기능은 흡사한거 같습니다. 하지만, 여러 보안 솔루션(복사 방지 및 아마추어 DS 제작 라이브러리 제한)등을 두고 있습니다.

4. 파일 로드할 준비가 되었고, 2진 파일로 된 그림을 불러오면 됩니다.

이후 여기에 올릴 NDS상 그림을 띄우는 방법에 대해서 입니다.

NDS 그림 종류

장점

제한 사항

15Bit 컬러 그림

Direct Draw 개념

Main LCD만 출력

256BG

NDS 2D H/W Engine 지원

팔레트상 256, 16 색만 가능

OAM

NDS 2D H/W Engine 지원

스프라이트개념, 1 LCD 128개 배치 가능

위와 같은 종류가 있으며 하나 하나 기술하겠습니다.



[1] OAM (Object Attract Memory) : NDS에서 일종의 스프라이트 처리를 할 때 사용하는 개념입니다.

+ Recent posts