如果格式化BC3_UNORM纹理的分辨率倍数不是 4,该怎么办?



在此处输入图像描述

我有一个纹理,分辨率是95x90,格式是DXGI_format_BC3UNORM。我试图加载这个纹理,但在下面得到一个错误。

D3D11错误:ID3D11Device::CreateTexture2D:使用以下格式(0x4d,BC3_UNORM(创建的Texture2D在资源的维度上受到对齐限制。尺寸(宽度:95,高度:90(必须是(宽度:4,高度:4(的倍数。[状态创建错误#101:CREATETEXTURE2D_INVALIDDIMENSIONS]

我打开Painter应用程序并调整原始纹理的大小是没有意义的。有没有好的方法来修复这个错误?

+

如果我使用Visual Studio加载纹理,它的维度是4的倍数。

在此处输入图像描述

当我用DirectX Tex.加载纹理时,情况就不同了

auto hr = DirectX::CreateDDSTextureFromFile(Graphic::Device(), path.data(), &_texture, &_srv);

DirectX的正式规则是BC压缩图像的"顶级"图像宽度必须是4的倍数;高度,但mipmaps显然会导致非四分之一的值。还有一些特殊规则用于处理1x1、1x2、2x1和2x2像素的情况。

DirectXTex可以阻止压缩artibrary大小的图像以支持mipmaps。

我的texconv工具中有一个-fixbc4x4:开关,专门用于这种情况。它在没有解压缩/压缩周期的情况下"调整"最顶部的mip级别,但它会丢失任何mip级别。因此,如果你想重新生成它们,你最终会为此进行解压缩/压缩。

因此,简而言之,这将创建一个DDS纹理版本,其中只有最顶层四舍五入到4x4倍,而无需对块进行任何修改。

texconv -fixbc4x4 -m 1 inputdds.dds

这将在不修改块的情况下修复最顶层,解压缩图像,生成mips,然后重新压缩。

texconv -fixbc4x4 -m 0 inputdds.dds

相关内容

最新更新