During development, we'd noticed an overabundance of high-resolution, unoptimally-encoded textures throughout our tracks, which vastly exceeded our 'trimmable' texture memory budget. There were two problems at hand:
For some of the larger tracks (such as Le Mans) we didn't have enough memory unload the textures from the ZIP during loadtime. Even though this is simply an up-front, one-time cost (until the 'PV' part of PVSTex takes over), once the budget was overexceeded, the subsequent textures would not be loaded at all.
In certain track zones, the texture memory usage was too excessive, which caused PVSTex to run out of background textures to MIP-down, leaving it with no choice but to downsample textures in the foreground.
This was made significantly worse by our 'TexturePri' markup, which is the CSV table which PVSTex uses to prioritize certain textures/MIPs. PVSTex would use a significant chunk of its (inadequate) budget to maintain higher MIPs for prioritized textures, but any other textures would get absolutely butchered, all the way down to MIP N.
In our initial passes, we downsampled all of the textures which were assigned to unimportant material channels, such as MRAOs (unimportant in our renderer, at least). However, there were many assets for which certain textures were much more visually significant than others, resulting in an unpredictable, significant degredation in visual quality. Each of these passes was incredibly slow; we had to go through multiple UI menus to get to the texture, edit the related XML with a script, and kick off another track build.
It was incredibly slow to do these optimization passes. Typically, we would hand-edit around thirty assets and RTU them to a running game instance, and depending on the results, we would run a script to edit each texture's related XML, and then kick off a track build.
Hand-editing them was awful; for each asset we had to open the model, click through almost a dozen material keys, and for each material key with the relevant material channel/texture type, copy the texture path, open the Texture Editor, paste the texture path, open the texture, hand-edit the relevant texture properties, check out the texture ZIP in Perforce, open the texture in Photoshop, re-export the texture, and then click the 'RTU' button to see it in-game. To make matters worse, each step could take anywhere from four to forty seconds. Testing out a handful of assets in one zone could literally take hours.