비트맵이 아닌 스프라이트
GameMaker는 벡터 SWF/SVG 및 Spine 스켈레탈 애니메이션 파일 형태의 비트맵이 아닌 스프라이트를 지원합니다. 이 두 형식은 각각 장단점이 있으며, 아래 두 섹션에서는 이를 Sprite Editor에 가져오는 방법과 그리기 방식에 대한 정보를 설명합니다.
스켈레탈 애니메이션 스프라이트 (Spine)
스켈레탈 애니메이션으로 만들어진 스프라이트는 기본 "뼈대"가 생성되고 키프레임을 사용하여 시간에 따라 뼈대의 구성 요소가 움직이도록 애니메이션화된 것입니다. 이 뼈대는 텍스처 아틀라스에서 스킨 처리되며, 결과 애니메이션은 여러 파일 형식 중 하나로 내보내집니다.
GameMaker는 이 유형의 스프라이트를 가져오는 것을 허용하며, .json 형식 파일로 내보내고 올바르게 연결된 텍스처 아틀라스 파일 (.atlas) 및 이미지 파일 (*.png)이 동일한 디렉토리에 있어야 합니다.
현재 GameMaker는 Spine 프로그램에서 생성된 JSON 형식 파일의 벡터 이미지만 가져올 수 있으며, 이를 프로그램에 가져오는 방법은 일반 비트맵 이미지를 추가하는 방법과 거의 동일합니다. 스켈레탈 애니메이션을 추가하려면 새 스프라이트를 생성해야 하며, 그러면 표준 "Load Sprite" 대화 상자가 열립니다. 여기서 파일 필터에서 *.json을 선택해야 합니다.
"로드" 버튼을 클릭하면 스켈레탈 애니메이션이 Asset Browser에 스프라이트로 추가되며, 파일이 처리되는 동안 진행 표시줄이 표시됩니다. 파일의 복잡성에 따라 이 과정은 잠시 걸릴 수 있습니다. 처리 완료 후 스프라이트 속성 대화 상자로 돌아가게 되며, 이제 다음과 같이 보입니다:
스프라이트 애니메이션을 가져온 후에는 충돌 속성을 설정할 수 있지만, 여기서는 정밀 충돌 또는 경계 상자 충돌만 사용할 수 있으며, 스켈레탈 애니메이션의 충돌 데이터는 제공된 데이터에서 명시적으로 가져옵니다. 가져온 파일에서 데이터가 누락된 경우 GameMaker는 충돌 마스크를 생성하지 않으므로, 가져온 이미지가 올바르게 설정되지 않으면 작동하는 충돌이 발생하지 않습니다.
주의: 스켈레탈 애니메이션의 복잡성으로 인해 스프라이트 편집기에서 표시되는 미리보기 이미지는 애니메이션을 정확하게 나타내기 위한 것이 아니라, 룸 편집기에서 시각화하기 위한 단순한 이미지를 제공합니다.
비트맵 스프라이트와 달리 가져온 스켈레탈 애니메이션 스프라이트는 편집기에서 수정할 수 없지만, GameMaker 언어(GML) 내에서 스킨을 변경하고 속성을 설정하며 애니메이션의 다른 측면을 제어하는 데 사용할 수 있는 여러 기능이 있습니다. 또한 스프라이트의 텍스처 옵션을 설정할 수 없으며(텍스처 그룹 제외), GameMaker는 스프라이트를 생성한 프로그램에서 제공된 텍스처 아틀라스를 사용합니다.
스켈레탈 애니메이션 스프라이트를 가져올 때 알아야 할 몇 가지 사항이 있으며, 가장 중요한 것은 일부 스프라이트 그리기 및 관리 기능이 기술적인 이유로 지원되지 않는다는 것입니다. 특히 스프라이트의 일부만 그리거나 위치를 "왜곡"하는 그리기 함수는 지원되지 않습니다. 그러나 기본 스프라이트 그리기 함수와 내장 스프라이트 변수는 완전히 지원됩니다. 이러한 함수 및 변수 외에도 특별한 skeleton_* 함수를 사용하여 애니메이션 속성을 설정하고 변경할 수 있습니다.
벡터 스프라이트 (SWF/SVG)
일반적으로 GameMaker의 모든 스프라이트는 비트맵을 사용합니다. 비트맵은 콘텐츠 측면에서 유연하지만, 메모리 사용량이 과도해질 수 있기 때문에 스프라이트의 크기와 프레임 수에 제한을 둡니다. 벡터 스프라이트는 내용을 다르게 저장하고 그리므로 이러한 제한을 우회합니다. 픽셀 그리드 대신 벡터 수학을 사용하여 삼각형으로 그려지며, 크기를 조정해도 정의를 잃지 않습니다.
프로그래밍 게임에서는 항상 대가가 따르며, 벡터 스프라이트의 단점은 비트맵 스프라이트보다 그리기가 CPU에 더 많은 부담을 준다는 것입니다. 이 속도 차이는 가져오는 애니메이션의 복잡성이 증가할수록 커집니다. 또한, 벡터 스프라이트의 메모리 사용량은 시각적 복잡성에 따라 달라집니다. 그럼에도 불구하고 벡터 스프라이트는 전통적인 비트맵 스프라이트를 사용하여 불가능한 방식으로 대형 애니메이션 그래픽을 추가할 수 있게 해줍니다.
성능 측면에서 벡터 스프라이트는 필요한 픽셀만 그리므로 GPU 관점에서 더 저렴할 수 있습니다. 일반적으로 벡터 스프라이트는 비트맵 스프라이트보다 훨씬 작습니다.
스프라이트 유형 | 크기 | 메모리 사용량 |
---|---|---|
비트맵 (70x68) | 4x70x68 바이트 x 12 프레임 | 223k |
벡터 | 54k |
스프라이트의 해상도를 4배로 늘리면:
스프라이트 유형 | 크기 | 메모리 사용량 |
---|---|---|
비트맵 (280x272) | 4x280x272 바이트 x 12 프레임 | 3570k |
벡터 | 54k |
벡터 이미지를 가져오는 방법은 일반 이미지와 동일하며, 스프라이트를 생성하고 "가져오기"를 사용하여 벡터 파일을 로드합니다. 파일을 선택하면 파일이 처리되는 동안 진행 표시줄이 표시됩니다. 파일의 복잡성에 따라 이 과정은 시간이 걸릴 수 있습니다. 처리 완료 후 스프라이트 속성 대화 상자로 돌아가게 되며, 이제 다음과 같이 보입니다:
스프라이트 편집기는 크게 변경되지 않지만, 텍스처 옵션은 비활성화되며 텍스처 그룹만 선택할 수 있습니다. "이미지 편집" 버튼은 여전히 클릭 가능하지만, 설정된 경우 외부 벡터 편집 프로그램을 엽니다.
주의: 복잡한 벡터 파일의 경우, 게임 내 또는 IDE에서 다른 벡터 도구와 동일하게 나타나지 않을 수 있습니다.
스프라이트 편집기의 추가 기능으로는 벡터 스프라이트가 그려질 때 품질을 설정할 수 있는 Precisionslider가 있습니다. 이 값은 스프라이트 생성을 위해 사용되는 삼각형의 수를 줄이거나 늘립니다. 일반적으로 대부분의 게임에서는 약 50%의 값이 충분하지만, 극단적인 스케일링을 사용하거나 성능 문제가 있는 경우 이 값을 실험해 보아야 합니다.
SVG 파일의 경우 미리보기를 솔리드, 와이어프레임 및 둘 다로 전환할 수 있습니다.
벡터 스프라이트를 가져올 때 알아야 할 몇 가지 사항이 있으며, 가장 중요한 것은 일부 일반 스프라이트 그리기 및 관리 기능이 기술적인 이유로 지원되지 않는다는 것입니다. 특히 스프라이트의 일부만 그리거나 위치를 "왜곡"하는 그리기 함수는 지원되지 않습니다. 그러나 기본 스프라이트 그리기 함수와 내장 스프라이트 변수는 완전히 지원됩니다. 또한 다음 함수를 사용하여 그려지는 벡터 스프라이트에 대해 서로 다른 안티 앨리어싱(AA) 값을 설정할 수 있습니다:
- SWF의 경우:
- draw_enable_swf_aa
- draw_set_swf_aa_level
- draw_get_swf_aa_level
- SVG의 경우:
- draw_enable_svg_aa
- draw_set_svg_aa_level
- draw_get_svg_aa_level
다음 사항도 유의해야 합니다:
- *.SWF 파일을 가져올 때 ActionScript는 지원되지 않으므로, SWF가 올바르게 작동하기 위해 ActionScript에 의존하는 경우 제대로 표시되지 않을 수 있습니다.
- 자체 타임라인이 있는 임베디드 영화 클립은 애니메이션 전체에서 첫 번째 프레임만 표시됩니다. 모든 애니메이션은 메인 타임라인에 있어야 합니다.
- 벡터 파일에 세밀한 세부 정보가 있는 경우, 결과 스프라이트에서 구멍이나 이상한 삼각형이 나타날 수 있습니다. 이는 작은 스케일에서 기하학이 함께 결합되어 잘 삼각형화되지 않는 모양을 만들 수 있기 때문입니다. 이 경우 두 가지 옵션이 있습니다: 벡터 파일의 내용을 확대하여 가져오는 프로그램이 더 많은 공간을 확보하도록 하거나, 깨지는 객체의 세부 수준을 줄이는 것입니다.
- GameMaker는 벡터의 스테이지 크기를 결과 스프라이트의 경계로 사용합니다. 그러나 스테이지 경계 밖에 있는 항목도 여전히 그려집니다. 따라서 스테이지 경계 밖에 아무것도 두지 않거나 마스크 레이어를 사용하여 이 영역에 대한 그리기를 제한해야 합니다.
- 스테이지 크기는 생성된 충돌 마스크의 크기에도 영향을 미치므로, 스테이지 크기가 크고 애니메이션에 많은 프레임이 있는 경우 메모리를 많이 사용할 수 있습니다. 따라서 정말 필요한 경우에만 정밀 충돌 마스크를 사용하십시오.
- 벡터 파일은 여러 레이어에서 생성되므로 일부가 겹칠 수 있으며, 이로 인해 알파가 비트맵 스프라이트와 동일하게 작동하지 않습니다. 겹치는 영역은 스프라이트의 다른 부분보다 투명하게 보이지 않을 수 있습니다.
SWF 전용: 비트맵 채우기는 지원되지만, 벡터 파일의 일부로 타일 비트맵 채우기를 사용하는 경우 비트맵 크기가 2의 거듭제곱이어야 하며, 그렇지 않으면 제대로 타일되지 않습니다. 텍스트 렌더링도 지원되지만, 결과 스프라이트에 표시되려면 벡터 파일에 글꼴을 포함해야 합니다. 현재는 왼쪽 정렬된 단일 행 텍스트만 지원됩니다. 임베디드 JPEG는 지원되지 않습니다.