다음을 통해 공유


DirectX 게임용 2D 그래픽

2D 비트맵 그래픽 및 효과의 사용과 게임에서 이를 사용하는 방법에 대해 설명합니다.

2D 그래픽은 2D 기본 형식 또는 비트맵을 처리하는 3D 그래픽의 하위 집합입니다. 일반적으로 게임 플레이는 일반적으로 x-y 평면에 국한되기 때문에 3D 게임이 가능한 방식으로 z 좌표를 사용하지 않습니다. 3D 그래픽 기술을 사용하여 시각적 구성 요소를 생성하는 경우가 많으며, 이는 일반적으로 개발이 더 간단합니다. 게임을 처음 접하는 경우 2D 게임이 시작하기에 좋으며, 2D 그래픽 개발은 DirectX에서 핸들을 얻기에 좋습니다.

Direct2D 또는 Direct3D를 사용해, 또는 일부를 조합해 DirectX에서 2D 게임 그래픽을 개발할 수 있습니다. 2D 게임 개발에 더 유용한 클래스의 대부분은 Sprite 클래스와 같은 Direct3D에 있습니다. Direct2D는 주로 원, 선, 플랫 다각형 셰이프와 같은 그리기 기본 형식을 지원해야 하는 사용자 인터페이스 및 앱을 대상으로 하는 API 집합입니다. 이 점을 고려하여 게임 그래픽을 생성하거나, 특히 게임 오버레이, 인터페이스, HUD(헤드업 디스플레이)를 생성하거나 간단한 것부터 합리적으로 상세한 것까지 다양한 2D 게임을 생성할 때에도 강력하고 성능이 좋은 클래스와 메서드 집합을 제공합니다. 하지만 2D 게임을 생성할 때 가장 효과적인 방법은 두 라이브러리의 요소를 사용하는 것이며, 이 항목에서 2D 그래픽 개발에 접근하는 방법입니다.

개념 한눈에 보기

최신 3D 그래픽과 이를 지원하는 하드웨어가 등장하기 전에는 게임이 주로 2D였으며, 그래픽 기술에 일반적으로 1:1 방식으로 화면의 픽셀로 변환되거나 변환되는 색상 데이터 배열과 같은 메모리 블록을 이동하는 것이 포함되는 경우가 많았습니다.

DirectX에서 2D 그래픽은 3D 파이프라인의 일부입니다. 훨씬 더 다양한 화면 해상도와 그래픽 하드웨어를 사용할 수 있고, 2D 그래픽 엔진은 충실도를 크게 변경하지 않고도 지원할 수 있어야 합니다.

다음은 2D 그래픽 개발을 시작할 때 숙지해야 할 몇 가지 기본 개념입니다.

  • 픽셀 및 래스터 좌표. 픽셀은 래스터 디스플레이의 단일 지점이며, 디스플레이의 위치를 나타내는 자체(x, y) 좌표 쌍이 있습니다. ('픽셀'이라는 용어는 디스플레이를 구성하는 물리적 픽셀과 디스플레이로 전송되기 전에 픽셀의 색 및 알파 값을 유지하는 데 사용되는 주소 지정 가능한 메모리 요소 간에 혼용할 수 있는 경우가 많습니다.) 래스터는 API에 의해 픽셀 요소의 직사각형 그리드로 처리되며, 디스플레이의 물리적 픽셀 그리드와 1:1로 대응하는 경우가 많습니다. 래스터 좌표계는 좌측 상단에서 시작하여 그리드의 좌측 상단 모서리에 있는 픽셀(0, 0)입니다.
  • 비트맵 그래픽(래스터 그래픽이라고도 함)은 픽셀 값의 사각형 눈금으로 표현되는 그래픽 요소입니다. 래스터와는 별도로 관리되는 계산된 픽셀 배열인 스프라이트는 비트맵 그래픽의 한 가지 유형으로, 일반적으로 게임에서 활성 문자 또는 배경과는 별개의 애니메이션 개체에 사용됩니다. 스프라이트에 대한 다양한 애니메이션 프레임은 "시트" 또는 "일괄 처리"라고 하는 비트맵 모음으로 표시됩니다. 배경은 화면 래스터의 해상도와 같거나 더 큰 비트맵 개체이며 종종 게임 플레이 필드의 배경으로 사용됩니다.
  • 벡터 그래픽은 점, 선, 원, 다각형과 같은 기하학적 기본 형식을 사용하여 2D 개체를 정의하는 그래픽입니다. 픽셀 배열이 아니라 2D 공간에서 정의하는 수학적 수식으로 표시됩니다. 디스플레이의 픽셀 그리드와 반드시 1:1 대응이 있는 것은 아니며, 렌더링한 좌표계에서 디스플레이의 래스터 좌표계로 변환해야 합니다.
  • 점 또는 꼭짓점을 사용하고 동일한 좌표계에서 새 위치를 계산하는 경우 해석합니다.
  • 지정된 배율 인수로 개체를 확대하거나 축소하는 경우에 크기를 조정합니다. 벡터 이미지를 사용하면 해당 구성 요소 꼭짓점을 축소 및 확대합니다. 비트맵을 사용하면 픽셀 요소를 확대하거나 축소합니다. 비트맵 이미지를 사용하면 이미지가 축소될 때 픽셀 데이터가 손실되고 이미지가 더 조밀하게 크기 조정되면 개별 픽셀을 확대합니다. 후자의 경우 쌍선형 필터링과 같은 픽셀 색 보간 작업을 사용하여 확대된 픽셀 간의 거친 색 경계를 부드럽게 할 수 있습니다.
  • 회전은 지정된 축 또는 축에 대한 개체를 회전하는 경우입니다. 벡터 이미지를 사용하면 기하 도형의 꼭짓점을 회전 행렬에 곱하여 회전된 꼭짓점을 확보합니다. 비트맵 이미지를 사용하면 각각 결과에서 더 작거나 더 높은 수준의 충실도를 가진 다양한 알고리즘을 사용할 수 있습니다. 크기 조정 및 변환과 마찬가지로 특별히 회전 작업에 대한 API가 있습니다.
  • 변환은 한 좌표계에서 한 점 또는 꼭짓점을 사용하고 다른 좌표계에서 해당 점 또는 꼭짓점을 계산하는 경우입니다. 여기에는 변환, 크기 조정, 회전뿐만 아니라 다른 좌표 계산 작업이 포함됩니다.
  • 클리핑은 표시의 표시 가능 영역 내에 없거나 뷰 우선순위가 높은 개체에 의해 숨겨진 비트맵 또는 기하 도형의 일부를 제거하는 경우입니다.
  • 프레임 버퍼는 그래픽 하드웨어 자체의 메모리에 있는 메모리 영역으로, 화면에 그릴 최종 래스터 맵을 포함합니다. 스왑 체인은 버퍼 컬렉션으로, 백 버퍼에 그리는 위치에 이미지가 준비되면 전면으로 '스왑'하고 표시합니다.

디자인 고려 사항

2D 그래픽 개발은 Direct3D를 사용하여 개발하는 데 익숙해지는 좋은 방법이며, 오디오, 컨트롤, 게임 메커니즘과 같은 게임 개발의 다른 중요한 측면에 더 많은 시간을 할애할 수 있습니다.

항상 백 버퍼에 그립니다. 프레임 버퍼에 직접 그리는 것은 그리기 작업이 완료되지 않은 경우에도 디스플레이 신호가 수신될 때(일반적으로 1/60초마다) 이미지가 표시됨을 의미합니다!

1024x600에서 1920x1080 이상까지 다양한 해상도를 지원하도록 그래픽 엔진을 디자인합니다. 특히 2D 그래픽으로 LCD 모니터의 기본 해상도를 지원하면 대상 그룹이 감사할 것입니다.

훌륭한 아트워크는 시각적 개체와 관련하여 최고의 자산이 될 것입니다. 비트맵 그래픽은 최신 셰이더 모델 기능을 사용하여 3D 포토리얼리즘 시각적 효과가 부족할 수 있지만, 뛰어난 고해상도 아트워크는 종종 훨씬 더 많은 스타일과 개성을 전달할 수 있으며 성능 저하가 훨씬 적습니다.

참조