[Photoshop Plugin] Expresso Exporter, quickly export texture maps out of PSDs

Hi everyone,

I’ve been working for some time on a plugin for Photoshop CC that helps with exporting textures out of PSDs containing multiple maps. While not strictly related to UE4, it may be quite useful especially when dealing with multiple maps (i.e. roughness, ambient occlusion, metallic) that can be compressed into a single texture to save texture space in the engine. In fact, me and my team have been using it alongside UE4 for some time now!

It can also be used to speed up common operations like normal map normalization, flipping normal map channels or to quickly apply filters such as blur or sharpen to exported maps. The plugin works as a panel and integrates seamlessly into Photoshop:

Features

  • Quickly export textures from PSDs containing multiple maps organized in groups.
  • Compress multiple maps to a single texture by defining which Photoshop group you want to export in each image channel (RGBA). For example you can have an opacity map saved to the red channel and a specular map saved to the green channel of the same texture.
  • Multiple export formats supported: TGA, PSD, PNG, TIFF, JPEG.
  • Multiple export scaling options: 200%, 100%, 50%, 25%, 12.5%.
  • Filters: apply blur, sharpen, invert on export.
  • Normal maps: normalize normal maps or flip X/Y axes on export.
  • Settings are saved into the document as XMP metadata, so that you’re immediately good to go as soon as you reopen the file.

Download - Source Code

The plugin is open source and free to use for both personal and commercial work. It works on Photoshop CC 2015 and up on both Windows and Mac. The extension it’s still in its early days, so expect bugs. Let me know if you find one!

Hope you find the extension useful and may put it to good use! I would love to hear your feedback! :slight_smile:

P.S.: as you can read on the website, the plugin also contains another panel that offers a 3D preview of texture maps right inside Photoshop. Unfortunately, when I originally built it, I didn’t need physically based rendering… So it’s kinda useless right now for UE4 work! I’d be interested to know if you would find PBR support useful. Update: development on the Previewer is on hold, and the extension is not currently available for download.

Awesome! downloading now…

Very nice! Too bad I’m running an older Photoshop myself - but this is pretty much exactly what I wanted to build for a while now. UI looks very slick and professional too!

Let me know how it goes! :slight_smile:

Thanks! I tried to make it look like a regular Photoshop panel as much as possible. It’s too bad Adobe completely changed extension system in CC without backporting it to (at least) CS6. BTW thanks for tweeting about the plugin. :slight_smile:

Wow , with 3d rendering tab , very nice plugin and very complet , i will try this in some day with my new model and return here my feedback thank you so much minifloppy

That’s unfortunate :frowning: and no problem! Good stuff should be shared :smiley:

Hi,

I tried your plug-in, I must say that I like this plugin, particularly its ease of use.

Here is my little attempt :

Now I would like to have the possibility of choosing a project directory with absolut path because when I selected the first custom map, it always starts in the Adobe directory PhotophopCC so my texture folder is in Maya Project Folder. Will be great of keeping it in memory, nothing change with Relative Path.

If you can add more channel like Glossy , Reflexion and Metallic and Custom map will be great , make it compatible with Physically based rendering Material (PBR).
Load exr ou hdri image in background environement for reflexion will be realy good too.
Have the posibility to move the light in the scene would be really great too.
TXAA do not look good here , Maybe a SMAA or traditional antialiased will be better ?
Will you make a commercial version or pro version of you plugin ?

Thank you for this great plugin , i wait next approuvement

That’s strange. When you want to select a folder or file, Expresso should use the last selected path. If the last used path is invalid or not specified, it falls back to the path of the current PSD. Only in the case when the current document is not saved to disk, the plugin will fall back to the Photoshop executable path. Can you please confirm that your PSD was saved to disk?

Support for Glossiness map is currently in the work. I’m making some tests with PBR too, but it might take a bit to implement. Support for image based reflections and metallic will be added for the PBR renderer, not sure about the “standard” one though. What do you mean with “Custom map”?

I’m not sure whether support for these formats will be added. Please keep in mind that the tool was born as a quick way of previewing textures, not as a fully fledged rendering solution (such as Marmoset Toolbag or similar tools). :slight_smile:

This is on my to-do list. It’s something I felt the need for from time to time too!

Unfortunately support for traditional antialiasing is very inconsistent between platforms and drivers, and would be very likely disabled on most of them (under the hood the extension is run by WebGL in a Google Chrome-based environment). While I do agree that antialiasing techniques such as FXAA produce less quality images, they provide consistent results across platforms. FXAA or similar is also used in a lot of game engines, so it should help previewing how the textures will look like in-game, too.

My idea is to keep the extension free to use, just as it is now. I will consider some kind of commercial/pro version only if the time needed to maintain the plugin will grow too much in the future (i.e. interest for some kind of advanced/custom functionality, etc.). Still, it’s way too early to tell!

Thanks for sharing your thoughts. I’m glad you like the plugin! :slight_smile:

Hello minifloppy

You are right, Just need to saving new project at start ,will fix the problem

Sorry for my bad english :frowning: , i wanted saying new Glossiness map with custom map import like Spec/diffus… nothing more

i know , i know :smiley: , I wanted to know if you were going to do something about it…
Support for image based reflections and metallic will fix it.

Just one more feedback about the previewer , realy need more zoom on object .

Thank you so much for this answer & this plugin , I expected the new update, I will keep connected :o

Yes, I really need to improve camera movement. :slight_smile: BTW Glossiness map support is now in version 0.4, along with the following changes:

This release was mainly targeted at improving the Previewer, no new features were added to the Exporter. Hope you find it useful :slight_smile:

wow , you are working super fast , this plugin will become a must to have !
Thank you for the update , will donwload now .

looks fantastic well done!

hi all,

someone use again this plugin ?
I installed it without issues, but when I start Photoshop, the windows plugin is…empty :confused:

Do you have any idea ?

I m on CC 2015 // windows 7 64

thanks

I m surprised, it’s good plugin for ue4 no ? anyone use it ?

Same issue as decod-fp. Help Guys!

im having the same issue as the two people above, even trying to build it from the source, heres the steps (gratuitously posted from my own post on polycount)

hey just for anyone trying to get this to compile, i hit a couple of snags but im pretty sure i did what was needed

Assumptions:
you have node/ npm / git installed, you dont need git but it’d be easier then having to download and reference stuff externally

  • Create an empty folder which will become your espresso directory
  • (from cmd prompt in root espresso directory ) git clone git://github.com/fcamarlinghi/expresso
  • Fix errant space in package.json for at " sanitize-filename" * (around line 14)
  • (from cmd prompt in root espresso directory ) npm install
  • (from cmd prompt in root espresso directory ) npm install git://github.com/fcamarlinghi/cepy
  • Create folder a folder named distrib in the root\scripts folder and create a new file called cepy.certificate.js (see below for contents)
  • find file cepy.exporter.config.js file in root\scripts and change timestampURLto ‘http://sha1timestamp.ws.symantec.com/sha1/timestamp’ (as the one used by default is dead)
  • (from cmd prompt in root espresso directory ) npm run exporter:release

It compiles fine for me after jumping through all these hoops, but i cant get it to play nice, give it a try, heres a zxp link, i can remove it if there are issues with me posting it

Hi everyone, sorry for the lack of updates and for the issues you’ve been experiencing when building the plugin from source.

I finally had some time to work on the plugin again, and recently released an updated version (0.5) of the Exporter panel which you can download from here. On the same page you’ll find instructions about how to install and run the plugin. In case you wish to build the plugin from source, the Github repository has been updated as well and the overall build process should be much more streamlined now.

The new version is compatible with Photoshop CC2015 to CC2018 and has some new features:

  • Improved export capabilities:

  • Exporting sub-groups is now supported.

  • Exporting groups with transparent background is now supported.

  • Exporting documents with non power-of-two sizes is now supported.

  • New dropdown menu makes it easier to select the group you want to export by providing the ability to search for it by name (or using regular expressions). Should help when working with complex PSDs.

  • Slightly faster exports thanks to a new export engine. The panel now uses Photoshop Remote Server to connect to Photoshop instead of relying on a Generator plugin, which proved to be buggy and hard to maintain in the long run.

  • Updated UI themes to match the ones introduced in CC 2015.

This is a major rewrite of the old extension, so bugs should be expected. Please let me know if you run into any issue!

As a side note: the Previewer panel is on-hold for the moment. It was a fun experiment and I hope to come back to it in the future, but it always lacked too many features to be really useful for modern development.