2015년, 윈도우 10과 함께 세상에 모습을 드러낸 DirectX 12는 마이크로소프트의 야심찬 작품입니다. 이 최신 API는 게임 애호가와 개발자들에게 혁신적인 경험을 선사하며 새로운 시대를 열었습니다. DirectX 12는 GPU 성능을 극대화하면서 CPU의 부담을 덜어주는 방식으로 빠르게 명성을 얻었습니다.
하지만 DirectX 11에서 DirectX 12로의 단순한 전환만으로 성능 향상을 보장할 수 있을까요? DirectX 11과 12의 핵심적인 차이점을 자세히 살펴보며 그 답을 찾아보겠습니다.
마이크로소프트 DirectX란 무엇인가?
마이크로소프트 DirectX는 멀티미디어 작업 처리에 특화된 API(응용 프로그래밍 인터페이스)들의 집합체입니다. 이는 Windows와 Xbox 같은 마이크로소프트 플랫폼 기반의 게임 개발 환경에서 핵심적인 역할을 합니다. API는 쉽게 말해 서로 다른 컴퓨터 프로그램 간의 원활한 소통을 가능하게 하는 연결 통로와 같습니다.
휴대폰을 예로 들어볼까요? 어머니가 장 볼 목록을 문자로 보내면, 여러분의 휴대폰은 이 데이터를 받아 화면에 표시해줍니다. 이는 API가 데이터를 주고받으며 소통하는 방식과 유사합니다.
DirectX 11과 DirectX 12의 주요 차이점
DirectX 11과 DirectX 12의 가장 큰 차이점은 무엇일까요? 간단히 말해, DirectX 12는 DirectX의 최신 버전입니다. 주목할 만한 차이점 중 하나는 하드웨어와의 상호작용 방식입니다. DirectX 11로 개발된 대부분의 게임은 CPU 코어 중 2~4개만을 활용했습니다. 이 코어 중 하나가 주로 GPU에 작업을 지시하는 역할을 담당했죠.
나머지 코어들은 게임 내 입자 효과나 가시거리 같은 CPU 사용량이 많은 설정들을 처리했습니다. 반면 DirectX 12는 CPU의 작업량을 여러 코어에 분산시켜 모든 코어가 GPU와 동시에 통신할 수 있도록 합니다.
DirectX 12에는 비동기 컴퓨팅과 파이프라인 상태 객체(PSO)라는 매력적인 기능들이 추가되었습니다. 비동기 컴퓨팅은 여러 작업을 동시에 처리하여 GPU의 활용도를 높입니다. 이것은 GPU의 잠재력을 최대한 끌어내는 데 중요한 역할을 합니다.
GPU는 단순히 그래픽을 렌더링하는 것뿐만 아니라, 머신 러닝 알고리즘 실행과 같은 다양한 작업을 처리합니다. DirectX 11에서는 GPU가 이러한 작업들을 특정 순서대로 한 번에 하나씩만 처리할 수 있었습니다. 이로 인해 GPU 리소스가 비효율적으로 사용되어 성능 저하를 초래했습니다.
식당의 웨이터를 예로 들어보죠. 웨이터가 주문을 받을 때, 먼저 음료를 물어보고, 음료를 받은 후에 메인 코스를 묻습니다. 마지막으로 디저트 주문을 받습니다. 주문은 단계적으로 진행됩니다. 메인 코스를 받기 전에 디저트를 미리 주문할 수는 없습니다. 효율적이지만, 최고 효율은 아닙니다.
컴퓨터에서는 각 GPU 리소스가 웨이터의 각 작업에 해당합니다. 음료 주문을 처리하는 동안 메인 코스를 처리하는 리소스는 쉬고 있습니다. 하지만 DirectX 12의 비동기 컴퓨팅은 웨이터가 마치 패스트푸드점처럼 한 번에 모든 주문을 받을 수 있게 합니다. 이로써 GPU 사용이 극대화되고 게임 성능이 향상됩니다.
DirectX 12에는 PSO(파이프라인 상태 객체)도 도입되었습니다. DirectX 11에서는 게임의 기하학적 구조를 GPU로 보내 렌더링할 때, 다양한 하드웨어 설정이 데이터를 해석하고 렌더링하는 역할을 담당합니다. 이것을 그래픽 파이프라인이라고 하며, GPU가 프레임을 렌더링하는 동안 데이터가 흘러가는 과정을 나타냅니다. 하지만 DirectX 11의 그래픽 파이프라인은 완벽하지 않았습니다.
이 파이프라인은 래스터화 상태, 혼합 상태, 깊이 스텐실 상태 등 다양한 상태들을 포함합니다. DirectX 11에서는 이러한 상태들 간에 의존성이 존재했습니다. 이전 상태가 완료될 때까지 다음 상태를 진행할 수 없었습니다. 결과적으로 GPU 사용량이 감소하고 CPU 과부하가 증가하면서 성능 저하가 발생했습니다.
이 문제를 해결하기 위해 DirectX 12는 PSO를 도입했습니다. PSO는 그래픽 파이프라인 전체의 상태를 기술하는 객체입니다. 마치 병에 다양한 상태와 구성 요소들이 담겨 있는 것과 같습니다. PSO는 GPU가 현재 그래픽 파이프라인에 따라 상태를 지속적으로 다시 계산하는 대신 모든 의존 상태를 미리 처리할 수 있게 해줍니다.
이러한 변화는 DirectX 11에서 발생하던 CPU 과부하를 크게 줄이고 성능을 향상시킵니다. 마이크로소프트에 따르면 DirectX 12는 CPU 오버헤드를 최대 50% 줄이고 GPU 성능을 최대 20%까지 향상시킬 수 있다고 합니다. 이는 상당한 개선이지만, 모든 사용자에게 동일한 효과를 보장하지는 않습니다.
DirectX 11에서 DirectX 12로의 전환이 어려운 이유
DirectX 11은 2009년 10월 27일에 윈도우 비스타를 위해 처음 출시되었습니다. 2015년 DirectX 12가 출시되기까지 6년이라는 시간이 흘렀습니다. 그동안 수많은 게임들이 DirectX 11을 기반으로 개발되었습니다. 안타깝게도 DirectX 11에서 DirectX 12로 전환하는 것은 결코 쉬운 일이 아닙니다.
DirectX 11은 고급 API라고 합니다. 이는 개발자가 사용하기 더 쉽다는 의미입니다. 결과적으로 안정적이고 세련된 게임들이 많이 출시되었습니다. 반면, DirectX 12는 저수준 API이며 DirectX 11과는 다릅니다. 개발자는 세밀한 수준에서 최적화를 조정할 수 있지만, 그만큼 깊은 지식이 필요합니다.
DirectX 12로 개발된 게임은 개발자의 API 지식 수준에 따라 성능이 크게 달라질 수 있습니다. DirectX 12가 제공하는 잠재력이 크지만, 실제로 성능을 향상시키는 것은 개발자의 구현 능력에 달려 있습니다. 이러한 이유로 많은 개발자들이 DirectX 11과 같은 고급 API를 선호합니다.
DX 11과 DX 12, 어떤 것을 선택해야 할까요?
선택은 실행하려는 게임을 포함한 여러 요소에 따라 달라집니다. 예를 들어, Guild Wars 2는 DirectX 11에서 실행됩니다. OS와 하드웨어가 DirectX 12를 지원하더라도 게임 자체가 DirectX 11을 사용하도록 설정되어 있다면 DirectX 12를 선택할 여지가 없습니다. 이 결정은 전적으로 개발사인 ArenaNet에 달려 있습니다.
이미지 출처: Martin Kerstein/길드워2
놀랍게도 ArenaNet이 DirectX 9에서 DirectX 11로 전환하는 데 9년이나 걸렸습니다. 하지만 Fortnite, Battlefield 5, Shadow of the Tomb Raider를 비롯한 일부 게임은 DirectX 11과 DirectX 12를 모두 지원합니다. 사용자들은 게임 설정에서 DirectX 버전을 전환할 수 있습니다.
일부 게임이 DirectX 11과 12를 모두 지원한다는 사실에 여러분은 게임 성능에 대해 궁금해 할 것입니다. DX 11 또는 DX 12 중 어떤 것을 선택해야 게임 성능이 향상될까요? 다음 비디오는 AMD Ryzen 3600, Nvidia GeForce RTX 3060 Ti, 16GB DDR4 RAM을 사용하여 DX 11과 DX 12를 비교 실험한 결과입니다.
실험 결과는 여러모로 놀라웠습니다. 출시 간에 몇 년의 차이가 있음에도 불구하고 DX 11과 DX 12 사이에는 시각적인 차이가 거의 없었습니다. 또한 두 DirectX 버전 간의 GPU 및 CPU 로드 차이에 주목할 필요가 있습니다. 각 게임의 DX 12 버전은 일반적으로 이전 DX 11보다 더 적은 리소스를 필요로 했습니다.
게임 내 지원 여부 외에도 DirectX 11과 DirectX 12의 선택은 하드웨어에 따라 달라집니다. 거의 모든 최신 GPU는 DirectX 12를 지원하지만, Radeon HD 4870과 같은 구형 GPU는 그렇지 않습니다. 2008년에 출시된 이 GPU는 DirectX 10까지만 지원합니다. 이는 대부분의 최신 게임을 실행할 수 없다는 것을 의미합니다.
DirectX 12가 여러분에게 적합한 선택일까요?
종합적으로 보면, DirectX 11에서 DirectX 12로의 전환은 흑백 논리로 단정 지을 수 없습니다. 하드웨어, 소프트웨어, 운영 체제, 게임 자체의 지원 여부 등 다양한 요인에 따라 달라집니다. 이러한 모든 요소를 신중하게 고려해야 하며, 이러한 고려 사항은 향후 DirectX 세대에서도 마찬가지일 것입니다.