Tools and modes should NOT depend on active UV channel

I noticed that every time I work with Blender in the area of texture painting and UV mapping, I feel like an anxious pyrotechnician defusing an armed bomb. This is because UV mapping and texture painting are few of the areas where Blender, in a typical Blender manner, punishes the users for their mistakes instead of helping them out.

This philosophy of amplifying user mistakes and often destroying the user generated data instead of preventing the mistakes is quite unique to Blender.

Here are a few examples:
1:
Blender allows you to edit UVs of multiple objects at once. Let’s say you have two objects, both of which have two UV channels. One for unique, non overlapping UVs and other for overlapped mapping of decal trim sheets:

The active UV channel on the Cube is UVMap, while the active UV channel on the Cylinder is DecalMap. If you are not careful, and do not do the easy to forget chore of going through every single object first, and selecting the same UV channel (because the damn Alt click to edit multiple objects at once doesn’t work here), and then enter UV editor, you are met with this:


You are met with the UV editor straight up lying to you. It says you are in the UVMap channel, but the cylinder, which is part of the selected objects is actually still set to DecalMap UV channel. You then proceed to make a few modifications to the UVs until you run out of undo stack steps. Then you save your file. Only afterwards, you realize that you have completely destroyed all your work spent on the DecalMap UV channel. The user data is lost.

SOLUTION: When editing multiple objects, the UV editor needs to communicate to the user that multiple UV channels of different names are being edited at once.

2:
You are texture painting. You are always certain that you want to use your primary, non overlapping UVMap channel for the texture painting, as painting on an overlapping UV channel would not make any sense. You set this up in the Texture Paint mode:


You then do some painting, exit the Texture Paint mode, and want do map some decals. So you switch the active UV channel to DecalMap, do the modifications, exit it, and want to continue the painting.

You enter the texture paint mode, you draw the brush stroke, and nothing happens. The cold sweat pours over your forehead, because you know this is Blender. The brush stroke did not fail, it has just done something somewhere else. You just were in the wrong constellation of various interdependent modes, tools, and settings, which means you probably wrecked your data somewhere else. You undo, hoping that the undo undoes just the brush stroke, and not also something else, because of the various undo bugs in the painting and sculpting modes. After investigation, you realize that the UV channel in the texture painting mode was set to last active channel in the object mode:
image
There as absolutely nothing communicating to the user that this UI element is tied to the mesh datablock UV channel selector. And worse yet, even if it was explained, it would not make sense. I highly doubt that use cases where the user wants to switch UV channels frequently when painting one specific texture map are anything but super rare. This, once again, can lead to the user unintentionally damaging/destroying their texture paint data.

SOLUTION:
In texture painting mode, the UV map setting for given image texture should always remain locked, regardless of the UV channel selection in object mode. The UV map selection UI element should have a unique value, not be an instance of the mesh datablock active UV channel.

In general, Blender needs to move away from the tools and modes relying on the active UV channel. This also causes issues with texture baking. Whenever any tool or mode relies on UV channel selection, this selection should happen directly in that tool or mode, and should never ever by affected by the changes in UV channel selection in the mesh datablock in object mode.

1 Like

You make a very good point on problem 1.
Problem 2 is a bit less clear cut I think. I think each and every tool having it’s own ‘active UV channel’ opens a completely new can of worms and it doesn’t fit the paradigm that all editors are different views on the same underlying data (which is how I always imagine the platonic blender ideal). I do think it would be a very good idea if the currently active UV channel is more clearly visible as I’ve accidentally overpainted the wrong stuff as well.

On a side note: imho your post is written in a needlessly combative way. I can understand your frustrations (with blender, with the process of feature requesting ) , but to efficiently get something done it’s much better to write it down in a clear way stripped of emotion. The persons who are most qualified to change stuff are probably also the persons who wrote the current stuff. If you start with bashing them over the head the chance they feel like doing what you want diminishes rather sharply.

Let me ask you this: Did you ever want to paint the same image texture using multiple different UV channels?

Well, try to stay calm after having repeatedly lost hours of work. I’d never bother writing such a long post if it wasn’t out of frustration. If it’s not straight up frustrating, I just learn to live with it.

In fact I did. It all depends on how the UV channels on your various objects are ordered/set up. If you have objects from various different sources with different uv channels this can happen.

Well, try to stay calm after having repeatedly lost hours of work. I’d never bother writing such a long post if it wasn’t out of frustration. If it’s not straight up frustrating, I just learn to live with it.

I understand. Still it’s better to write the first version when the accident just happened. And then sit on it for an hour and redact it a bit when you’ve calmed down. It’s just more efficient. I’m by no means perfect in this regard and have posted my fair share of rants all over the internet, I know it’s hard. But I did learn that letting your anger seep through hardly ever does what you want. It took me 25 years, but still.

I am confused. Can you present a practical example? I don’t mean that the paint mode should retain one UV channel name globally. I mean it should retain the relation between selected Image Texture and selected UV channel. For example if I have object A where the UV channel using which I want to paint my “ColorMap” texture is called “UVMap”, and object B, where the UV channel using which I want to paint my “RoughnessMap” texture is called “UVTexture”, then I’d expect Blender to remember that the chosen UV channel for ColorMap was UVMap and chosen UV chnnel for RoughnessMap was UVTexture. Unlike the current state, where Blender just wrecks it based on which channel was selected in the mesh datablock.

Ah, now I understand. You want the UV channel selection to be coupled to the painting destination image. Instead of just using the ‘active’ uv map, it should look up the UV map that’s associated with the texture in the shader tree. Is that what you mean?

Not exactly:
If the mode is set to Material:
image
and the texture selected in the material has it’s “Vector” input empty or occupied by a node other than “UV Map”:
image
…then I would expect the behavior to be the same as it is right now. That the painting would be done by whatever the active UV channel is in the datablock, because the “Material” mode doesn’t have explicit UV channel selector.

If the mode is set to Material, but the Vector input slot of the selected texture is occupied by UV Map node with a specified UV map, then it should always use that specific UV channel:
image

But most important, if the Mode is not set to material, but a single image:
image
Then the selected UV channel, in this case UVMap, should NOT be tied to the datablock UV channel selection. So that if I am painting this BaseColor texture, then I exit the paint mode, and in object mode, switch UV channel in the mesh datablock to another one:
image
When I return back to the paint mode, it should not look like this:
image
But like this:
image

Interacting with the active UV channel in the object mode should not change it in the texture paint mode in Single Image mode. Worse yet, as I said, there is nothing that communicates to the user they are not setting UV channel for the texture painting, but instead are changing the active UV channel in the mesh datablock. Or in other words, there is nothing implying that these two are tied together:

Just try it yourself. Go into paint mode, select “Single Image” mode, select your desired UV channel, and start painting. Then exit the paint mode to object mode, add another UV channel (which will make it also active), and return back to the texture paint mode, you will see that the selection of the UV channel you have made has been discarded, and the mesh datablock active UV channel has been selected instead.

1 Like