6
$\begingroup$

I have a simple displacement setup as follows:

nodes

When I apply this same material to two differently sized objects, the displacement seems stretched on the larger object:

screenshot

Scale has been applied (Ctrl+A).

Is there a way to make the displacement the same 'scale' on objects of any size?

Here is a link to the sample .blend file:

https://1drv.ms/u/s!AqKxXPZzafVQla8hzonVpxSvpK9jwQ

This was created using Blender 2.8 beta.

$\endgroup$
  • $\begingroup$ have you applied the scale (ctrl A)? $\endgroup$ – moonboots Feb 15 at 11:20
  • $\begingroup$ @moonboots Yes. I have just updated the question to state that, thanks. $\endgroup$ – rhughes Feb 15 at 11:22
  • $\begingroup$ Try to plug Object socket from Texture coordinates to Noise texture $\endgroup$ – Serge L Feb 15 at 11:42
8
$\begingroup$

To have consistent scale, create an Empty in your scene and make it control the texture scale.

  1. Create an Empty

  2. Edit your material by adding an Input>Texture Coordinate, using the Object socket and linking it to the Empty in the "Object" dropdown

    enter image description here

  3. Scale (, Rotate, Move) the Empty to make the feature the size you want. This will apply in a coherent way to both objects that share that material.

enter image description here

Big Empty

enter image description here

Small Empty

Note: if your object is going to be moved in animation, and you want the texture to stick to it, then you should either (1) parent the empty to it, (2) consider following Mark Jackson's answer (although you will need to adjust the proportions of the texture manually), or (3) use an UV map.

$\endgroup$
  • $\begingroup$ Ingenious! This answer also helped me learn something cool :) $\endgroup$ – Mark Jackson Feb 16 at 2:05
1
$\begingroup$

If you don't use UV textures, then applying materials will try to fit it to the entire object. So if your object is long, then it will stretch to fit your mesh.

To fix this, in your node editor, press "Shift+A" > "Input" > "Texture Coordinate" Press again "Shift+A" > "Vector" > "Mapping"

Connect them up like this and in your Mapping Node, using the Scale to make the noise texture fit to the object. In my case I used the Y axis and increased the Scale of Y by 10.

See below: enter image description here

I hope you can see it ok in the image and that this helps you.

$\endgroup$
  • $\begingroup$ One more thing, without defining the parameters (in this case, the scale) by using a Mapping node, blender will automatically assume the default values (X 1.0, Y 1.0, Z 1.0) and project the texture to fit onto the mesh object which in our case, is not uniform on all sides. So we need a mapping node to tell blender that these values are not default values and it needs to stretch or squash the texture to fit correctly onto our mesh object. In the texture coordinate, using Generated or Object will probably yield similar if not the same result. $\endgroup$ – Mark Jackson Feb 15 at 12:04

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.