DirectXTex:生成具有 HDR RGBA32f 纹理夹值到 1.0f 的 Mipmap
DirectXTex : generateMipmap with HDR RGBA32f texture clamp value to 1.0f
我正在尝试使用 DirectXTex 函数从 .exr HDR 图像生成 mip 映射链 DirectX::GenerateMipMaps()。
但结果所有像素都固定为 1.0f。
源图有部分像素高于30.0f,生成mimap后全部clamp到1.0。
这是一个认识问题?我错过了特定的标志?
大多数 DirectXTex 函数,包括 GenerateMipMaps,最初是为使用 Windows 操作系统的 Windows 成像组件 (WIC) 功能而编写的.这适用于许多情况,但是有很多 edge-cases 的纹理会导致问题。例如,WIC 的调整大小功能将始终使用每通道 8 位格式,因此将失去 HDR 范围,如您所见。
因此,DirectXTex 也有自定义过滤代码路径。通常这些是根据源格式自动选择的,但您可以提供过滤器标志 TEX_FILTER_FORCE_NON_WIC
以确保它使用自定义路径。
更新:这是选择 WIC 与 non-WIC 路径的逻辑错误。当使用 FANT/BOX 或 POINT 过滤 -AND- > 8pbc 格式时,它不应该使用始终使用 8bpc 格式的 WIC 位图标量。固定在 this commit.
这已在 May 2022 版本中修复。
我正在尝试使用 DirectXTex 函数从 .exr HDR 图像生成 mip 映射链 DirectX::GenerateMipMaps()。
但结果所有像素都固定为 1.0f。
源图有部分像素高于30.0f,生成mimap后全部clamp到1.0。 这是一个认识问题?我错过了特定的标志?
大多数 DirectXTex 函数,包括 GenerateMipMaps,最初是为使用 Windows 操作系统的 Windows 成像组件 (WIC) 功能而编写的.这适用于许多情况,但是有很多 edge-cases 的纹理会导致问题。例如,WIC 的调整大小功能将始终使用每通道 8 位格式,因此将失去 HDR 范围,如您所见。
因此,DirectXTex 也有自定义过滤代码路径。通常这些是根据源格式自动选择的,但您可以提供过滤器标志 TEX_FILTER_FORCE_NON_WIC
以确保它使用自定义路径。
更新:这是选择 WIC 与 non-WIC 路径的逻辑错误。当使用 FANT/BOX 或 POINT 过滤 -AND- > 8pbc 格式时,它不应该使用始终使用 8bpc 格式的 WIC 位图标量。固定在 this commit.
这已在 May 2022 版本中修复。