2
$\begingroup$

I'd to perform essentially the same type of UV mapping described in this question, i.e., UV map a mesh such that the resulting UV coordinates for each face aren't scaled or normalized and are based on the actual size of the object face (not limited to [0,1]). This is useful for large polygons intended to use a tiling texture with known real-world size, e.g., an image of bricks, a wallpaper pattern, or (in my case) a reference grid where the dimensions of each square on the grid should correspond to a fixed number of units in space.

Unfortunately, the answers provided to the question linked above don't work in my case: no alternative source of mapping coordinates produces the desired result and the UV project modifier isn't feasible given the number of faces that need to be mapped (since each face would require an empty controller object aligned with its normal vector).

The desired mapping can be accomplished in 3ds Max by disabling Normalize Map (sometimes called Normalize Clusters, depending on the dialog and version) when UV mapping. The 3ds Max documentation describes Normalize Map as follows:

When on, scales the mapping coordinates to fit into the standard coordinate mapping space: 0 to 1. When off, the mapping coordinates are the same size as the object. [...]

For example, if you take a sphere of 25 units that's planar mapped from the top, and then apply Unwrap UVW and turn off Normalize Map, then when you open the editor, the radius of the sphere's mapping coordinates is 25 units. As a result, the texture map is tiled onto the sphere surface many times. With Normalize Map on, both the sphere and the map fit into the 0–1 coordinate space, so they're the same size.

In general, for best results, leave Normalize Map on. One reason to turn it off would be to turn it off is if you want to map several elements of different proportions with a texture of a specific aspect ratio, such as brick, keeping the texture the same size on each object.

Is there a method that can be used to obtain equivalent results in Blender?

EDIT: it's important that the resulting UV map be "exportable", as my intent is to use the mesh and its UV mapping in another program.

EDIT 2: here are some screenshots from 3ds Max to clarify what I'm trying to accomplish. The upper images show the UV map and resulting texture mapping with normalize enabled (this matches Blender's behaviour) and the lower images show the result with normalize disabled (which I'd like to reproduce in Blender).

3ds max unfold UV mapping with and without normalize enabled

$\endgroup$
  • $\begingroup$ Object texture coordinates are the way to go, why won't they work for you? Only case I see they may fail is if you have lots of non orthogonal or curvy surfaces, or non uniformly scaled objects. If you really need UV Mapping you can try the Simple Box UV Map addon $\endgroup$ – Duarte Farrajota Ramos Sep 21 '16 at 16:38
  • $\begingroup$ @DuarteFarrajotaRamos using object texture coordinates (selected under Texture > Mapping > Coordinates) results in distorted mapping on all but one face of the object (the face in question lies in the object's XY plane). Most of the object's faces have normal vectors pointing in arbitrary directions (i.e., not along the x, y, or z axes). $\endgroup$ – Reign of Error Sep 21 '16 at 16:58
  • $\begingroup$ In your image texture switch the projection method from Flat to Box it won't totally solve non orthogonal cases, but it helps $\endgroup$ – Duarte Farrajota Ramos Sep 21 '16 at 17:14
  • $\begingroup$ Just read you edit, there are a few dynamic procedural ways to do it with Cycles node setups, but if you require it to be exportable then don't bother with any of those node based solutions since non will be exportable. Only way to get truly exportable UV Coordinates is through actual unwrapping or modifiers. Only option I see is that mentioned addon, if it still works in the current versions. $\endgroup$ – Duarte Farrajota Ramos Sep 21 '16 at 17:17
1
$\begingroup$

The Magic UV addon (available here) can be used to accomplish the desired result.

To install the Magic UV addon:

  • Place uv_magic_uv folder in the Blender/(version number)/scripts/addons folder.
  • In Blender, go to File > User Preferences > Add-ons.
  • Scroll down the list and enable "UV: Magic UV".

Use:

  • For a given texture intended to be X units by X units in size, make a reference square (e.g., the side of cube) of those dimensions.
  • Switch to the UV Editing screen layout.
  • UV map the square such that it occupies the entire UV area (no margin).
  • With the square selected, press U and select World Scale UV > Measure.
  • To apply the same scaling to other faces, select them, press U, and select World Scale UV > Apply.

A video demonstrating Magic UV's World Scale UV functionality is available here (recorded by Nutti, the creator of the addon).

$\endgroup$
0
$\begingroup$

Try "Average island scale" in the "UV" menu:

EDIT: Do read the responses to this answer, the solution in this answer is not precise, however it is easier than the "propper way" and in certain cases might just be enough. For the propper solution read Reign of Error's solution involving MagicUV addon.

$\endgroup$
  • $\begingroup$ It's my understanding that this ensures that all islands use the same scale (relative to each other), but doesn't ensure that they're scaled such that 1 UV unit = 1 actual ("world space") unit. $\endgroup$ – Reign of Error Apr 26 '17 at 19:51
  • $\begingroup$ You are correct, I recently realized just that. Still I am using this solution alongside Substance Painter and I never saw a significant lack of quality. I do believe my answer has the right to exist, as it it easier than the propper way. $\endgroup$ – cubrman May 2 '17 at 12:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.