Direct3D-11 렌더링 엔진 만들기

Direct3D-11을 활용해서 렌더링(그리기) 엔진을 만들어 보려고 합니다.

어디까지 기능을 추가할 지는 결정하지 않았습니다.

렌더링에 필요한 기본적인 기능과 내용을 익힐 수 있도록 만들어보려고 합니다.

장면을 구성하는 기본 물체의 구조는 Entity-Component 패턴을 적용해 구현합니다.

(가장 인기있는 두 엔진인 언리얼/유니티가 채용한 구조입니다.)

(참고로 언리얼은 위의 Entity를 Actor라고 칭하고, 유니티는 GameObject라 칭합니다. Entity와 내용은 같습니다.)

(Entity-Component 패턴을 더 자세히 공부하고 싶다면, Game Programming Pattern의 저자 홈페이지에서 확인해보세요.)



프로젝트에 사용할 개발환경은 아래와 같습니다.

  • 언어: C++
  • Direct3D 버전: 11 (Direct3D-11)
  • 편집기: Visual Studio 2019
  • Direct3D SDK: Windows SDK (Visual Studio 설치 메뉴에서 추가로 설치)
  • 텍스처 처리: DirectX-Tex Library (MS에서 제공)
  • 입력 처리(키보드/마우스): DirectX-TK Library (MS에서 제공)
  • 모델링 처리: Assimp Library (오픈 소스)



Direct3D 11을 사용하는 이유

Direct3D는 MS 진영의 그래픽스 라이브러리 입니다. 당연하게도 윈도우즈에서만 동작합니다.

Direct3D의 최신 버전은 12입니다. 최신 버전인 12를 익히면 물론 좋겠지요.

하지만 Direct3D 12버전은 Direct3D 11버전을 아주 잘 이해하고 사용할 수 있는 개발자들을 위한 버전입니다.

게임 개발에서 가장 많이 사용됐었던 버전은 아마도 Direct3D 9 버전 일겁니다(적어도 한국에서는).

하지만 9버전은 나온지 오래되었고, 10은 9와 11의 과도기적인 느낌이 있습니다.

지금 시작한다면 Direct3D 11버전으로 시작하는 것이 좋다고 생각합니다.



FBX 파일 포맷을 사용합니다.

이유는 정확히 모르지만, 현재 가장 인기있는 두 엔진이 기본으로 채택한 모델링 포맷이 FBX입니다.

FBX는 Autodesk사에서 지원하는 타입입니다.

(관련정보: https://www.autodesk.com/products/fbx/overview)

개인적으로는 모델링이 어떤 원시 데이터를 포함하는지를 더 직관적으로 이해하기에 좋은 타입은 obj라고 생각합니다.

하지만, 현시대를 이끄는 게임 엔진들이 기본으로 사용하는 포맷을 사용하는 것이 좋다고 생각했습니다.

다른 이유는 없습니다.



Assimp 라이브러리를 사용하는 이유

Autodesk사의 홈페이지에서 FBX SDK를 다운로드하고, 직접 모델링 처리 로직을 작성할 수도 있습니다.

이 과정도 공부하는 시점에서는 의미가 있을지도 모르겠습니다.

하지만 필요한 기능을 만드는데에 드는 노력이 생각보다 크기 때문에 기능을 잘 지원하는 라이브러리를 사용하려고 합니다.



궁금한 점이 있으면 댓글로 의견 바랍니다.

비방이 아닌 의견제시나 질문 댓글은 언제나 환영입니다.

누가 보실지는 모르겠지만, 조금이나마 도움이 되면 좋겠네요.

감사합니다.



RonnieJ

프리랜서 IT강사로 활동하고 있습니다. 게임 개발, C++/C#, 1인 기업에 관심이 많습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Please turn AdBlock off

Notice for AdBlock users

Please turn AdBlock off