NVIDIA Texture Tools Exporter 2023.3.0 / NVTT 3.2.2 Released

I’m happy to announce that NVIDIA Texture Tools Exporter 2023.3.0 and NVTT 3.2.2 have been released!

This post describes the new features, improvements, and bug fixes (relative to Exporter 2023.2 and NVTT 3.2.1) in the new version.

New Features and Improvements

  • Exporter: Added an Edge Pad (Solidify) effect, which smoothly fills semitransparent areas of images.

For instance, say you’ve baked a texture and you’d like to fill in the rest of the UV atlas. In the Effects pane, you can add the Edge Pad effect to do that for you!

The Edge Pad effect interface.

The Edge Pad effect also has an option to preserve the original alpha channel - only filling in the RGB channels. Here’s one thing it’s useful for: if you’re working with a renderer that doesn’t use premultiplied alpha, you might notice some glow-like artifacts around the edges of objects that use cutout alpha:

With Preserve Alpha checked, Edge Pad can help hide these artifacts while preserving the alpha mask:

  • NVTT: Improved BC1-BC3 and BC1a compression quality when using nvtt::Quality::Production or nvtt::Quality::Highest. At these compression levels, the BC1-BC3 and BC1a compressors now explore more jittering options, which helps with some kinds of blocks.

  • nvcompress now has options for --max-mip-count (the maximum number of mips to generate, including the base mip), --min-mip-size (avoid generating mips whose width or height is smaller than this number - for instance, if your renderer doesn’t support mips smaller than 4x4, you can add --min-mip-size 4), and --no-mip-gamma-correct (mipmap without gamma correction; useful for images that are not color textures).

  • nvcompress now uses GPU acceleration for images over 6.25 megapixels.

  • Exporter: Improved power usage by reducing window draw frequency when idle.

  • Exporter: Added read and write support for the RXGB BC3 normal map format. (Thanks to Developer Forums user y2keeth for this feature request.)

  • Exporter: The DDS reader can now successfully read some images where DDS_MIPMAPCOUNT is missing from dwFlags. (Thank you to Christophe Kulesza and Alexandre Sambo.)

Bug Fixes

  • BC7, ASTC: Fixes a bug where images marked opaque would use a transparent compressor, and images marked transparent would use an opaque compressor. (Thanks to GitHub user liberty752 for reporting this issue.)

  • Exporter: File paths are now stored using Unicode instead of ANSI characters.

This fixes a bug where paths with non-ANSI characters would fail to open, and error windows would print mojibake error messages. Thanks to Developer Forums user yemaowuxin for reporting this issue.

  • Exporter: Fixed a crash when reading bitmasked DDS files with dwRGBBitCount set to 0 or with subresources between 1 and 7 bytes long.

Thanks to Oxicid on GitHub for finding this issue. As a result of this bug, I’ve done some additional fuzz-testing on the DDS reader, and now have checks against some other resource exhaustion issues (where a DDS image header says it contains many more bytes of image data than can be stored in its file.)

  • Exporter: Fixed a bug where image processing would fail or stall on GPUs with compute capability less than 5.0. (Thanks to Developer Forums user namennayo for reporting this issue.)

  • Exporter: Improved DDS reader support for uncommon modes such as D3DFMT_CxV8U8 and DDPF_BUMPDUDV.

  • Exporter: Normal textures now have the DDPF_NORMAL flag set.

This flag is not in the DDS specification, but some readers such as DirectXTex support reading it.

  • Exporter: Volume textures now have the DDSCAPS2_VOLUME flag set. (Thanks to Developer Forums user oilking for reporting this issue.)

  • Exporter: The NVIDIA DDS Read Properties window can now be closed. (Thanks to Developer Forums user Code57s for reporting this issue.)

  • Exporter: Invalid --serialized-effects-v1 strings no longer cause crashes.

This is an option that only appears inside preset files and stores effect stacks in a numerical format. I hope to replace this with a human-readable effect stack option in a future version.

  • Exporter: Fixed a bug where --mip-filter-width would always be written to settings, even when Override Filter Width was unchecked.

  • Exporter: Fixed a bug where atlas and cubemap settings would be ignored when reading a command line or preset.

Thanks to Developer Forums user Code57s for reporting these last two issues.

  • Exporter: Fixed a race condition where if several dozen nvtt_export instances were started at the same time, they could mistake each other for the installer and refuse to launch.

General Notes

  • When decompressing DDS and KTX images to other file formats, nvtt_export now exports atlases with mipmaps by default, like this:

To turn this off, you can add the --no-mips option (for instance, nvtt_export -i input.dds -o output.png --no-mips):

This also gives a way to generate a mipmap atlas for further editing from a single image:

nvtt_export input.png -f bgra8 -o bgra8.dds
nvtt_export bgra8.dds -o output-with-mips.png
  • nvbatchcompress’ functionality has been merged into nvcompress: nvcompress can now compress batches of images at once, and has all other command-line options… For backwards compatibility, nvbatchcompress.exe has been replaced by nvbatchcompress.bat, which forwards its arguments to nvcompress.

Many of the feature requests and bug reports came from this forum — thank you all for the excellent feedback so far! If you spot any bugs in the new version, please don’t hesitate to contact us at texturetools@nvidia.com or in this forum. Thanks again!

I have 2024.1.1 Nvidia texture tools
And solidify works really strange

I have sprite
–cannot put more than one image–
With such alpha
–cannot put more than one image–

And when we going to enable solidify effect, it creates darker borders

In MIPs shuch solidify looks even more strange (kaiser or mitchel filtration make artifacts even more visible)
–cannot put more than one image–

Initial diffuse (before we trying to apply solidify effect)
Sprite have no any dark colors on edges because we made old-school solidify, manually in photoshop.

Hi @legasova! This might be a bug in the Solidify effect shader. Thanks for reporting this – I’ll look into it!

1 Like