Hi everyone, new to the forums even if I've been silently following the community for some years now. Over the past few months I've been dealing with a lot of texture work, so I built a couple of Photoshop extensions to help me in the process. Hoping they might be useful to others, I'm releasing them to the public as I gradually give them an overhaul.
The plugin is open-source and free for both personal and commercial use.
A panel that automatically exports textures to common file formats (TGA, PNG, etc.) out of PSDs containing multiple maps.
Features
A panel that lets you preview your textures in a realtime 3D viewport directly inside Photoshop.
Note: development on the Previewer panel is on-hold for the moment and the extension is not available for download.
Replies
Glad you think it might be useful! Let me know how it goes
Any more details on the 3D WebGL previewer?
Also, putting more info in your post's title may help expose it to more views, this seems like it couldbe really big with a lot of Polycount's texture artists.
Thanks, glad you like it.
@radiancef0rge
Sorry to hear that! If installation went fine you should see this in Extension Manager:
Can you please check if a folder called com.expresso exists at the following path? Extensions installed through Extension Manager should end up there.
As for Moderators, here are some you can probably PM:
http://www.polycount.com/forum/member.php?u=13650
http://www.polycount.com/forum/member.php?u=13643
http://www.polycount.com/forum/member.php?u=13749
http://www.polycount.com/forum/member.php?u=17398
Will the previewer auto load the document on to the model as you make changes, or will it require an export and load button?
Well, a mix of the two.
Keeping the preview and document in sync currently requires the targeted layer groups to be exported to a temp folder and loaded onto the model. Even if the process is handled automatically by the panel, it is not realtime.
Loading the map on the model is pretty fast as it is handled by the panel and does not require Photoshop do to anything, but exporting it can be painfully slow especially for very complex documents.
I tried three approaches over time to make it as realtime as possible:
- trigger an update on each Photoshop events (i.e. used a brush, created a shape, etc.). This degraded performance quite rapidly as you can imagine as the amount of events fired can get quite high.
- Poll periodically for updates. Let's say every 500ms we can go through the layer groups of the document and export the ones that have changed since last update. This too can degrade performance quite rapidly, especially when working with large document with lots of layers (traversing the layer stack is a very expensive operation!).
- Right now my approach is to update the preview when you hover the mouse on the panel (the same happens with the exporter panel). This requires less interaction than having to click an "update" button and at the same time prevents too frequent updates. Only layer groups that have been modified are actually exported.
Something I would like to try to play with is the new Generator Plugin architecture. This can remove the need for the export pass, as it makes it possible to retrieve the actual image pixels directly from Photoshop. Unfortunately, even if this has potentials to speed things up a bit, I don't think it would so much to have a true realtime preview.Some of the features I originally planned did not make it in for this release, the most notable one being the layer "auto-reload" functionality (you have to press an update button to update the preview for now). Please see the Caveats section in the first post.
After some battling, all the export code was moved to Generator (both for Exporter and Previewer panels), performance improvements should quite noticeable. There are still some issues to sort out though: Generator is using ImageMagick behind the scene to export the images, and right now I've found no way to tell it not to pre-multiply the alpha channel when exporting to PSD and TIFF. As such, exporting using those formats is somewhat broken right now... Would greatly appreciate some help if someone has experience with ImageMagick
Apart from the Generator integration, most of the code has received an overhaul, so overall performance should have been improved and a lot of bugs fixed.
Hope you find it useful. Please let me know if you find bugs or have suggestions.
Hi Computron, did you had a chance to try the extension?
BTW I've released a new version with the following changes:
With this updates panels should be much more stable and work correctly on Mac. The plugin also now has its own website, so I've cleaned up the first post.
Thanks, let me know how it goes!
Glad to hear that!
FBX support is something I definitely want to add, but I fear it will take some time (afaik Autodesk FBX SDK does not support Javascript/NodeJS directly).
Do you have any specific need that OBJ can't handle?
However just from the first 10 minutes here, I can already say that there's a few things I'd like to see.
- Gloss map support. Specular isn't simply enough I'm afraid.
- Physically Based Rendering support. (If possible, if not I'll just stick with Toolbag 2.)
- FBX support. I can use .OBJ, but I usually export my stuff in .FBX.
- Slider to increase/decrease tiling.
- Some sort of imaged based reflections.
This thing really need gloss to truly shine.
Thanks for taking the time to test the extension and sharing your thoughts!
Gloss map and configurable texture tiling are on my todo list. FBX support is on the list, too, but might take a while (please see my last post).
About PBR: I've been playing with it a bit, but it will take some more work before I have something stable. It should be totally feasible though (in fact, I need PBR support for my projects too).
Image based reflections: this is something I'm considering alongside image based lighting for PBR. I guess it's something people would expect.
Please consider that the extension started as a personal tool/learning experience that only included things I needed at the time. I'm working on it in my spare time, so it will take some time for these new features to be added.
No worries man, even as it is now, I think it's great!
Keep it up!
NP! By the way a new version is out, which includes some of your suggestions:
Rendering quality should have improved a bit thanks to gamma-corrected rendering, but it's a somewhat tricky area and I would really love your feedback! This is an important step towards supporting physically based rendering (which should be in the next release).
I have some doubts about glossiness, too. Right now the Specular Power slider should be considered more like a "specular range" as it works as a multiplier for the new Glossiness map, and together contribute to the actual specular power used in the shader:
I'm not really sure that using an exponential function to calculate SpecularPower is the right way to go as it makes the SpecularRange parameter somewhat difficult to tweak. Also, would you find the ability to specify a base Glossiness color useful?
Hope you find the changes useful!
A little late to the party here, but nice work! Just downloaded the latest version, and it's a lot more useful now that it's got glossiness!
However, I just realized something; I have no idea where it saves screenshots to.
Any chance we could have an option to select a custom folder to save screenshots into? Perhaps, make it save to the same folder as your document by default?
Cheers!
No worries about that, I've been kinda silent lately too! About the screenshots, at the moment they are saved into the Documents folder, but I agree that having a configurable path would be nice. I'll add it to the rendering tab, so that it will be configurable on a per-document basis.
Cool model/texture btw!
Hope to solve it, really can't wait to optimize my work pipeline with your tool
I just replied to your email, hope that addressed your questions, sorry if it took longer than usual! If you have more questions feel free to ask them here or by email.
I've been using your plugin for some month now, and it's awesome !
But I have some issues when one of the group I use to export has a layer mask, the affected channels get completely crazy on the final image !
I use the group mask in order to mask out non used pixels of the uv layout, so I can quickly flattens&duplicate the group, apply mask, and extend the uv island borders with the minimum filter (or the one at the bottom of this page, which is awesome).
For now, my solution was to disable the group mask, do a little action that automates the process of flattening, filtering and placing the new layer on the top of the group, then push the texture export button.
What would be great for me, is the addition of two features :
- Correct support of the group masks
- Ability to fill the transparent pixels of the source groups in a way same as the mentioned filter (minimum / solidify) when exporting. Or even an option to apply custom actions or filter when exporting ?
But still, your plugin is awesome !
Glad you put the plugin to good use!
You've hit a long standing bug that occurs when trying to export a group that does not extend to the document bounds (i.e. because you have a mask, or because the group is composed only of semi-transparent layers). In this case, the Photoshop API only returns the opaque area of the image. The crazy result you're seeing is the plugin trying to adapt the returned image to the selected power of two export resolution, failing miserably in the process.
I've been investigating some ways to solve the issue, but wasn't able to found one that would work reliably and decided to put the issue on hold as I thought maps with transparent backgrounds were not so common... But I can totally see why this feature would be useful in your case! I'll try to wrap my head around the issue again in the future.
If I understand it correctly, the action adds some edge padding to the image? I've been trying to stay away from everything that could possibly modify the source image in non-predictable ways as it's easy to screw things up...
@CreativeSheep
I didn't forget about you! But I'm getting quite a lot of emails regarding the plugin and it's not easy to always keep-up with them. I'm replying to you here because I think you might be experiencing the same issue of ReMix3D. Can you please make sure you have an opaque background in all your groups before exporting?
Yep, I was talking of a sort of edge padding. I understand the goal of the tool is not to modify the source image, but since it's use is for creating textures, having a way to automate correction of the "I'm getting bad colors where my uv seams are" issue would be a cool addition.
Also, I'm also sort of a developper myself (lets say a technical artist), if you're up to share your source code (web transfer, source control ...) I could help you find how to get around those issue (even though I'm quite busy at the moment) ?
Yes, some kind of built-in support for edge padding would be great indeed.
Thanks! I always wanted to publicly release the source code alongside the plugin, but never got around it as the code needs some cleanup first (mainly remove dependencies on other personal projects). I'll give it a shot over the weekend.
@CreativeSheep
Link doesn't work: "Permission Denied Sorry, there is no video here.".
@kio
Glad you found it useful! Completely off-topic note: I saw on your website that you worked on Airborn, I remember playing the UT3 mod... Any news about the project?
Whatever layer color I have for the background, or base layer for the group, when I choose a channel, whether that is Red, Green or Blue it is inherited into the export, for example; if the base background layer that I created for the group is blue and I choose green for the channel in expresso the background will be black, if I choose the blue channel, the background will be blue, those are the results I'm getting ?
As well, if I have a texture in a group, and I export the blue channel, my texture is not the original texture color, it's a blue color, unless I only have a RGB channel, is this how expresso works, but in your help file for the exporter, you have a normal, roughness, opacity, albedo group, and there is a roughness (red) channel and a opacity (green) channel, I assume the roughness channel when exported doesn't look red, and the opacity channel doesn't look green ?
Complaint about alpha channels, I shouldn't have to make a separate group for alpha channels, I should be able to select the alpha channel from the channels in the image, instead what I have to do is; create a group, make a layer for the object that will be the alpha channel, make a layer below this alpha layer, as addressed earlier then export the group; then another hiccup arises, if I choose to export the red channel and an alpha group, I don't get both exported, instead I get only the alpha group ?
When you select a group for export you're exporting that group into a channel of the exported image, you're not selecting which channel of the source image you want to export. This is useful when you want to compress multiple greyscale maps (such as opacity, glossiness, roughness, specular, whatever) into a single output texture to save up texture space.
If you need to export a full RGB image, you'll need to output it to all the RGB channels of the exported image. Otherwise, even if Photoshop will show the output colored either in red, green or blue depending on which export channel you chose, what you really have is an image with two black channels and a greyscale representation of your RGB input.
The plugin relies on the fact that you work on your maps in non-destructive ways, by using multiple layers and groups, that you can later easily export. This isn't possible if you work on the alpha channels of the PSD directly, and it's the reason why exporting from alpha channels isn't supported.
Hope this helps.
EXR support would be nice indeed! I looked into it a couple of weeks ago, but unfortunately the API I'm using only supports 8 bit output, so the only way to export to EXR would be to use Extendscript, which is way slower!
A viable option, at least in the beginning, might be to support exporting full images only. This way you'll lose the ability to export into individual channels, but will still be able to use the plugin to store the export path and do one-click exports. Do you think that might work for you?
I think I brought up EXR support a while ago, give it a go, see how it works
Thanks for updating for 2015
yes i think i wouldn't need the channel packing for cases where i use exr as a file format ( mostly cubemaps & lightmap stuff), i think i have my own one click exporter somewhere around, but well you know, it would be nice to have it all in one tool - and yours does a really good job already
Sorry to hear you're experiencing issues!
I'll need some more info to be able to help you out i.e.: which Photoshop/OS version are you running? Is the texture loaded from a layer group or from an external file? Do you get any error dialogs? Are you experiencing the issue with all maps or only with specific ones (i.e. diffuse, normal, etc.)?