8 votes
Date Updated: 

With RemapPSDyou can easily map your entire photoshop file to a different set of uvs. The script will handle any complexity in your photoshop files:


  • layers with masks
  • folders with masks
  • nested folders
  • adjustment layers with masks
  • layered tiffs


Additional Info: 

An example case: You have worked on a lowpoly game character and are almost done when the lead artist approaches you with the request to give the character's face more space on the texture. This is not so difficult if you are working on a flat image, but impossible to do with complex photshop files. With RemapPSD it's inredibly easy. You can change the uv-layout of an existing model and the psd file with all the layers, folders, adjustment layers, masks etc, will be remapped with just the click of a button.

I hope you will find it just as helpful as I do. To get started it is probably best to watch the video tutorial on vimeo:


  1. Select Maxscript/run and choose „RemapPSD.mzp“
  2. You will find the macroscipt under customize in the category „3dhippie“. Assign it to a shortcut or make a new menu item.


Basically you need three things to make the script work.

  1. Any piece of textured geometry
  2. Two sets of UV's: Channel 1 for the old mapping, Channel 2 for the new mapping
  3. A standard material with a bitmap texture as it's diffuse map

RemapPSD will do the rest for you.

The script will run through four phases:

  1. Photoshop will pop up, open the document, save it under „[originalname]_remapped“ and do some preparations.
  2. Back in 3ds Max render to texture will render all layers.
  3. Photoshop will collect all rendered images and update the psdfile.
  4. In 3ds Max the original object's material will be updated to use the remapped psd file.

That's it. You can now continue working on your psd file which will be organized just the same as before, with all layers, adjustment layers, folders and so on.


You cannot remap vector elements, such as vector masks, or text layers, or smartobjects. All of those elements will be rasterized.

Long layernames will be truncated.


If this script has saved your life maybe you could donate me some money? I have setup a paypal donation button on my blog:

I am looking for part-time or full-time positions as a 3d generalist in the games or films industry, as well as for freelance jobs. Please take a look at my current showreel:

If you have comments or critique, you are always welcome to write me a line. I can't promise that I will implement new feature requests, but I will try my best.


first release

    - fixed problem with too long layernames (more than 31 characters)
    - fixed error when trying to clear an adjustment layer
    - fixed error caused by slashes in layernames
    - fixed spelling error in messagebox

    - fixed problem with slashes in remapped_name variable (thanks to Pixhellmann)

    - fixed problem where projection was turned off and automatic unwrap got applied.

    - checked with Photoshop CS6
    - fixed issues with empty layers
    - cleaned photoshop history
    - fixed issue with wrong settings in RTT dialog
    - fixed issue with forwardslashes in layernames
    - improved general stability

    - fixed bug when render to texture dialog wasn't opened (thanks trebor777)

    - removed unneccessary command and execute steps. Compatibility to 3dsmax 2012 established.

    - Proper handling of premultiplied alphas (no more black halos).
    - fixed bug that occured when the baked layer's alpha was empty



Version Requirement: 
3ds Max 2012, 2013, 2014
Other Software Required: 
Adobe Photoshop CS or higher
Video URL: 
remappsd.mzp8.93 KB


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
ashbcl19's picture

tech news

I like this kind of blogs. You did a great job by posting these nice pics and descriptions of exotic news

Mhammad Ashar

mad's picture

you are genius :) thank!

you are genius :) thank!

3dhippie's picture

oh. good question. I will

oh. good question. I will have to think about it.

cptSwing's picture

Normal maps

Hello there, impressive script! I wonder wether one could make it correctly rotate tangent space normal maps as well? (more info and an example:

3dhippie's picture

Okay, I found a very good

Okay, I found a very good tutorial on the subject of registering Photoshop in the registry. Can you please try the following instructions here:

good luck.

3dhippie's picture

hm. that configuration should

hm. that configuration should work... I am a bit puzzled and will have to ask for help on the forums. I would guess that photshop is somehow not registered as an application in your registry. Do you have admin rights on the computer? What windows version are you using?

I'm really sorry, that I can't offer immediate help.

br0t's picture

3ds Max x64 and PS CS5

3ds Max 2011 and PS CS5, both 64bit

Never get low & slow & out of ideas

3dhippie's picture

oh. what versions of

oh. what versions of photoshop and 3dsmax are you using?

br0t's picture

Thanks David for the

Thanks David for the explanation! I just tried your script with a very simple example and hit this:

The script crashed in line 466, when trying to open photoshop. Mhm the picture got compressed you cant read anythign I see, the error says: "MAXScript Macroscript Error Exception --Runtime error: createOLEObject: can't create instance Photoshop.Application" No idea yet why that would happen.


Never get low & slow & out of ideas

3dhippie's picture

Can someone please verify

Can someone please verify that the script works on his or her machine? Have you encountered any bugs or so? let me know.

@br0t: Okay. I can talk a little about how the script works. The basis of it all is the bitmaplayermanger interface of maxscript. It allows you to load layers from photoshop as bitmaps in your material. This is cool in itself, but a little limited. If a layer has a mask, neither the mask nor the layer itself will be visible to the manager. So the first thing the script will do is to seperate all masks from their layers, which will make both visible to the manager. It will also rename each layer as a way to pass over variables (e.g "vtrue" or "vfalse" for the layer's hidden state, or "MASK" if it's a mask).

If the preparations are finished, all maps can be loaded and baked to a different uv-channel with maxscript. Nothing fancy here.

In a second java script all layers will be loaded again to replace the same-named layers. If the variable MASK is written in the layername, the layer will be used as the mask for the corresponding layer.

so that's essentially how it works. Are you interested in any other specifics?

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.