14
$\begingroup$

I just recently got into the nodes system, my knowledge on the subject is limited.

I can't seem to find out how to tile textures using my current node setup, because it doesn't tile the them on its own.

I know that I could be using a Vector Mapping node, but the way I'm modeling this requires that I texture each part of the building individually.

If I use a Vector Mapping node, I'll have to manually adjust each individual part myself. The nodes I'm currently using

Current node setup

The problem that I'm having is that if I use the same nodes for a mesh with different dimensions they get stretched.

Ugly

I want to avoid the need of using Vector Mapping nodes and just give it the ability to tile the texture so that it goes over a mesh of any size without stretching.

$\endgroup$
23
$\begingroup$

The concept you are missing is UV texture coordinates.

Normally you would have to Unwrap your mesh and build a UV Map, but that is not always desirable or practical, and for most simple cases automatic texture coordinates will suffice.

If you plan to animate your object with deformations (rigging, armatures, shape keys etc.), or wish to export your model elsewhere (say a game engine or external application) you have to unwrap. Procedural or "generated" texture coordinates are created by the engine at render time and can't really be exported.

Otherwise, for that you have to use an Input > Texture Coordinates node, you can use either Generated texture coordinates output or the Object type coordinates.

  • Generated Coordinates will apply exactly 1x1 tiles of texture per object and stretch along with the object dimensions even if you change it's size (similar to the behavior you are currently getting in your images).

  • Object Coordinates will use the object's local coordinates for repeating your texture across the surface, exactly one tile per Blender unit (measured in object local coordinates), if the object grows in Edit Mode, more patterns tiles show up without stretching or distortion. If you scale it in Object Mode you will affect its local coordinates, and textures will stretch with it.

For both cases use the Vector > Vector Mapping node to adjust texture size or repetition of the pattern on top of the default value.

By default without any texture coordinate input in your node setup Blender falls back to UV Coordinates for any image based textures, and Generated for procedural textures, but the Vector Mapping node alone is inert on it's own and won't have any visible effect on textures (it may even make textures disappear). You will have to explicitly feed it some base coordinates to work with.

Texture Coordinates

This is how the Vector Mapping node should work for all XYZ axis. Make sure your texture is set to Box projection method.

Vector Mapping

Have in mind that scaling the object in Object Mode without applying the scale will also stretch object space coordinates and thus textures along with it. To counter that you may use an Vector > Vector Transform node from Object to World to convert between coordinate systems.

Vector Transform

The Vector Transform node converts between coordinate systems, if your object is scaled non uniformly in Z axis the it's texture space will also be stretched, in that case you need to convert the texture space from Local to global space so it transforms from Object Coordinates to World Coordinate system.

This will have other side effects like the texture being "pinned" to world coordinates and remain static in relation to scene, appearing to "slide across" moving objects like a projector.

| improve this answer | |
$\endgroup$
  • $\begingroup$ I'm in the same boat I was in before because this was exactly what I tried earlier and I'm still in search of a way to apply it without having the Z axis stretched to the moon. Even if I do the same exact node system, every value I edit that is supposed to allow more tiles in the texture does not do anything, and only leaves stretched textures, leaving me irritated every time. $\endgroup$ – Gh0stRunner Jun 25 '16 at 8:01
  • 1
    $\begingroup$ The photo you attached makes no sense to me because I have replicated it exactly (After trying the same thing two days ago) and it does not turn out the same way. There is a single texture on the top in a corner, and the rest is stretched beyond comprehension. In your image, you have a neat, tiling of the textures whereas mine shares no likeness. $\endgroup$ – Gh0stRunner Jun 25 '16 at 8:03
  • $\begingroup$ Is your object scale applied and 1 unit in every axis? If your object is scaled, textures will invariably stretch with it. In that case you will have to add a Vector Transform node to your node tree to transform the coordinates from the stretched local space to world space as stated in the answer above. $\endgroup$ – Duarte Farrajota Ramos Jun 25 '16 at 12:54
  • $\begingroup$ My current predicament is that I have mapping nodes working fine and I can edit the X and Y axes of the texture to make it look however I want. But the Z axis is completely unresponsive no matter what values I change. I also can't seem to figure out the Vector Transform node. $\endgroup$ – Gh0stRunner Jun 25 '16 at 19:35
  • $\begingroup$ Updated the answer above, the Vector Mapping node should affect all axis, make sure your texture is set to Box mapping. The vector transform node converts between coordinate systems. You will need that if your object is not uniformly scaled $\endgroup$ – Duarte Farrajota Ramos Jun 26 '16 at 0:11

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