Make UV maps scale to specific size of image

Ok so sorry it’s hard to write exactly what I’m talking about in the title - not sure if that made sense. I know there’s probably a one button way of doing this that’s super simple but I have looked and cannot find it, help would be appreciated.

For what I’m trying to do, I’m going to use floor tiles as an example. So if I get a texture from Poliigon, they tell me that the image they have made will make up 2x2 metres:

Now when loaded into the image editor, I know that whatever resolution it opens comes in at, it’s 2m x 2m:

image

But apart from scaling manually and kinda eyeballing it, since the units in my scene are already setup, is there any way of specifying the image is a certain size and Blender will scale the UV accordingly?

I’m having a hard time explaining it so let me know if this doesn’t make any sense. Thanks for your help though.

Since it’s a floor, it’s easy - don’t use UVs. Use object coordinates (may need to swap channels around) and a checker/brick texture (scale 1, everything 1) and multiply coords with a factor to get it right (or 1/factor). When you have done that, replace the checker/brick texture with image texture and multiply/divide accordingly.

1 Like

Thanks for the reply! I’m kinda getting what you mean, I’ve gotten a checker texture to be the right size:

You kinda lost me at the multiply coords with a factor part though…

Would this work in other use cases too? For example, for cabinet doors, from a supplier you can download an image of a particular color/pattern, and I know the image represents a full sheet which is 2.4m x 1.2m:

If there’s a simple way of getting this to work, that way I’d know with every use case (where you know how big an area the image represents) that it is perfectly to real-world scale.

Not automatically, no. Because we don’t have access to the objects dimensions. But you can use the below approach to find the 1.0m reference scale. The square on the left is exactly 1m x 1m. I’m using mm, so I’m dividing.


But, set it up like this and just eyeball it based on that. What people will notice is having the exact same texture on each cabinet door - it looks like sloppy CGI. Main grain direction is more important than end grain. Fewer will notice it being made from a single wood pane even if the manufacturing process calls for multiple panes glued together. But nobody will notice the scale being off unless it’s by a lot.
Ceiling, floor, backsplash and wall tiles; sure. Scale matters more here because you can use it to measure distanced by counting tiles with a known tile size.
My favorite for wood is to create a huge seamless texture where I just lookup different parts of it. Often not using regular UVs at all, just spaced out points that I add to box mapped.

1 Like

I think I’m following. I’ve made a more simplified node setup, and it seems to work:

This is the result applied to a few different types of objects:

I’m thinking I could just use a mix node with the material preview view, that way I can see where my 1m ‘guide’ checker squares are and how my texture sits in that. I think that comes out pretty good:

Is this what you mean?

Reason I was talking about the wood too is I know none of it has to be perfect but I mean if there was a one button press way of making it exact for things like these, then to me that’s always better than eyeballing. But if you can’t I’m ok with eyeballing it I was just wondering if there was a perfect way…

Is it a possibility though, could we scale all the faces in the UV editor based off an edge or face? I mean I could just add in a 2 x 2 (or whatever size the image is known to cover) plane with my floor object in edit mode, select everything and scale it so that 2x2 face fits the texture bounds exactly (while also applying that same scale to all other faces) and then everything else would come out perfect too, is that possible?

There is a perfect way to unwrap accordingly to the size of the texture. In this image below, I applied a wood texture which size is 1m2x2m4. First I add a plane then resize it to 1m2x2m4, apply scale, UV unwrap it perfectly. Then I choose all object I want to unwrap which is the closet and the plane itself. Hit tap to unwrap all, select all faces in UV editor and shift select the plane face (which is the perfect size, in my case I click the bottom right where the circle is), hit U>Follow active quads>choose length or length average both ok. Then you object will be perfectly unwrap to the real world scale.


1 Like

Ah that’s awesome, that’s the perfect solution, thanks!

Actually that way I found not entirely correct. I’ve just found the “really correct” way as described below. You could try this one if previous method doesnt work.

In this example I want to UV unwrap the wardrobe on the right size ( 2000mm x 600mm x 2600 mm) with real world wood texture scale. Since I know typically wood panel has 1200mmx2400mm dimension, I add a plane which size is 1200x2400mm, UV unwrap it with Smart UV.


Then I apply wood material to the wardrobe, since it is a cube resized and applied scale, the default UV is of a cube

I apply Smart UV project, the proportional of UV island is good but the scale is wrong, as you can see the wood texture on the wardrobe is scale up too much. For interior visualization this could make or break a whole scene since wood texture from manufacturer is provided with correct dimension.

Turn on Magic UV that comes bundled with Blender by default. What we look at here is World Scale UV. I don’t know why it is only on the edit mode on 3D Viewport, not found on UV Editor.

Enter edit mode on the Plane, hit U>World Scale UV>Measure

Come back to the wardrobe, U>World Scale UV>Apply (Same Density)>Ok

We could see visually on both UV editor and 3D viewport that the wood texture on the correct scale.

2 Likes

That’s awesome, it’s a game changer! Thanks!