[서평] DirectX 12를 이용한 3D 게임 프로그래밍 입문
최신 DirectX 12에 대한 입문서입니다. 워낙 유명한 저자의 책이기도 하고 역자 류광님도 유명하신 분이라 선택한 책입니다. 우선 인상 깊은 것은 책의 저자의 DirectX 11에 대한 입문서 책과 예제가 거의 비슷합니다. 내용도 상당 부분 동일합니다. 대부분의 예제가 DirectX 11 예제를 DirectX 12로 포팅하고 수정한 듯 보입니다. 물론 예제의 품질은 좀 더 좋아졌습니다. 이 분의 DirectX 11에 대한 책을 본 뒤에 읽는다면 많은 부분의 내용과 예제가 비슷하여 좀 더 쉽고 빠르게 이해할 수 있습니다. 이런 부분에서 DirectX 11입문서가 DirectX 라이브러리가 플랫폼 라이브러리로 된 후의 DX라이브러리를 사용하지 않고 쓰여진 개정판이 나왔었다면 좀 더 좋았을텐데라는 아쉬움도 듭니다.
이 책은 번역도 잘되었고 전반적으로 내용이 함축적으로 많은 부분을 포함하고 있어 책의 내용을 다 이해한다면 조금 응용하면 간단한 미니 엔진정도는 만드는 것도 가능해 보입니다. 참고로 책이 내용을 많이 함축하고 있고 API에 대한 자세한 설명은 없는 관계로 책을 읽을 때 예제 소스에 대한 분석이나 일부API에 대한 검색을 통한 이해는 필수로 보입니다. 참고로 맨 뒤 부분의 그림자 관련 부분부터는 예제는 너무 복잡해서 이런 부분들은 적당히 이해하고 시간 있거나 필요할 때 심층적으로 이해하는 것이 좋을 듯 보입니다. 솔직히 그런 부분은 입문서보다는 중급 서적의 내용에 가까워 보입니다.
입문서 책이라고 하지만 난이도는 좀 있습니다. DirectX 12는 GPU처리 성능을 극대화 시키도록 만들어져 있습니다. DirectX 11까지는 쉐이더적 접근 수준이었다면 DirectX 12는 좀 더 저레벨로 그래픽 파이프라인까지 만들면서 프로그래밍 해야 합니다.덕분에 코드의 직관성은 DirectX 11에 비하여 좀 더 떨어집니다. 당연히 소스도 DirectX 11 입문서보다 어렵습니다. 참고로 여기 소스 수준에서 최고의 성능을 내는 것은 저자도 이야기 했듯이 어렵습니다. 최고의 성능을 내려면 멀티 쓰레딩에 멀티 프로세스까지 사용해서 GPU를 항상 100% 활용하는 수준에서 CPU까지 활용해야 합니다. 그러다보면 DirectX 12의 큐잉과 배리어와 같은 일종의 락킹도 기가막히게 사용해야 합니다.
DirectX 11를 먼저 공부하고 DirectX 12를 공부하라고 하는데 일정부분은 맞는 이야기인거 같습니다. DirectX 11에서 고정 파이프라인과 쉐이더적 접근 그리고 DXGI와 같은 부분, DirectX 11부터 사용해오던 클래스를 이해하고 있으면 DirectX 12를 좀 더 쉽게 이해할 수 있는거 같습니다.
물론 개인적으로는 DirectX 12부터도 할 수도 있을거 같습니다. 하지만 이전 DirectX 부터 사용하던 클래스라던지 쉐이더에 대한 부분등등 넓은 부분을 별도로 학습해야 합니다. 이 방법이 DirectX 11을 공부하고 하는 것보다 더 빠르게 학습할 수 있을지는 솔직히 잘 모르겠습니다.
마지막으로 사견을 이야기하자면 게임 엔진은 점점 더 화려해지고 쉬워지는데 게임 엔진을 만드는 DirectX나 병렬처리 프로그래밍 같은 것은 점점 더 어려워지는 느낌입니다. 최신 C++에 대한 이해나 WinRT와 같은 최신 윈도우 API 이해에 대한 부담도 있습니다. 다음으로 3D 프로그래밍은 API 보다는 3D에 필요한 수학이나 물리에 기초로한 알고리즘이 사용법보다 더 어려운 분야인거 같습니다. 그리고 그렇게 공부해서 자체 엔진으로 게임을 만든다고 해도 상용 엔진 수준의 그래픽과 성능을 만들기는 쉽지 않기에 경쟁력 있는 엔진 만들기도 쉽지 않아보입니다. 또 그정도 만든다고 해도 상용 엔진 수준의 툴 등의 생산성적인 부분을 만드는 것도 쉬워보이지는 않습니다.