Easiest way to keep texture scale consistent across multiple objects?

Hi. I’m having trouble with what seems like would be a simple thing, but I haven’t been able to find an easy solution. I’m assigning the same material to multiple objects, and I need the material texture to be a consistent scale across the multiple objects. Image below…as you can see, I have multiple patches of grass (individual objects), and the grass texture is scaling differently across each object. I know I could go into the UV editor and scale them individually, but that seems like it would take a lot of time and eyeballing. There has to be a better way, right?

Please check this add-on: https://gumroad.com/l/CEIOR

Basically you will select first the target object and the reference object, then simply click TD from active to others, that would make their texel density the same.

I have a similar question and I want to understand the why and how of texel density. In this very poor diagram, #1 I have the texel density the same for both objects sharing a texture (this is how TD should be, right?) BUT doing that makes the pillows show a lower resolution of the texture. I can get a closer match by having a different TD for each object (#2), but as you can see below, this causes the UVs to be outside of the texture image, which is bad.
So is the problem just the number of vertices in each? The pillows do have more subdivisions (no modifiers on either object), but the bottom cushions also have more subdivision than the frame of the couch so I would expect to see a difference in resolution there too, if that were the case.

Did you apply scale for cushions? If they are scaled, it might also cause the difference in density.

One way is to select all objects and UV unwrap them all at the same time. Only problem seems to be that you can’t add an additional object with the same scaling later.

This trick sometimes it works:
(After you UV unwrapped properly the 2 objecs)

  • select both objects and go in edit mode
  • Select all vertices if not already selected
  • Select all points in the UV map editor if not already selected
  • UV > Average Island Scale

For simple Objects like the patches of grass in the opening post you can just use the object coordinates instead of the UVs. That should make the texture the same scale on all of them (given that the scale of all object is applied).

Using the object coordinates and setting the images to box mapping should even work fine on the couch, if it’s just supposed to be a background object and you don’t wanna have extra details on the seams and so on.

When using object coordinates, the texture appears normal on the top of the object, but is extremely stretched on the sides. Any solution for this?

You probably have to set the projection method in the dropdown menu of the Image Texture node from Flat to Box.
If you get visible seams play a bit with the blend value. (Though be careful when using this with normal maps, as it will usually butcher them)

If you’ve already done that, check if the scale of the object is applied.

Also note that box mapping will usually distort the textures on areas that are not perpendicular to the X, Y or Z-axis of the object.

I hope that helps.

Some shaders are meant only for 2d projection (like the brick texture) and will stretch on the z axis, there is a way to force box mapping with nodes, check out this thread, I often use Yashars node group, he shares the blend so it is easy to append his texture and copy the mapping nodes to yours.
This applies if you are lazy like me and do not want to unwrap!
The thread:

1 Like

Scale was applied. I think the issue was I had a mapping node attached to my image texture. After that I was able to get the textures to match each other.

Still having the issue of the UVs being outside the UV map in order to get a resolution that looks good. It’s a 4k texture… I wonder if my scene is just too big? (That’s got to be it, the couch is like 4.5 meters long)