They may have added something recently for relative paths, but as of a couple releases ago, Max had a very specific, hard-coded means of finding external texture/xref files.
I also wanted to say that, in my experience, there’s never been a need to re-path all paths inside your Max scenes. It’s designed to do that for you, in a sense, although how it does that isn’t very obvious…
I did some testing a couple years back, and here’s the search order Max used for each texture/shader used in a scene:
- Disk location the texture was originally assigned from.
- Folder the .max file being loaded resides in.
- Every subdirectory under the one the max file resides in (recursive)
- Folders in the user’s External Files list, in order from top-to-bottom.
If it gets through all four and cannot find a texture with the base filename it’s after, it’s added to the list of missing files shown in the customary warning dialog.
Now #1 is a quick check, since it’s only looking in one specific place per texture. So is #2, but #3 is where texture searching can really kill your users. For instance, if you’re loading a max file from the root of D:, once it gets to #3 it’s now recursively searching every subdirectory on that whole drive before giving up. Repeated for every texture not found in 1 or 2.
Now you can manually re-path all your max files to point to new locations when they move, or the user changes his workspace, but there’s really no need to do that. The External Files list is there to lean on.
At Volition we have a script that runs when Max is launched. It looks at the user’s current “workspace” or branch root directory, then builds a list of all texture-related subdirectories under it. It then takes that list, sorts it and forces it as the current External Files list (found in 3dsmax.ini), prior to starting Max.
This ensures that every scene loaded that can’t find its textures in the original location quickly finds them, no matter what workspace/branch location they’re currently using. It’s also repeated for the XRefs directory list, which works the same way but for XRef files.
There’s only two lingering gotchas with this. First is that #3 above is still in play. Users have to be mindful not to save max files in directories with lots of subdirectories underneath. Generally our source control structure for storing max files takes care of that.
Second is just an inconvenience for the sync-paths script, in that #4 cannot be made to be recursive. Every single subdir you want it to search in has to be explicitly listed in the External Files list. I’ve often wished Autodesk would just move the recursive part from #3 to #4, solving both of the above, but alas.
Again, this may also not reflect current behavior in 3ds Max 2010+, since I last tested it on Max 9 or 2008 I think. Although I’d be somewhat surprised if this has changed.
I have permission to post our sync-paths script, but I need to make a pass at removing any unannounced project titles from it. I’ll try to do that in the next day or two.