비타Cpp

텍스처 형식(Texture Format) 본문

DirectX12/메모

텍스처 형식(Texture Format)

멍C 2021. 7. 9. 10:31

2차원 텍스처는 자료 원소들의 2차원 행렬이다.

2차원 텍스처의 용도 하나는 2차원 이미지 라료를 저장하는 것인데, 이때 텍스처의 각 원소는 픽셀 하나의 색상을 담는다. 그러나 이것이 텍스처의 유일한 용도는 아니다. 예를 들어 법선 매핑이라고 하는 고급 기법에서는 텍스처의 각 원소가 색상이 아니라 3차원 벡터를 담는다.

텍스처는 단순한 자료 배열인 것만은 아니다. 텍스처에 밉맵 수준(Mipmap Level)들이 존재할 수 있으며, GPU는 필터링, 다중표본화 등의 특별한 연산을 텍스처에 적용할 수 있다.더 나아가서, 텍스처에 아무 자료나 담을 수 있는 것은 아니다. 텍스처에는 특정 형식(Format)의 자료 원소들만 담을 수 있는데, 구체적인 형식은 DXGI_FORMAT이라는 열거형으로 지정한다.

 

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

DXGI_FORMAT_R16G16B16A16_UNORM: 각 원소는 [0,1] 구간으로 사상되는 16비트 성분 4개로 이루어진다.

DXGI_FORMAT_R32G32_UINT: 각 원소는 부호 없는 32비트 정수 성분 2개로 이루어진다.

 

여기서 R, G, B, A 는 각각 적(Red), 녹(Green), 청(Blue), 알파(Alpha) 성분을 뜻한다. 

그래픽에서 하나의 색상은 3원색인 R,G,B의 조합으로 만들어진다.(알파는 투명도)

그러나, 앞에서 말했듯 텍스처에 반드시 색상을 담아야 하는 것은 아니다.

예를 들어 DXGI_FORMAT_R32G32B32_FLOAT는 텍스처 원소 형식은 부동소수점 성분 3개로 구성되며, 따라서 좌표성분들이 부동소수점 수인 임의의 3차원 벡터를 담을 수 있다.

 

그리고 무형식(Typeless) 텍스처들도 있는데, 이런 텍스처는 일단 메모리만 확보해 두고 자료의 구체적인 해석 방식은 나중에 텍스처를 파이프라인에 묶을때 지정하는 용도로 쓰인다.

예를 들어 DXGI_FORMAT_R16G16B16A16_TYPELESS는 각16비트 성분의 구체적인 자료 형식은 지정하지 않는다.

 

마지막으로 DXGI_FORMAT 열거형은 정점 자료 형식과 색인 자료 형식을 서술할 때도 쓰인다.

'DirectX12 > 메모' 카테고리의 다른 글

다중 표본화의 이론  (0) 2021.07.18
Resource & Descriptor(자원과 서술자)  (0) 2021.07.18
깊이 버퍼링(Depth Buffer)  (0) 2021.07.09
SwapChain 과 페이지 전환  (0) 2021.07.09
COM(Component Object Model)  (0) 2021.07.09
Comments