상세 컨텐츠

본문 제목

DirectX 11 ( 개요 )

DirectX

by 부레두 2024. 6. 7. 19:33

본문

개요

💡 응용 프로그램에서 GPU를 제어하고 프로그래밍하는 데 쓰이는 저수준 그래픽 AP
      → 프로그램과 하드웨어 사이 Direct3D라는 간접층과 드라이버가 명령들을 GPU가 이해하는 기계어로 번역함

주요 기술

1. COM ( Component Object Model )

💡 DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술
  • COM 인터페이스를 가리키는 포인터를 특별한 함수들을 이용, 메서드를 얻는 방법만 기용
  • new로 생성할 필요 없지만, delete로 삭제하는 것이 아니라 인터페이스의 Release를 호출해야함
    • IUnKnown이라는 기능을 상속해 Release를 제공, 참조카운팅 방식을 사용
  • ComPtr이라는 스마트포인터를 사용
    • Get, GetAddressOf, Reset

2. Swap Chain과 페이지 전환

💡 이중 버퍼링

전면과 후면 버퍼, 2가지 버퍼를 이용해 표시할 다음 프레임을 후면버퍼에 그려 완성 후 전환(포인터만 맞바꿈)해 ‘사용자에게 완성된 프레임만 보여주는 기법’ → presenting
  • 두 버퍼는 하나의 Swap Chain을 형성
    • IDXGISwapChain 인터페이스, 텍스처 2개와 크기 변경, presenting 메서드를 제공

스왑 체인의 예시 이미지

 


3. 깊이 버퍼링

이미지 자료를 담지 않는 텍스처의 한 예

  • 각 픽셀의 깊이 정보를 저장
  • 0~1까지 0은 관찰자와 가장 가깝고 1은 최대한 먼 픽셀에 해당
  • 후면 버퍼의 해상도의 원소 숫자만큼 대응됨

  • 과정
    1. 렌더링되는 각 픽셀의 깊이 값을 계산해 깊이 판정을 수행, 픽셀들의 깊이들을 비교
    2. 판정을 통해 관찰자와 가장 가까운 픽셀들 부터 후면 버퍼에 기록

4. Texture Resource View

텍스처를 렌더 대상으로 묶는 것 / 쉐이더 자원으로서 묶는 것
두 용도의 텍스처를 생성할 때 임의의 플래그를 사용
D3D11_BIND_RENDER_TARGET / D3D11_BIND_SHADER_RESOURCE

  • DirectX3D에게 자원의 사용 방식을 전달
  • 생성 시점에서 무형식을 지정한 자원 형식의 구체적 형식을 결정
    • 텍스처 원소를 파이프라인 단계에선 부동소수점으로 사용하고 다른 단계에선 정수로서 사용하는 것이 가능함
  • Bind 플래그 없이 생성한 특정 뷰는 에러를 야기

5. 다중 표본화 이론

앨리어싱(aliasing) 제거를 위한 기법으로 해상도를 키워 계단 현상을 없애는 대신 사용

  • 초과표본화 (supersampling)
    → 비용이 큼
    → 후면 버퍼와 깊이 버퍼를 화면 해상도보다 4배 크게 잡아 화면에 presenting 할때 본래 크기로 환원
  • 다중표본화 (multisampling)
    → 일부 계산 결과를 부분픽셀들 사이에서 공유하기 때문에 비용이 적음
    → 절충적 앨리어싱 제거 기법

똑같이 4개로 늘리지만, 주변 4개의 픽셀값의 평균을 하나로 저장해 전달

'DirectX' 카테고리의 다른 글

Grid 그리기  (0) 2024.06.24
정점, 인덱스를 이용한 렌더링  (0) 2024.06.19
벡터 대수  (0) 2024.06.08
랜더링 파이프 라인 개요  (0) 2024.06.08
장치 초기화  (0) 2024.06.07

관련글 더보기