We do a similar (but smaller) set of checks. But ours aren’t done at export time. The exporter spits out pretty much everything to an intermediate file (including textures as they appear in Max) which is then parsed by one of or several of a set of data pullers. It’s those that do any checking and clean up. With that setup it means that data that’s not valid for one type of object isn’t flagged for another where it’s fine. Our last game used instanced geometry for things like bushes and rocks. We made extensive use of non-uniform scaling to vary those so non-uniform scaling is fine for that puller on that data type. It isn’t valid for bones however, so we might check for that in the skinned character puller (I don’t think we do, but we could).
As far as possible we either fix up or handle unexpected data too and allow the artist to use it if we can. Rather than throwing an error when the user hasn’t bothered to assign a texture yet it just puts a tiny white one on there, if the user has assigned a checker texture to check tiling, it uses that rather than expecting to find a bitmap in the platform specific folder. If the user hasn’t made the platform specific version of any texture yet, it pulls it from the original Max exported one. If the user has left a live stack that has a patch modifier on a spline, then it exports the geometry as it appears in Max and so on. Anything that’s undesirable but not actually illegal doesn’t stop the export or conversion, but it logs it to the console and to a file for later checking. This means you can be pretty sloppy in the early iterations of work when you’re throwing stuff around trying out ideas. Which speeds up early development of scenes and so on. They’re very easy to check on target at a very early stage. And it also means you can export a load of things that you know aren’t going to be optimal without the exporter throwing an error every time.
I like this approach more than say the Nintendo exporter that throws a fit if you’ve got objects hidden in the scene that you didn’t want exporting and it can’t find the textures on them.
But it is easier to abuse. Although it logs errors and warnings, it doesn’t force you to do anything about them or read the log. More than once I’ve ignored the warnings that were telling me a platform specific texture wasn’t in the expected folder so it was going to use the high res, high colour version from the intermediate file, then wondered why the PS2 version slowed to a crawl.
We also need to include more error trapping. There’s a few things that currently break because they aren’t trapped properly. A closed spline for instance can be interpreted as a mesh, and therefore isn’t exported as a spline, so the tool expecting to find specific splines will crash. Haven’t found a nice solution to that one as we often use lofted splines as geometry (for scenery in racing games for instance here) and I like to keep them live to allow easy editing. Currently we can set the visibility flag to invisible on a closed spline and it will get exported as a spline, and visible if we want geometry. But it defaults to the geometry state so the above error happens quite often. But this setup hasn’t been used for the most recent game and may not be used again, so we haven’t bothered to fix it.