Geometry Nodes UV Unwrap

Hi guys!

Hi guys, I have this setup for a UV Unwrap, everything works fine until I set the box dimensions under certain value, then the UVs are rotated as Blender tries to fit as mux as it can to the UV space. Any idea how to fight this? I tried to put in a Vector rotation node, which works fine, but don’t know how to let it counter-rotate only in the cases when blender rotates the UVs. Thanks!


Been wondering about this…

Why not just use the Cube mesh primitive as your starting block and use its UVs?

UVs will remain the same no matter what the dimensions of the box.

Good luck.

2 Likes

@zeroskilz That’s great, thanks!
Is there a way to keep the UVs proportional and not separated? :slight_smile:

The “dangly” bit of the UV map is the Y+ face, so rotate your dimensions, remove the Y+ face then transform the box back and you’ll have the “optimal” UVs.

Good luck.

@zeroskilz Awesome, thanks! It makes sense, gotta adapt these logical reactions :blush:
Is there a way to have the UVs proportional, so the single faces in UVs wouldn’t be squared, or is that the part that made the original problem with Blender then trying to fit the faces in the UV space and rotating them?

Thanks a million times

Yes… but it’ll be a mission.

Yes.

1 Like

:smiley: :smiley: I’m on that mission for two weeks now and the rotating part seems like a last piece to the puzzle.

It’s supposed to be a porduct packaging, so if the UVs are squared, I’ll have to deform all labels and texts in the texture, so it looks correct on the box. Is that a correct way to go?

Thank You! :pray:

You can store the box dimensions as a Attribute and use that in the Shader to scale textures with a Mapping node, masking by normals. Having a constant UV layout should make other texturing tasks simpler.

1 Like

Okay, I’ll wrap my head around it and test it. Thanks a lot for all your inputs :pray:

Did you mean like this? :slight_smile:
Only thing I’m trying to figure out now is what should be the number in ‘Store Named Attribute’ node at Y vector. I eyballed a value of ‘3.000’ but is there any precise, procedural way how to connect this to the box height?

Thank You again

Erm, not really…

I mean the same values that determine the box dimensions at the start of your network…

Reroute that to the end of the network and capture it there:
image

Then use that in the Material Editor to “Mask” off the various “sides”:

To give consistent scaling on textures irrespective of size:
image

Good luck.

1 Like

I was so happy that this is finally it, but unfortunately the seams are not correct. Only one is matching as seen in pictures. So the either the Unwrap isn’t ideal like this for continuous textures, or I am doing something wrong :frowning: Any ideas?

I really appreciate your time spent on this, thank You :slight_smile:

Best you can do is make the center of the “cross” in UV space seamless and you’ll need to add some extra “Location” transforms math to do that (exercise left to the reader :wink: ). I suggest you look up some techniques to hide the other seams by mixing in on the edges… there are some solutions for that on this site I just can’t find it. Maybe someone else can pitch in with a suggestion.

1 Like

Wouldn’t it be better to chase after the original rotating problem, as the UVs are seamed perfectly there?

Depends on your use-case. Would have guessed constant UVs would be best but was wrong…

To do it with generated UVs you can pick any edge line on your box and Dot it with (1,0,0) and if it is anything other that 1, 0 or -1 then rotate your UVs by 45 (in the Material editor to keep things simple.) :man_shrugging:

So after many tries I came up to this solution with a help from Erindale’s community on Discord.