본문 바로가기
그래픽/DirectX

[DirectX] DirectX 기본이론

by jod2 2023. 2. 4.
반응형

Directx11 특징

  1. 능력 집합(capability set) 전체를 지원
    • 현재 하드웨어가 그 기능을 지원하는지를 먼저 점검하지 않음

    • Direct3D 11에서는 더 이상 하드웨어 기능 점검이 필요하지 않다. 이제는,그래픽 하드웨어가 Direct3D 11 대응 장치이려면 반드시 Direct3D 11 능력 집합 전체를 지원해야 한다는 엄격한 요구조건이 있기 때문
    • 기능점검 순서
      •  
  2.  COM (Component Object Model)
    • DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술이다
    • C++ 클래스로 간주하고 사용
      • (COM 객체들이자신만의고유한방식으로메 모리를 관리하기 때문에`
      • COM 인터페이스는 C++ new 키워드로 생성하지 않는다.
      • delete로삭 제하는 것이 아니라 그 인터페이스의 Release 메서드를 호출
D3D_FEATURE LEVEL featureLevels[4] = {
	D3D__FEATURE__LEVEL__11__0, / / 우선D3D11지원여부를점검
    D3D__FEATURE__LEVEL__10__1, //그 다음으로D3D10.1지원여부를점검
    D3D__FEATURE__LEVEL__10 // 그런 다음 D3D 10 지원 여부를 점검
    D3D__FEATURE__LEVEL__9__3 // 마지막으로 D3D 9.3 지원 여부를 점검
}

 

텍스처 및 자료 자원 형식

텍스처에는 특정 형식(format)을 따르는 자료만 담을 수 있는데,구체적인 형식 은 DXGIFORMAT이라는 열거형으로 지정

ex) DXGI_FORMAT_R32G32B32_FLOAT:각 원소는 32비트 부동소수점 성분 세 개로 이루어진다.

 

교환 사슬과 페이지 전환 (이중 버퍼링)

버퍼링 을 구현할 때에는 하드웨어로 두 개의 텍스처 버퍼를 관리

1. 하나는 현재 모니터에 표 시되는 이미지 자료를 담는 전면 버퍼(front buffer)

2. 애니메이션이 낌벅대는 현상을 방지하기 위해 애니메이션의 한 프레임 전체를 화면 바깥의 텍스처에 그린 후면 버퍼(back buffer)

후면 버퍼를 전면 버퍼와 교환해서 화면에 표시되게 하는 것을 제시(presenting)라고 부른다

 

깊이 버퍼링

한 물체의 픽셀들이 다른 물체보다 앞에 있는지 판정하기 위해,Direct3D는 깊이 버퍼링 또는 Z-버퍼링이라는 기법을 사용

 

다중표본화의 이론

확대시 계단 현상이라는 앨리어싱 효과를 해결하기 위한 이론

앨리어싱 제거(antialiasing)를 위한 기법들이 존재

1. 초과표본화(supersampling)

  - 후면 버퍼와 깊이 버퍼를 화면 해상도보다 4(가로, 세로 두 배씩) 크게 잡고 화면에 표시할때 원래 크기의 버퍼로 환원 (resolving)

    - 단점) 초과표본화는 픽셀 처리량과 메모리 소비량이 네 배라서 비용이 크다

 

많은 리소스의 단점을 보안하기 위해

 

2. Direct3D는 다중표본화 (multisampling)라는 절충적인 앨리어싱 제거 기법을 지원

   - 이미지 색상을 각 부분픽셀마다 계산 하는 것이 아니라 픽셀당 한 번만 계산하고(픽셀의 중심에서),그 색상과 부분픽셀들의 가시 성(이를 위해 부분픽셀당 깊이.스텐실 판정이 일어남)과 포괄도(부분픽셀을 다각형이 어느 정도나 덮고 있는지를 뜻하는 값)를 이용해서 최종 색상을 결정

 

결론

- 이미지 색상을 계산하는 것은 그래픽 파이프라인에서 가장 비싼 단계 중 하나이기 때문에 초과표본화는 비용이 절감

- 초과표본화는기술적으로는 더 정확하고 텍스처와 셰이더 앨리어싱을 처리하는 반면 다중표본화는 그렇지 못하다.

 

반응형

댓글