Direct3D 11 기능

프로그래밍 가이드에는 Direct3D 11 프로그래밍 가능 파이프라인을 사용하여 게임 및 과학 및 데스크톱 애플리케이션에 대한 실시간 3D 그래픽을 만드는 방법에 대한 정보가 포함되어 있습니다.

컴퓨팅 셰이더

컴퓨팅 셰이더는 범용 데이터 병렬 처리를 위해 설계된 프로그래밍 가능한 셰이더입니다. 즉, 컴퓨팅 셰이더를 사용하면 GPU를 범용 병렬 프로세서로 사용할 수 있습니다. 컴퓨팅 셰이더는 입력 및 출력에 액세스하는 방식으로 프로그래밍 가능한 다른 파이프라인 셰이더(예: 꼭짓점, 픽셀, 기하 도형)와 비슷합니다. 컴퓨팅 셰이더 기술을 DirectCompute 기술이라고도 합니다. 컴퓨팅 셰이더는 Direct3D에 통합되며 Direct3D 디바이스를 통해 액세스할 수 있습니다. Direct3D 디바이스를 사용하여 그래픽 셰이더와 메모리 리소스를 직접 공유할 수 있습니다. 그러나 다른 셰이더 단계에 직접 연결되지는 않습니다.

컴퓨팅 셰이더는 API(및 관련 소프트웨어 스택)와 CPU 간에 전환하는 비용이 너무 많은 오버헤드를 소비할 때 대화형 속도로 계산을 수행하는 대량 시장 애플리케이션을 위해 설계되었습니다.

컴퓨팅 셰이더에는 고유한 상태 집합이 있습니다. 컴퓨팅 셰이더에 꼭짓점 셰이더처럼 입력 레코드 또는 출력 레코드(예: 픽셀 셰이더처럼)에 대한 강제 1-1 매핑이 반드시 있는 것은 아닙니다. 그래픽 셰이더의 일부 기능은 지원되지만 다른 기능은 제거되어 새 컴퓨팅 셰이더 관련 기능을 추가할 수 있습니다.

컴퓨팅 셰이더 관련 기능을 지원하기 위해 이제 읽기/쓰기 버퍼, 텍스처 및 구조화된 버퍼와 같은 몇 가지 새로운 리소스 유형을 사용할 수 있습니다.

자세한 내용은 컴퓨팅 셰이더 개요 를 참조하세요.

동적 셰이더 연결

렌더링 시스템은 셰이더 코드를 최적화하는 기회를 제공하면서 셰이더를 관리할 때 상당한 복잡성을 처리해야 합니다. 셰이더는 다양한 하드웨어 구성에서 렌더링된 장면에서 다양한 재질을 지원해야 하기 때문에 이는 훨씬 더 큰 과제가 됩니다. 이 문제를 해결하기 위해 셰이더 개발자는 종종 두 가지 일반적인 방법 중 하나에 의존했습니다. 다양한 장면 항목에서 사용할 수 있는 완전한 기능을 갖춘 범용 셰이더를 만들었으며, 이는 유연성을 위해 성능을 저하시키거나 필요한 각 기하 도형 스트림, 재질 유형 또는 조명 형식 조합에 대해 개별 셰이더를 만들었습니다.

이러한 대규모 범용 셰이더는 동일한 셰이더를 다른 전처리기 정의로 다시 컴파일하여 이 문제를 처리하고, 후자의 메서드는 무차별 암호 대입 개발자 능력을 사용하여 동일한 결과를 달성합니다. 셰이더 순열 폭발은 게임 및 자산 파이프라인 내에서 수천 개의 다른 셰이더 순열을 관리해야 하는 개발자에게 종종 문제가 되었습니다.

Direct3D 11 및 셰이더 모델 5는 개체 지향 언어 구문을 도입하고 개발자가 셰이더를 프로그래밍하는 데 도움이 되도록 셰이더 연결의 런타임 지원을 제공합니다.

자세한 내용은 동적 연결을 참조하세요.

다중 스레딩

장면 그래프 순회, 개체 정렬 및 물리학 시뮬레이션과 같은 비용이 많이 드는 작업으로 인해 많은 그래픽 애플리케이션이 CPU에 바인딩됩니다. 멀티코어 시스템을 점점 더 사용할 수 있게 되면서 Direct3D 11은 다중 스레딩 지원을 개선하여 여러 CPU 스레드와 D3D11 그래픽 API 간의 효율적인 상호 작용을 가능하게 했습니다.

Direct3D 11을 사용하면 다음 기능을 통해 다중 스레딩을 지원할 수 있습니다.

  • 이제 동시 개체가 별도의 스레드에서 만들어집니다. 개체를 자유 스레드로 만드는 진입점 함수를 사용하면 많은 스레드에서 동시에 개체를 만들 수 있습니다. 예를 들어 애플리케이션은 이제 셰이더를 컴파일하거나 다른 스레드에서 렌더링하는 동안 한 스레드에 텍스처를 로드할 수 있습니다.
  • 명령 목록은 여러 스레드에서 만들 수 있습니다. 명령 목록은 기록된 그래픽 명령 시퀀스입니다. Direct3D 11을 사용하면 여러 CPU 스레드에서 명령 목록을 만들 수 있으며, 이를 통해 장면 데이터베이스의 병렬 통과 또는 여러 스레드에서 물리 처리를 수행할 수 있습니다. 이렇게 하면 기본 렌더링 스레드가 명령 버퍼를 하드웨어로 디스패치할 수 있습니다.

자세한 내용은 다중 스레딩을 참조하세요.

공간 분할

테셀레이션을 사용하여 다양한 수준의 세부 정보로 단일 모델을 렌더링할 수 있습니다. 이 방법은 장면에 필요한 세부 정보 수준에 따라 보다 기하학적으로 정확한 모델을 생성합니다. 세부 정보 수준이 낮은 기하 도형 모델을 허용하는 장면에서 공간 분할을 사용하여 렌더링 중에 사용되는 메모리 대역폭에 대한 수요를 줄입니다.

Direct3D에서 테셀레이션은 거친(덜 자세한) 입력 패치에서 더 부드러운 곡선 표면을 계산하기 위해 GPU에 구현됩니다. 각 (쿼드 또는 삼각형) 패치 얼굴은 원하는 표면을 더 잘 근사하게 하는 더 작은 삼각형 얼굴로 세분화됩니다.

그래픽 파이프라인에서 테셀레이션을 구현하는 방법에 대한 자세한 내용은 테셀레이션 개요를 참조하세요.

전체 기능 목록

Direct3D 11의 전체 기능 목록입니다.

  • 디바이스를 만들 때 기능 수준을 지정하여 하위 하드웨어에서 Direct3D 11을 실행할 수 있습니다.

  • 다음 셰이더 유형을 사용하여 테셀레이션( 테셀레이션 개요 참조)을 수행할 수 있습니다.

    • 헐 셰이더
    • 도메인 셰이더
  • Direct3D 11은 다중 스레딩을 지원합니다( 다중 스레딩 참조).

    • 다중 스레드 리소스/셰이더/개체 만들기
    • 다중 스레드 표시 목록 만들기
  • Direct3D 11은 다음 기능을 사용하여 셰이더를 확장합니다( 셰이더 모델 5 참조).

    • 주소 지정 가능한 리소스 - 텍스처, 상수 버퍼 및 샘플러

    • 읽기/쓰기 버퍼 및 텍스처와 같은 추가 리소스 종류(새 리소스 종류 참조).

    • 서브루틴

    • 컴퓨팅 셰이더( 컴퓨팅 셰이더 개요 참조) - 여러 소프트웨어 스레드 또는 스레드 그룹 간에 문제 공간을 나누고 셰이더 레지스터 간에 데이터를 공유하여 셰이더에 입력하는 데 필요한 데이터의 양을 크게 줄여 계산 속도를 높일 수 있는 셰이더입니다. 컴퓨팅 셰이더가 크게 개선할 수 있는 알고리즘에는 사후 처리, 애니메이션, 물리학 및 인공 지능이 포함됩니다.

    • 기하 도형 셰이더( 기하 도형 셰이더 기능 참조)

      • 인스턴싱 - 기하 도형 셰이더가 최대 1024개의 꼭짓점 또는 최대 1024개의 인스턴스와 꼭짓점 조합을 출력할 수 있도록 허용합니다(각각 최대 32개의 꼭짓점 인스턴스 32개).
    • 픽셀 셰이더

      • PS 입력으로 적용

      • 입력의 프로그래밍 가능한 보간 - 픽셀 셰이더는 다중 샘플 그리드의 모든 위치에서 픽셀 내의 특성을 평가할 수 있습니다.

      • 특성의 중심 샘플링은 다음 규칙을 준수해야 합니다.

        • 기본 형식의 모든 샘플이 적용되는 경우 특성은 샘플 패턴에 픽셀 중앙에 샘플 위치가 있는지 여부에 관계없이 픽셀 중심에서 평가됩니다.

        • 그렇지 않으면 특성은 첫 번째 검사된 샘플, 즉 모든 샘플 인덱스 중에서 인덱스가 가장 낮은 샘플에서 평가됩니다. 이 경우 샘플 적용 범위는 검사 및 샘플 마스크 래스터라이저 상태에 논리적 AND 연산을 적용한 후 결정됩니다.

        • 2x2 픽셀 스탬프를 채우기 위해 기본 형식의 범위에서 실행되는 도우미 픽셀과 같이 샘플이 적용되지 않는 경우 특성은 다음 방법 중 하나로 평가됩니다.

          • sample-mask 래스터라이저 상태가 픽셀에 있는 샘플의 하위 집합인 경우 sample-mask 래스터라이저 상태가 적용되는 첫 번째 샘플은 평가 지점입니다.
          • 그렇지 않으면 전체 샘플 마스크 조건에서 픽셀 중심이 평가 지점입니다.
  • Direct3D 11은 다음 기능으로 텍스처를 확장합니다(텍스처 개요 참조).

    • Gather4

      • 다중 구성 요소 텍스처 지원 - 로드할 채널 지정
      • 프로그래밍 가능한 오프셋 지원
    • 스트리밍

      • WDDM 미리 로드를 제한하는 텍스처 클램프
    • 16K 텍스처 제한

    • 텍스처 필터링에 8비트 하위 텍스처 및 하위 밉 정밀도 필요

    • 새로운 텍스처 압축 형식(1개의 새로운 LDR 형식 및 1개의 새로운 HDR 형식)

  • Direct3D 11은 보수적 oDepth를 지원합니다. 이 알고리즘을 사용하면 픽셀 셰이더가 픽셀 셰이더의 픽셀별 깊이 값을 래스터라이저의 값과 비교할 수 있습니다. 결과는 픽셀 셰이더에서 oDepth를 출력하는 기능을 유지하면서 초기 깊이 컬링 작업을 가능하게 합니다.

  • Direct3D 11은 대용량 메모리를 지원합니다.

    • 리소스 4GB 허용 >
    • 리소스 인덱스를 32비트로 유지하지만 리소스는 더 큽니다.
  • Direct3D 11은 스트림 출력 향상을 지원합니다.

    • 주소 지정 가능한 스트림 출력
    • 스트림 출력 수를 4로 늘림
    • 모든 스트림 출력 버퍼를 다중 요소로 변경
  • Direct3D 11은 셰이더 모델 5를 지원합니다( 셰이더 모델 5 참조).

    • 비정상이 있는 Doubles
    • 비트 개수 설정 명령
    • 첫 번째 비트 집합 명령 찾기
    • 캐리/오버플로 처리
    • FFT에 대한 비트 반전 지침
    • 조건부 스왑 내장
    • 버퍼의 Resinfo
    • 정밀도 감소 상호
    • 셰이더 변환 지침 - fp16에서 fp32로, 그 반대의 경우도 마찬가지입니다.
    • 구조적 요소를 포함하는 새로운 유형의 버퍼인 구조적 버퍼입니다.
  • Direct3D 11은 읽기 전용 깊이 또는 스텐실 보기를 지원합니다.

    • 읽기 전용인 부분에 대한 쓰기를 사용하지 않도록 설정하고, 텍스처를 입력으로 사용하고 깊이 컬링을 허용합니다.
  • Direct3D 11은 간접 그리기를 지원합니다. Direct3D 10은 콘텐츠를 가져와서(GPU에서) 렌더링하는 DrawAuto를 구현합니다. Direct3D 11은 DrawInstanced 및 DrawIndexedInstanced를 사용하여 컴퓨팅 셰이더에서 호출할 수 있도록 DrawAuto를 일반화합니다.

  • Direct3D 11은 기타 기능을 지원합니다.

    • 부동 소수점 뷰포트
    • 리소스당 Mipmap 클램핑
    • 깊이 바이어스 - 이 알고리즘은 래스터라이저 상태를 사용하여 깊이 바이어스의 동작을 업데이트합니다. 결과는 계산된 바이어스가 NaN일 수 있는 시나리오를 제거합니다.
    • 리소스 제한 - 리소스 인덱스는 여전히 = 32비트여야 <하지만 리소스는 4GB보다 클 수 있습니다.
    • 래스터라이저 정밀도
    • MSAA 요구 사항
    • 카운터 감소
    • 1비트 형식 및 텍스트 필터 제거됨

이전 릴리스에 추가된 기능

이전 릴리스에 추가된 기능 목록은 다음 topics 참조하세요.

Direct3D 11의 새로운 기능