Game/MMD
Color bug with DirectX Tool Kit
newpolaris
2017. 10. 31. 18:15
PNG 파일인데 색이 잘못 읽힌다
그림판 정도로 다시 읽어서 저장하면 정상 색이 나온다
왠만한 뷰어도 다 정상으로 나온다
이런 경우가 2건인데 모두 일본 MMD 에서 쓰이는 파일이다.
녹색이 되버린 머리
표시되어야 할 색
https://stackoverflow.com/questions/39634189/load-texture-as-rgb-not-srgb-in-directx11-using-wic
이미지 자체에 gamma가 설정되어있는지 확인해보았다.
The WIC metadata for a PNG file contains the sRGB chunk (/sRGB/RenderingIntent is true)
if (memcmp(&containerFormat, &GUID_ContainerFormatPng, sizeof(GUID)) == 0)
{
// Check for sRGB chunk
if (SUCCEEDED(metareader->GetMetadataByName(L"/sRGB/RenderingIntent", &value)) && value.vt == VT_UI1)
{
sRGB = true;
}
}
흠. 탄다.
결론을 말하면, 이미지 자체에 sRGB 가 표시되어있는 경우 DirectX Tool Kit은 gamma 2.2를 적용하여 로드한다.
근대 linear color 를 안쓰거나, 나처럼 기존의 다른 이미지들 때문에 끈 경우
진해져서 망한다.
sRGB 마크를 못보고 diffuse 색과 color mapping을 얼마나 본건지;
UINT loadFlag = sRGB ? DirectX::WIC_LOADER_FORCE_SRGB : DirectX::WIC_LOADER_DEFAULT;
위에걸 아래와 같이 무시하게 바꾸면 된다.
UINT loadFlag = sRGB ? DirectX::WIC_LOADER_FORCE_SRGB : DirectX::WIC_LOADER_IGNORE_SRGB;