Nvidia texture tool exporter make bad DDS files

Hi!
Please tell me what I do wrong?
I use old NVTT for PS to converting my PNG to DDS and all fine. But recently, I saw a new version of NVTT and wanted to try it out. Now all textures that are saved with PS and NVTT do not open in any program. X-plane 11, Prepar3D v5, 3ds max, ac3d, and Photoshop cannot open them. In Photoshop, DDS is loaded with artifacts. I use NVTT for BC3 format (DXT5) and BC1 (DXT1 w/o Alpha). Tell me what is the problem, please?

Hi Oleg,

Thank you for asking this! For Photoshop, is it possible that the old version of the tools might still be installed (i.e. does D3D/DDS show up in the list of file formats in Photoshop’s Save As… dialog, or alternatively, is there a dds64.8bi file in Adobe/Adobe Photoshop 2020/Plug-ins/File Formats)? It looks like when both the old version and the new version are installed at the same time, Photoshop defaults to trying to load DDS files using the old version - but it has problems reading some of the DDS files with the DX10 header that the new version writes, and displays the image as totally black instead. (I believe the new version’s Photoshop plugin’s installer should check for this if it can.)

For AC3D, I’ve managed to confirm that it looks like it isn’t able to load DDS files with the DX10 extension in the header. While the old version always used the base DDS header (i.e. specifying pixel formats using bitmasks and FourCC codes), the new version always writes the DX10 header (which uses DXGI formats, which should ideally be easier for developers to work with and has a standard way to use high-quality formats such as BC7, but it looks like that may not be the case here). In other words, these (barring anything else weird going on, which could totally happen) are valid DDS files, but the program’s DDS reader doesn’t seem to implement that part of the specification!

Interestingly, with 3ds Max, it looks like the preview window can load the DDS file, but then connecting it to a material causes some part of the rendering engine to crash as of this writing. I’ll see if I can follow up with Autodesk about this.

The next version of the Texture Tools Exporter will most likely have an option to allow you to turn off the DX10 header for formats that can be stored in old-style DDS files; in the meantime, the latest version of the old Texture Tools Exporter is available at the bottom of the Texture Tools Exporter webpage. (I also have a somewhat fragile workaround for this that involves modifying the binary data of the DDS file, in case you want to hear it).

Hope this helps!

2 Likes

Thank you!
I like your solution about the optional dx10 header, this would be awesome! I like the options and interface of the new NVTT version and CUDA acceleration for converting. I will be waiting for the new version.

Thnks
Oleg

I just came here to say the same, found out today that our proprietary game engine doesn’t support it. If you do implement an option to save using the old header, please add it to the command line as well. Thanks!

Hi all,

We just released version 2020.1.3 of the Texture Tools Exporter today, which now tries to export to DX9-style DDS files whenever it can. This should make the files it exports much more compatible with games and applications that use older DDS readers. I’ve been able to confirm that it seems to fix things with a few older readers. Here are the technical details for those who are interested:

  • By default, any formats that can be exported using a DX9-style DDS header (with exceptions below) are exported using a DX9-style DDS header, while those that require a DX10-style DDS header use a DX10-style DDS header. However, if you’re using a format that can use either a DX9-style or DX10-style DDS header, you’ll see the “Use DXT10 Header” checkbox at the bottom of the left pane, that will allow you to switch between these two header formats. For instance, if you’re writing your own DDS reader for an engine, it might be easier for you to only have to support DX10-style DDS headers with a DXGI format.

  • As of this writing, all formats except for 8.8.8 BGR support DX10-style DDS headers, and all formats in the old exporter (including BC1-BC3n) support DX9-style DDS headers. BC4-BC7 only support DX10-style DDS headers (there seem to be unofficial FourCC codes for each of these formats, but we decided not to use them - if using DX10-style headers crashes old engines, then using undocumented FourCC codes seems even more likely to do so). 8.8.8 BGR is not a DXGI format (probably because its unusual 24bpp means that it gets converted to a 32bpp format on the device), so it’s the only one that we don’t support a DX10-style DDS header for.

  • In other words, with the exception of 8.8.8 BGR, whenever the “Use DXT10 Header” checkbox shows up, the format supports both DX9- and DX10-style headers, while if it doesn’t show up, then it only supports DX10-style headers.

  • The “Use DXT10 Header” checkbox can also be controlled from the command line using the new --dx10 option.

Hope this helps! For more information about the things added in 2020.1.3, please see the release notes at https://developer.nvidia.com/nvidia-texture-tools-exporter.

1 Like