UVs: Blenders shortcomings

,

I’ve used Blender for professional Game Dev CG work for 4 years now. I’m advanced level artist in LP/HP, LP/LP, Midpoly and UDIM workflows, creating hard-surface buildings, weapons, vehicles and other props.

Blenders UV workflows are falling short compared to other software coming out. Addons created by community people have helped Blender stay afloat for long enough, but it seems Blender has points where it’s absolutely paralyzed compare to some other software, and there’s likely nothing addon creators can do about that, I’m not one so I guess they’ll have to pitch in.

I’m using Blender 3.6.5 and I’ve tested every single UV editing/packing modifier available.
UVPackmaster 3, UVToolkit, Magic UV, Zen UV 4.2, TexTools, and many other smaller plugins.

I bring this up because I see Blender Devs updating and adding features which are cool, but if core function such as creating, editing, packing and managing UVs is so poor, why add more stuff.

1.) UV Channels:
Thing you need to address is that when you take 10 objects, go into edit mode, and go to UVMaps, selecting UV1 or UV2 should toggle between those for all selected objects, not just the active one. Current system makes no sense. In dual or more UV Channel workflows you need to toggle between and compare. So far some addons have this function but why couldn’t it just be main feature.

Solution: Clicking another UV Channel swaps UV channel preview for all objects, not just active.

2.) UV Channels settings in OBJ/FBX export:
OBJ/FBX are the standards we use in Game Dev and many more industries. Every single software reads OBJ/FBX UV channels in the order they are in. So UV1 being first in order, UV2 being second. When you need to use Substance 3D for UV2 painting or Marmoset Toolbag for UV2 Meshmaps baking, first You need to collapse all objects into single Object in order to move the UV2 into First position in UV Maps panel. I sure ain’t going to manually swap them for each object. Yes, there are addons but I’m simply tired of scrolling through tens of addons for one-time-operations which I do many of.

Solution: Add option to change UV channel order upon exporting selected objects. This will remove need to do any channel reordering for UV2/UV3 texturing/baking - just swap them on export and Blender workfiles stay the way they are.

3.) UV Sync has to go:
I’m pretty experienced Blender user and I still don’t fully understand or can tell my students why we have the UV Sync. It’s useless, none of the other software has that. Fully rebuild this system. Study 3DsMax, Maya, RizomUV, and other software. Some operations work with Sync Off, some work when On, some in Both and have different results depending which is chosen. Please make it consistent.

Most of UV editing operations run on Sync Off. But when working with hundreds or thousands pieces of meshes within object or multiple objects to have them share UV, selecting and navigate to them is better done when in Sync is On. Thus, being able to select island and Focus to the item to see the grid texture and decide if cuts are right. Then to move on to next, you’d turn Sync Off again, then everything disappears from UV Editor, then again select all in 3d Viewport, then again start manipulating. It’s just never ending hassle in Blender.

Solution: Get rid of this system. Rework it.

4.) Copy UV to similar:
3.5 i believe new possibilities were added to transfer or copy/paste UV’s between similar topology. I must tell, none of them work flawlessly. The flaws it has makes it unreliable function.

Imagine taking an asset from client or non-Blender user, or just poor Blender user. The complex asset has been collapsed into one object. Mistake has been found or UV has to be edited. You have 100 bolts that are radially placed around pipes that run in some direction. Pipes are different position, different diameter, but bolts are exactly the same topology, mostly the same size as well, UVs are poorly done. Too many cuts and oriented randomly. Now i need to unwrap them from scratch.

What I would like to do - and Can do in Rizom UV - is to unwrap one of those, and click Update Similar and Stack Similar. What this does is, it recognises similar shaped objects in topology, applies same UV and stacks them, regardless of their seams or current UV island shapes.

What Blender does?

  • UV Editor has Copy UV_s and Paste UV_s which just… doesn’t work in this case. I guess you need everything exactly the same for it work.
  • 3D Viewport has UV - Transfer UV - Copy/Paste which uses just 2 faces (meaning manual labour to select Maximum 2 faces)…makes no sense and does not work even if selected.a
  • 3D Viewport has UV - Copy/Paste UV - Copy - Copy/Paste - it has the best chance of working. You have settings like seams and whatnot. But it will not work if you have not set same seams to the meshes and unwrapped them first (even banana shaped unwrap is fine). But if you have no seams and have no UV/distorted one, it won’t fix that.

UV Copy/Paste should work no matter the orientation of the mesh and whatever the status of its UV or Seams. This system has a potential, but it’s full of flaws. And that’s just simply doing beveled cylindrical shapes that have been arrayed previously.

Why this is so big of a problem? Because yes, in Single UV channel workflow this may not be such a big deal, but when asset has been textured, baked across 2 UV channels and just one little part inside of the whole textures asset needs UV manipulation, this wastes so much unnecessary time. So people turn to Rizom for that while Blender could be better.

5.) UV Constraints:
Blender UV could use a Rizom UV function.

Instead of Pins, which are hard locks of vertices, you would assign edges their orientation you would like to keep using constraints. Horizontal (X) and Vertical (Y) soft-locks for telling unwrap that these should be in line with each other and they can move along their X/Y axises respectively while using Angle or Conformal unwrap methods. This would keep islands from warping into bananas, while using different fill algorithm to rest of the vertices/faces.

Solution: Add X/Y (U/V) constraints option.

6.) UV edge rings selection:
We have in Sync Off mode option to select edge rings with ALT+LMB, but no option to select edges with Shift+Alt+LMB the way you can 3D view. This would be useful in some cases.

7.) UV margin in Pixels:
Blender is using margin in decibel fractional system, which is some odd math a person has to do. Space between UV islands is measured in pixels because texture is measured in pixels, and all baking/texturing software are using pixels to add padding to islands. Perhaps this could be also brought up to industry standards instead of the randomness of it now.

Solution: Add option to add texture size and margin in pixels for packer, unwrapper, everything.

8.) Display UV Texel Density:
We currently have Display Stretch (angle/area) option, which is great. However we could really use Texel Density display as well. If you have 100 islands, 90 have 500ppm and 10 have 20ppm, it would recognize majority as the base and minority as deviation, and then display this as a color, in gradient manner.

Lets say majority is Deep blue (500ppm). Lower ppm goes towards green color, higher goes towards red color, depending how much it’s deviated. It’s just indicator to bring attention to texel density inconsistencies.

While at it, please enable such display modes in both UV editor and 3d viewport, this can be useful.

9.) Edge connection indicator:
Currently when selecting edge that has been cut from other edge (sync on, ughhh), the connected edges are displayed as Yellow. But selecting multiple edges makes it difficult to assess which one is connected to which one. So please enable an option to enable something like “Show edge dependencies” or something. User can adjust the opacity of this indicator, make it thin line, maybe even select color for it.

Summary:
In game dev we use multiple UVs and cant always work with non-destructive workflows. To remedy this, there could be improvements made into existing features and functions.
UVs are the most important thing in Game Dev, even before normals. UVs have to be straight, every tickle of bend eats up pixels and when you have low PPM restrictions such as Lightmaps (4ppm) or UV2 workflow (could be 20-100ppm), every bend causes texturing issues.

I love Blender in every aspect but this. Please look into this, because I would hate to see Blender lose its grip.

Thanks,
B4GameDev

14 Likes

I’ve used Blender on and off for almost 20 yrs and I still dont understand UV sync :slight_smile:

Personally I wish the UV editor had lots more icons. I struggle to remember all the hotkeys. I struggle with the menu divings. I cant be the only one?

2 Likes

After 5 years I honestly cant tell from top of my head - will U key unwrap all islands regardless of UV islands selection when UV Sync On, or Off. I need to UV 1 island or all islands, i’m mostly doing it wrong once before getting it right… Lottery every day, because this makes no sense whatsoever. :smiley:

2 Likes

There is an addon that does this in Blender:

1 Like

Appreciate the shout out!!

2 Likes

These are great case studies, if you manage to cultivate them further and provide a plan, there could be a developer having a well-thought-out blueprint to work on.

1 Like

No worries mate. Its an awesome addon. Thanks for making it :slightly_smiling_face:

2 Likes

I’m going to do some UI research. Which programs have the best UI for this feature?

I dont know that there is UI example of that, I would imagine it being something like:


UV order:
UV ID 1 (=)
UV ID 2 (=)
[+] ← either manually add knowing you need more, or auto-detection adds all used channel names to list instead of the Selected Objects.


Sort by dragging by LMB+drag the (=) sign

UV ID 1 can stay as this name or other generic understandable format or preferred would be getting name from used naming conventions.
Blender’s default being UVMap, UV2, UV3
User preference could be anything.

That helps?

…So far some addons have this function but why couldn’t it just be main feature. …

I appreciate peoples tools but it shouldnt be necessary to get such function from community if this could be just one tick in the code for them to change that. We can go to edit mode for multiple objects, why cant we then toggle UVMap index in all of them at the same time, what’s the point. Thus I bring it up as a weakness of their build.

1 Like

For only educational purposes and curiosity, if you interested to look at the C++ source code to figure out how the unwrap modifier works.

After a bit of searching I located the unwrap function. From the Python UI tooltip bpy.ops.uv.unwrap, trying to locate the operator I figured out this internal naming convention of UV_OT_unwrap

https://github.com/blender/blender/blob/2864c20302513dae0443af461d225b5a1987267a/source/blender/editors/uvedit/uvedit_unwrap_ops.cc#L2451

The settings related to the Unpack


// these are the initial unwrap options
UnwrapOptions options{};
  options.topology_from_uvs   = false;
  options.only_selected_faces = true;
  options.only_selected_uvs   = false;
  options.fill_holes     = RNA_boolean_get(op->ptr, "fill_holes");
  options.correct_aspect = RNA_boolean_get(op->ptr, "correct_aspect");

// ...

// then you have the rest of the uv pack island options
  blender::geometry::UVPackIsland_Params pack_island_params;
  pack_island_params.setFromUnwrapOptions(options);
  pack_island_params.rotate_method = ED_UVPACK_ROTATION_ANY;
  pack_island_params.pin_method    = ED_UVPACK_PIN_IGNORE;
  pack_island_params.margin_method = eUVPackIsland_MarginMethod(RNA_enum_get(op->ptr, "margin_method"));
  pack_island_params.margin        = RNA_float_get(op->ptr, "margin");

If this helps you in any way it would be nice, most probable is that in order to do your job right away, is to create your own operator, and force feed the unpack options the way you want, just in case you achieve more the exact result the way you want.

The only Python options you can override are these.

bpy.ops.uv.unwrap(method='ANGLE_BASED', fill_holes=True, correct_aspect=True, use_subsurf_data=False, margin_method='SCALED', margin=0.001)

The rest of the params related to uv unpack islands, are read from the bpy properties, as you see in C++ code are either prefixed (rotate_method, pin_method), and the other are read from bpy (margin_method, margin).

I hope this helps a bit, if you are able to find a fix it would be a good deal. :slight_smile:

1 Like

I get what you are saying and I agree with you 100 percent but I have learnt its not the best to wait for blender devs to add something. Most times it might never be added or may take a very long time before they add it. Take Light linking for example…that took a very long time but I am happy they added it finally.

I do believe the devs are doing their best but they are a small team and managing Blender’s development is a huge task so they will always have priorities when it comes to what they want to add as well as who they need to hire to get the job done as its funded by donations.

So if I need a feature I search online to see if someone has made a script or addon for it. The addon I suggested is free to use. Hopefully you find a solution to the issues you are experiencing. Maybe look up uv addons for Blender and see if any of them have the things you are looking for. Some of them might be paid though.

1 Like

As a game developer I fully agree on all points. The lack of texel density tools especially is the most puzzling thing considering how absolutely essential texel density is to good texture mapping in games. Add-ons should not have to cover the basics of UV mapping, especially when they can easily break or be abandoned by the add-on developers.

At least some things regarding UV mapping have been improved over the last few years, but the vast majority of that work were done by Google Summer of Code students. 3rd party developers shouldn’t be the only ones that work on something as essential as UV mapping.

4 Likes

What is weird about UVs in Blender is that without addons the tools are simply incomplete. Many things are impossible. If the BF wants Blender to be a complete package, as Ton said again yesterday in his keynote, such crucial piece of modeling can’t be left out. Using addons can’t be a requirement for such a basic feature that has been commonly used for the last three decades.

2 Likes

A while ago I unwrapped a pretty detailed X-Wing model.
A little over 1 Million Polygons, I ended up filling 44 UDIM’s.
It was a gigantic grueling endurance test.
I would say I probably hated every minute of it, but I can’t even remember how I did it.
The idea of doing something of that scale again gives me the creeps.

Long story short, I agree 100% with the general sentiment in this thread.

1 Like

Perhaps so, thanks for your contribution :slight_smile:

1 Like

Thanks but I really dont read or write Python, i gave it a try but there are too many linked parameters to another python command to even assess where the missing code starts or is located at for me to understand this. I can answer additional questions if there are any :slight_smile:

Being a vehicle artist working in a mainstream gamedev myself I fully agree with all the points. I would also like to add:

  1. Poor experience when UVing objects with multiple materials (texture sets). It’s confusing to see all UVs for all texture sets simultaneously. It results in a cluttered 1,1 UV square. Sure, you can select faces by material in the properties panel, but it works only wit UV sync off, not to mention less than ideal UX.

Solution: Implement a simple UV visibility filter by material (like in 3ds Max).

  1. Not directly Blender’s UV problem, but this got me so many times:
    Imagine you have let’s say 4 objects
  • click on first one and enter edit mode
  • do your uv work(or any oither edits) on this object and exit edit mode
  • now you are in object mode, select other 3 objects by dragging a selection box (if you have statistics turned on you will see “Objects: 3/4”)
  • enter edit mode, and voila! You are actually editing 4 objects (statistics changing to 4/4), because you never changed the active object.

Now imagine real worlds cases when you select hundreds of objects, do mass edits in uvs, pack them just to realize later you screwed active objects UV’s. The whole idea that you can edit something that isn’t selected terrifies me.

Solution: Do not pass the object to the other mode if it is not selected, even if it is active.

4 Likes

Good points there.

I myself tend to Shift+H (hide unselected) in either Object or Edit mode to do my work but it is absolutely crucial to Alt+H (unhide all) before commencing to UV packings. Countless times I’ve been summoned to someone to help them with ‘a bug’ where UV editor is clean but something in Substance is baking over all islands. After many settings checks Alt+H reveals hidden geometry that has UV overlapping parts of UV.

Another thing I do is separate all objects by materials to remedy any issues beforehand. But that’s not always possible as you know.

But I agree this shouldnt be necessary. Should just be looked into by devs while at it.

I’m probably one of the few that actually likes how blender handle the UVs.

3 Likes