Direct3D 12란?

DirectX 12에서는 DirectX의 중심에 있는 3D 그래픽 API인 Direct3D의 다음 버전을 소개합니다. Direct3D 12는 이전 버전보다 훨씬 빠르고 효율적입니다. Direct3D 12에서는 풍부한 장면, 더 많은 개체, 더 복잡한 효과를 활용할 수 있고 최신 GPU 하드웨어를 완벽하게 활용할 수 있습니다.

어떻게 Direct3D 12가 훨씬 더 빠르고 효율적일 수 있나요?

Direct3D 12는 이전 버전보다 낮은 수준의 하드웨어 추상화를 제공하여 타이틀(또는 기타 애플리케이션)의 다중 코어 CPU 규모를 크게 향상시킬 수 있도록 한다는 점에서 특별합니다. 특히, Direct3D 12를 사용할 경우 타이틀은 고유한 메모리 관리를 수행해야 합니다. 또한 Direct3D 12를 사용하여 타이틀 및 애플리케이션은 명령 큐 및 목록, 설명자 테이블 및 간결한 파이프라인 상태 개체 등의 기능을 통해 GPU 오버헤드를 줄일 수 있습니다.

Direct3D 12 및 Direct3D 11.3은 렌더링 파이프라인에 대한 새로운 기능 세트를 제공합니다.

  • 일반 래스터화: 신뢰할 수 있는 적중 검사를 수행할 수 있습니다.
  • 볼륨 타일식 리소스: 스트리밍된 3차원 리소스를 마치 비디오 메모리에 있는 것처럼 처리할 수 있습니다.
  • 정렬된 래스터라이저 뷰: 신뢰할 수 있는 투명성 렌더링을 수행할 수 있습니다.
  • 셰이더 내의 스텐실 참조를 설정하여 특수 섀도잉 및 기타 효과를 지원합니다.
  • 텍스처 매핑 및 형식화된 UAV(순서가 지정되지 않은 액세스 뷰) 로드가 개선되었습니다.

Direct3D 12에 투자해야 하는 이유

Direct3D 12는 (Direct3D 11과 비교할 때) 그래픽 개발자에게 네 가지 주요 이점을 제공합니다.

  • CPU 오버헤드를 크게 줄여줍니다.
  • 전력 소비를 상당히 줄여줍니다.
  • GPU 효율성이 최대 (약) 20% 개선됩니다.
  • Windows 10 디바이스(PC, 태블릿, 콘솔, 모바일)를 위한 플랫폼 간 개발이 지원됩니다.

Direct3D 12는 고급 그래픽 프로그래머가 사용할 수 있도록 디자인되었습니다. 상당한 그래픽 전문 기술 및 높은 수준의 미세 조정을 지원합니다. Direct3D 12는 멀티스레딩, 신중한 CPU/GPU 동기화, 리소스의 전환 및 용도 재지정을 최대한 활용하도록 디자인되었습니다. 이러한 기술에는 상당히 높은 메모리 수준 프로그래밍 기술이 요구됩니다.

또 다른 이점은 Direct3D 12가 API에서 차지하는 공간이 작다는 것입니다. 약 200개의 함수가 있으며 이중 약 1/3이 중대한 임무를 수행합니다. 즉, 그래픽 개발자는 너무 많은 API 이름을 기억하지 않고도 전체 API 집합에 대해 교육하고 master 수 있어야 합니다.

Direct3D 11은 Direct3D 12와 함께 계속해서 유효한 옵션으로 계속 사용될 것입니다. Direct3D 12의 여러 새로운 렌더링 기능을 Direct3D 11.3에서 사용할 수 있습니다. Direct3D 11.3은 하위 수준 그래픽 엔진 API이며, Direct3D 12가 훨씬 더 깊이 있는 기능을 제공합니다.

개발 팀은 Direct3D 12 타이틀에 2가지 이상 방법으로 접근할 수 있습니다.

Direct3D 12를 단독으로 사용

Direct3D 12의 장점을 최대한 활용하는 프로젝트의 경우 고도로 사용자 지정된 Direct3D 12 엔진을 처음부터 새로 개발해야 합니다.

그래픽 개발자의 경우 타이틀 내의 리소스 사용 및 재사용을 잘 이해하고 업로드 및 복사를 최소화하여 리소스를 활용할 수 있으면, 해당 타이틀에 대해 효율성이 뛰어난 엔진을 개발하고 사용자 지정할 수 있습니다. CPU 시간을 확보하여 그리기 호출 수를 줄이고 그래픽에 더 많은 광택을 추가하여 성능을 크게 개선할 수 있습니다.

프로그래밍 투자는 매우 중요하며, 초기부터 프로젝트의 디버깅 및 계측을 고려해야 합니다. 스레딩, 동기화 및 기타 타이밍 버그가 어려울 수 있습니다.

Direct3D 11과 함께 Direct3D 12 사용

단기적인 접근 방법으로 Direct3D 11 타이틀의 알려진 병목 상태를 해결할 수 있습니다. Direct3D 12 Interop 및/또는 D3D11On12 기술을 사용하여 이러한 두 API 버전이 함께 작동하도록 함으로써 이러한 문제를 해결할 수 있습니다. 이 방법을 사용하면 기존 Direct3D 11 그래픽 엔진에 필요한 변경 내용이 최소화됩니다. 그러나 성능 측면에서는 Direct3D 12 코드가 처리하는 병목 상태를 완화하는 수준 정도로만 개선됩니다.

Microsoft DirectX 12(및 그래픽 교육) 비디오

그래픽 개발자를 위한 고급 교육입니다. 이러한 비디오는 프레젠테이션 모드, DirectX 12로의 이식, 일반 래스터화, 그래픽 도구(Angle, Win2D) 및 이벤트(GDC, 빌드 등) 등의 항목을 다룹니다. DirectX 12의 기술 콘텐츠 앞에는 DirectX 12가 표시되어 있습니다. 여기에서 Direct3D 12 기능 팀이 직접 제공하는 팁 및 트릭을 확인할 수 있습니다. 최고의 게임을 만드는 데 필요한 최신 릴리스 및 도구를 사용할 수 있게 도와드리겠습니다.

결론

Direct3D 12에서는 그래픽 엔진 성능이 크게 개선되었습니다. 간편한 개발, 높은 수준의 구문 및 컴파일러 지원을 통해 이러한 성능 개선이 가능해졌습니다. 드라이버 지원 및 디버깅 편의성은 Direct3D 11 수준으로 유지됩니다.

Direct3D 12는 새로운 지평을 열었습니다. 호기심 많은 전문가라면 누구든지 이 제품에 대해 알아보고 즐겁게 작업할 수 있습니다.