Wednesday, February 20, 2013

Why retarget missing bitmaps in 3ds Max?

I was just reading a blog post by Nick Covington about retargeting missing bitmaps in 3ds Max scenes. He has a perfectly clever idea for doing so, but I wondered why I've never needed to write something similar for my users. Or rather, why so many people feel that bitmap retargeting is necessary?

3ds Max has an "External File Paths" feature found under Customize/Configure User Paths. It allows you to list folders in which bitmaps can be found on your system, regardless of where they were when first assigned. For instance, if you load a Max scene containing a reference to "C:\my_killer_art\foo.tga", but that file or folder doesn't exist on your PC, it will automatically look for "foo.tga" in each of the External File folders until it's found.

It also works for shader files. As long as you have paths in that list that contain all bitmaps your scenes could possibly use, you'll never see another "missing files" error again.

So am I missing something? Do people just prefer to retarget in the scenes themselves, rather than maintain that list of external file folders? I don't, but mileage might vary.

Admittedly, one limitation of that external file paths is that they don't automatically recurse into subdirectories. If you have a folder below one listed there, it will not look in that folder, it needs to be listed explicitly. Rather dumb.

4 comments:

James Clarke said...

AFAIK, that setting isn't passed around with the file, so submit your newly "User Pathed" scene to your renderfarm and you're just going to get the same errors all over again, unles you go to those machines and set the search paths, or distribute that settings file somehow.

Also, that "feature" of automatically searching paths for missing files, has caused me headaches in past taking files forever to open because it's searching so many paths. I seem to recall seeing bugs filed on it, asking an option to toggle that ability off.

It's an age old automatic vs. manual discussion, where anytime something automatic happens, that means less user control. What if I have two different versions of a texture in two subdirectories, but they have the same filename? If both directories are in search paths, it could return one or the other, without me picking which one I want to use. An extreme example I suppose, but just a case where I'd rather be in control of my mapping and know where things are, versus strange goings on behind the scene that I have to track down come rendertime.

Adam Pletcher said...

@James
Thanks for the thoughts.

Yes, the user paths stay with the user/PC not the scene. Still I think many people are under the impression that retargeting is the only way to make missing maps loadable again.

My scenario does assume you have a means of keeping user paths properly set on every machine so that all required maps can be found somewhere.

At my studio we have a startup script that makes sure all folders under a given root are added as Max user paths, and that they're optimally ordered for speed in finding relocated bitmaps. Without something similar, leaning on user paths exclusively could be an equivalent amount of manual labor as retargeting, just invested in a different spot.

Jason Brackman said...

For shaders I use the user paths -- since without the shader you will lose the link to the target texture completely and would be at a disadvantage to debug a problem.

My OCD though kicks in on the textures and #Found just doesn't feel as right as #OK :).

If retargeting comes up its usually at a junction of some kind -- like moving assets and changing its organization somehow from one depot to another.

Alexander Hosking said...

I work in an environment where maps HAVE to be in the same folder where the dae/fbx is being exported.
For the sake of user error, I explicitly re-map to the folder of export so that they never lose a file again. We also have a handy utility that scans a user path and will pull necessary imagery from them to support the exported content.

Before this workflow however, I never needed to re-map paths.