Making BC7 Textures
Figuring out how to make good BC7 textures has enough pitfalls that notes need to be recorded for my future reference and for others. Priority is given to getting the notes written, not to organization. Feel free to make this page nicer so long as you don't lose any information. And if you have new findings, add them.
Contents
Intermediate formats
PNG is a popular format to transfer textures between programs. Unfortunately many FSO maps require transparent or nearly transparent sections of texture, and programs can often drop color information in these areas, destroying information FSO needs. TGA is a potential alternative format.
CompressonatorCLI
CompressonatorCLI is a tool that lets you have actual control over the BC7 options in detail. It also sucks at fully documenting that control. Clarifications I've needed to dig out go here.
Quality setting
-Quality <value> Sets quality of encoding for BC7
Digging into their example files yields a claim that 1.0 is max quality and 0.0 is the minimum. It also claims 1.0 is the default, but it probably wouldn't hurt to specify it anyway, just in case.
Mass conversion
The tool allows you to convert whole directories at once. Great. The way it says this works is wrong though.
the suggested syntax for doing patch conversions is ./source_dir/ ./dist_dir/ which doesn't do diddly. ./s ./d gets you a little closer, it actually finds the source files then, but it fails completely and silently at saving them. Except not actually, because while ./ is the working directory for the source, it's the drive root for the dest, so it's saving them in there even better I'm working in D:\compress\bin\CLI with a dc_in and a dc_out dir, and to get the conversion working properly I have to use this mess: .\dc_in D:\compress\bin\cli\dc_out\d\ this creates the dc_out\d directory, but puts everything in \dc_out now if I'm doing specific files, it works more or less as designed. .\dc_in\Sath_02.dds .\dc_out\Sath_02.tga does what it should
Mass convert to TGA
If bulk converting *from* DDS it's poorly documented how to specify a format to decode to. This is how I get it to decode TGA
-fd ARGB_8888 -ff DDS -fx TGA
The FF specifies that the extension of the source is going to be TGA, the fd and fx handle the destination.
Modemasks
The right settings here should improve quality. What the right settings are is TBD. References to check:
https://docs.microsoft.com/en-us/windows/win32/direct3d11/bc7-format-mode-reference
https://compressonator.readthedocs.io/en/latest/developer_sdk/cmp_core/index.html#mode-masks