Since we’re all looking towards the future and Blender 2.8, we’re all gathering ideas and discussing Blender’s development, I thought it was a good time for me to share something that I’ve kept telling to my friends for years but never said out loud. Although it is a known missing feature and that it has been subject to proposal here and there through Blender’s history, I’ve never seen any serious subject on the matter, so here I go.
Blender’s painting tools haven’t ceased to improve through time. With time, effort and money, blender has been able to compete with the greatest 3D painting tools available on the market. Though it is still maybe not at the level of super high-end painting apps, such as Mari or Substance Painter, it is able to compete with other high-end and well known 3d apps in this domain, such as 3DCoat or Mudbox. But is it really production ready ?
First of all, let me present myself quickly. My name is Ghislain, I’m 25 years old and I live in France. I’ve been using Blender for 9 years and 7 years as a professional artist. I’m mostly focused on stylized hand-painted video games props. I’ve been recently offered a job in the biggest German video-game studio and before that I also worked 7 months in Paris in a CG studio, and had tons of freelance experiences through the years.
Anyway, I’m not here to post my full curriculum vitae but I just wanted to say, maybe a bit poorly I admit, that I know a bit about 3d painting.
So, obviously, Blender’s painting tools has always been a huge interest to me. Yesterday again, I talked about it with a former working colleague of mine, that is now mostly working with Blender in a big German production. He discovered Mudbox’s painting tools and was amazed by how cool it was to be able to share the layer workflow with Photoshop, to be able to load a psd file in mudbox and paint on it both in MudBox and PS. And he got me thinking, was I the only one here thinking that this is such a most basic needed feature in Blender ?
And so I’ve been both amazed and super frustrated at the same time for years that Blender has still no true painting layers.
Current system and why it is not working?
Yes, in a way, you can use layers to paint in Blender, but for each layer, you have to create an unique and single image. No matter what addon you’re going to link me to facilitate the workflow and I’ve seen them all, anyone who truly paints knows that it is not going to work.
Biggest reason to me is the « sketching » aspect when you paint. Anyone who have already painted something somewhat sophisticated in a 2D app, knows what I mean. You create layers and delete layers a LOT, sometimes you don’t even know why. You end up with fifty unnamed layers and your file is a sketchy mess but because painting, mostly, IS sketching. Even Feng Zhu doesn’t name his layers and has dozens and dozens of them ! You have to be able to create or delete a layer in a single click when you feel it, for any unsure stroke you might want to do, for any numerous lighting pass you might need to do, for any shadow stroke you should have to do, for anything you might want to tweak later on. Otherwise, it is just plain not possible.
I’ve seen it, I’ve done it and I know how much the current workflow is flawed, just because the way Blender handles data. Imagine having 30 layers, meaning 30 unsaved images : some might be saved externally yes, but some probably aren’t and are waiting to be unwillingly deleted if you forget to save them externally before you quit. Even if there’s buttons and addons to help you deal with that, you will forget, you will mess things up one day or another and you will loose your work. I’ve experienced it and I’ve seen it in production.
Also, because of the way Blender handles data again (which is not itself wrong !), for each layer, meaning for each image, you’ll have to name both the source and the image inside Blender. And let’s say later on, you rename the source for one reason or another, well you also have to rename the image inside Blender. And if you forget, you’ll end up someday believing this « highlight_001 » texture, equals this « light.png » image and because it is not, you’ll save and overwrite the wrong image !
Even if you just want to delete layers (and we do a LOT, because, again, painting/drawing is somewhat sketchy), you’ll still have the images in your folder so there’s that to clean. Plus, the data in Blender is still there and is waiting for you to quit to be erased. So you still have a list of rusty and unused images when you’re selecting your images while painting. Yeah, one more way to make a mistake and start painting on the wrong image.
But that is not even a problem. Obviously the main issue is sharing your painting with an external 2D application. You can’t share layered files with Gimp or Krita or Photoshop. Only way to do that is to import every images you created in Blender and reconstruct the layers by yourself. And if you had the misfortune to use a weird blend type in Blender, let’s say Linear Light, you’ll end up seeing that Krita doesn’t use the same algorithm and that you have different colours results with the same setup.
Real painting work requires real layers, for the plain reason that a 3D application is supposed to be used with an external 2D application. There’s so much stuff that is quicker to do, or that you can only do in a 2D application, that you cannot avoid it. And you can’t paint everything on a 3D object in a 2D app either, so a sharing workflow must exist between the two. And we can’t do that in Blender and it’s such a shame considering how great the painting mode is in Blender. Either you have to export/import flattened image (…) and or deal with the broken layer workflow at you own inconvenience.
What should we have?
The ability to load a single multilayer file format (cf below) and paint on those layers. 3DCoat for instance only has basic psd supports (text layers, layer groups, dynamic layers, FX layers and all are not supported and has to be rasterized and flattened in order to be read) but it is way enough for texture painting. We don’t need anything fancy.
So basically we should need to be able to list the layers stored in the multilayer file, select them individually in Blender so we can paint on them, toggle their visibility, change their layer mode (screen, colour, add, overlay and multiply are the most basic ones), move them up or down, deleted them and create new ones.
Why it doesn’t exist yet ?
Substance Painter for instance, doesn’t have such feature and yet is one of most regarded 3d painting app. I quote from the devs :
“Building a PSD exporter is actually much more complicated than it looks like at first glance.
Substance Painter channels all use different color space and bit depth. The height map even uses negative values, which Photoshop can’t handle. Merging all this information in a single PSD file is tricky to say the least.
The current PSD export was a specific request from some of our AAA customers.
We do have plans to make a full PSD exporter happen at some point though, but it requires a lot of thinking and engineering to make it work flawlessly.”
I’m no fool, I learned the basics of C++ some years ago and wrote some very basic programs myself and I know how quickly coding can become complicated. And there’s other issues as well.
The biggest to me is the image format. Psd seems obvious but it is proprietary and developing such a time and money consuming feature using a proprietary format is unlikely as well as unreasonable. Other two obvious format I have in mind are .xcf and .kra.
Blender already does import and flatten xcf files so it’s a start, but Gimp has been lagging behind for ages. It’s future is unsure and it’s development is somewhat abandoned by most devs. Gimp 3.0 will still not be released in years to come and Krita will be mostly long ahead by that time. But Krita is mostly focused on painting and does lack the photo manipulating workflow that Gimp can provides. Also I’m unsure how easy it would be to support .kra and putting Gimp aside, being the most know free 2D app in the world, is probably not reasonable.
A friend pointed me towards the ora file format which is supported by mypaint, gimp and krita so it sounds promising.
Basic UI proposal
The other issue is concerning the interface although a simple proposal such as that would work for me.
Any thoughts ? Anything comments devs would share with us ?