2012-11-21 2 views
2

DXGI_FORMAT의 공식 문서에서는 _SRGB 열거 postfix가있는 형식 만 sRGB 색 공간에 있음을 알 수 있습니다. 이 접미사가없는 다른 형식이 모두 선형 공간에 있다고 생각했습니다. 하지만 DirectXTex 라이브러리에서 형식 변환 기능의 아주 이상한 동작을 발견했습니다. (http://directxtex.codeplex.com/에서 다운로드 할 수 있습니다.)DXGI_FORMAT의 정확한 색상 공간은 무엇입니까?

처음 엔 NVIDIA Photoshop DDS 플러그인을 사용하여 텍스처 파일을 DXGI_FORMAT_R32G32B32A32_FLOAT로 내 보냅니다. 그런 다음이 파일을 LoadFromDDSFile() 함수로로드하고 Convert() 함수를 사용하여 형식을 DXGI_FORMAT_R16G16B16A16_UNORM으로 변환합니다. (이 두 기능은 모두 DirectXTex 라이브러리에서 제공합니다.)

짐작 하시겠습니까? 이미지를 DXGI_FORMAT_R16G16B16A16_UNORM으로 변환하면 모든 픽셀의 밝기도 변경되어 전체 이미지가 이전보다 밝아집니다.

이미지가 DXGI_FORMAT_R16G16B16A16_UNORM 형식으로 변환 된 후 수동으로 픽셀 값을 sRGB 공간에서 선형 공간으로 변환하는 경우 결과 픽셀 값은 입력과 동일합니다. 따라서 DirectXTex 라이브러리는 DXGI_FORMAT_R32G32B32A32_FLOAT를 선형 색상 공간의 형식으로 처리하고 DXGI_FORMAT_R16G16B16A16_UNORM을 sRGB 색상 공간의 형식으로 처리 한 다음 선형 공간에서 sRGB 공간으로 변환하는 색상 공간을 처리했다고 가정합니다. (Convert() 함수가 색상 공간을 변환하는 이유를 알아 내려했지만 WIC에서 구현되었으므로 소스 코드가 없습니다.)

DirectXTex 라이브러리에 버그가 있습니까? 또는 DXGI_FORMATs의 실제 표준입니까? 일부 특수 DXGI_FORMAT에 다른 색상 공간이있는 경우, 그 색상 스펙을 찾을 수있는 곳을 말해주십시오.

도움이 될 것입니다. 감사!

답변

1

일반적으로 float RGB 값은 선형이며 정수 RGB 값은 감마 압축됩니다. 감마에 대한 이유는 감마가 지각 적으로 필요한 곳에 더 많은 비트를 사용하기 때문이며 float은 에 걸쳐 충분한 (과도한) 비트 수가 이미 의사 로그로 인코딩되어 있기 때문에 감마 압축 플로트에는 특별한 이점이 없습니다 (멱지수). (source)

DXGI에서 * _SRGB가 아닌 정수 RGB 텍스처의 색 공간은 sRGB가 아니며 드라이버에 따라 다르며 일반적으로 고정 감마가 0.5입니다.

DirectXTex 라이브러리가 올바르게 작동하고있는 것처럼 보입니다. 그러나 DDS 파일을 캡처하고 표시하는 데 사용하는 소프트웨어의 동작에 의존하고 있다는 점에 유의하십시오. DirectXTex에 대한 더 나은 테스트는 단순히 라이브러리에서 왕복 변환 float-> int-> float을 수행하고 결과를 시각적으로보다는 숫자로 비교하는 것입니다.

+0

답변 해 주셔서 감사합니다. 정말 도움이되었습니다. 하지만 여전히 한 가지 질문이 있습니다. 정수 RGB 값은 일반적으로 감마 압축이며 _SRGB를 사용하는 DXGI 형식은 고정 감마 0.5입니다. 그럼이 둘의 차이점은 무엇입니까? 그들의 감마가 평등합니까? 또는 _SRGB는 하드웨어로 값을 변환해야한다는 의미일까요? 고맙습니다! – SeaStar

+0

안녕하세요 SeaStar, sRGB는 더 복잡한 형식의 감마입니다.이 숫자는 하나의 숫자가 아닙니다. DXGI 형식은 정수이지만 _SRGB 접미어가없는 고정 된 감마를 가지고 있다고 말하면서 * 아마 * 0.5입니다. _SRGB 접미사가있는 형식은 sRGB가되어야하므로 복잡한 감마가 있습니다. More info : "다른 대부분의 RGB 색상 공간과 달리 sRGB 감마는 단일 숫자 값으로 표현 될 수 없습니다." http://en.wikipedia.org/wiki/SRGB 희망이 도움이됩니다! –

+0

이전 주석에 잘못된 단어를 입력했는데 "_SRGB로 된 DXGI 형식은 ** 고정 감마가 아니라 **."라고 말하고 싶습니다. 그리고 오늘 더 많은 연구를했습니다. – SeaStar