Scale bump map up with Armature/object

I’m having an issue with a rigged character, in that if I scale up the rig, the normal strength doesn’t scale accordingly, so the material ends up much less bump. Is there any fix to this? Seems like it should be something to do with the texture space setting, but auto texture space doesn’t seem to have any effect…

Normal map shouldn’t get stronger. It doesn’t contain that kind of information. Only thing that might need to scale up is true displacement, and that should scale with object-level scaling of the rig, IIRC. (On the other hand, normal and bump maps usually look best at a particular camera distance/fov/size combination, but that’s not a a function of any kind of character size, just the number of pixels they’re taking up.)

Try this: get a camera view and scale the rig about the camera. Does anything change? It shouldn’t.

But if you want, you can use a driver to control material values (like the strength input for a normal map or bump map node.) Or, you could compare object coordinates with object coordinates from an empty that acquired position and rotation but not scale from the object to determine scale, and use that as an input.

Should be mentioned that techniques involving this are going to differ depending on whether you’re scaling the armature object, or whether you’re scaling a bone (even a root bone) in that object. Above is assuming you’re scaling the armature object itself.

1 Like

Set the bump distance to whatever it is times the scale of the object. So if you have 0.002 (2mm) bump distance and scale up from 1 to 20, the new bump distance should be 0.04 (4cm). I think this should work. I’d give it a try anyway.

I don’t think this should happen on a normal map though, but I can understand why it can happen on a bump map.

1 Like

This is what I’ve ended up doing, and it works as expected but the downside to this is that I’m linking the object, and I might not always want to have the scale set to this level.

[quote=“bandages, post:2, topic:1194096”]
Normal map shouldn’t get stronger. It doesn’t contain that kind of information. Only thing that might need to scale up is true displacement, and that should scale with object-level scaling of the rig, IIRC.[/quote]

That’s how I’d have thought it would have worked, but unfortunately not- seems like the bump strength is a fixed number, so if you have a 1cm cube with a bump of .1, let’s say that’s the equivalent of a 1mm bump, if you scale the cube up so it’s 10 meters, the bump is still only 1mm high.

My quick test shows it scaling with object scale:

Still, if you want to get object scale in nodes, I tested out a driverless version, a way to grab it in nodes:

That gives you local x scale by checking the world length of an object-space basis vector. Should be obvious enough how to get y and z scale if you need non-uniform scale.

Hmmm, I can’t quite make out what’s going on in your image, but here’s a standard cube:

Here’s that same cube scaled up by 100:

and then with the scale applied:

This makes the material have the same bump strength compared to the texture size as the original:

(That’s the default 2x2 cube on top of the scaled up cube)

The first image is my test that true displacement is modulated by object scale: that scaling an object up or down scales up true displacement, because world space displacement distance is equal to displacement distance * object scale. It is a picture of two identical cubes, with the same material, at vastly different scales, but positioned such that the occupy similar amounts of screen space in the camera view.

You’re showing me what looks like Eevee previews in the first three pics and then a Cycles preview in the last pic. Eevee does not support true displacement, so Eevee pics are not what you should be looking at if you want to judge true displacement.

The fact that your first pic and your second pic are different is not because of a difference in bump strength, but because of a difference somewhere else in your nodes. There are any number of places where world scale, instead of object scale, can creep into your nodes. I would have to see them to say anything else (but better yet would be to just see a file so that i could see exactly what you’re doing-- you haven’t been clear about things like whether you’re talking true displacement or not, and a file would make all of that immediately plain.)

What? Then why is the third pic different than the first pic? Applying scale should break your bump, not fix it.

All eevee.

The 3rd pic is different because the cube is 1000 times as big as the first one, zoomed in, you can see that the ratio to the bump height to the texture size is as you’d expect, which isn’t the case in the 2nd pic. I can’t think of a case where you’d want this to be the way it works.

Here’s the nodes:

And here’s the blend:
bump_scaling.blend (619.3 KB)

Except that’s not what I see. I see that it’s even more different than the second pic. And I see, when looking at your file, that applying the scale makes it completely, utterly different. (Except that has nothing to do with the bump node-- you’re not using true displacement, so a bump node is just a change in normals, so it has nothing to do with scale. The difference is that it changes your object coordinates that you’re using to feed the texture input for your bump.)

Note that the biggest thing affecting your bump with changes in scale is your lighting, and you might consider temporarily hiding or deleting the light to judge this.

Looking at your file, the only thing that’s going on has do with sampling of the voronoi texture that’s feeding the bump node. I’m not sure exactly what’s going on-- it’s probably sampling over a larger area on the scaled up object’s voronoi, which has a drastic effect because of your color ramp that’s only interested in a tiny, tiny part of the voronoi. Or else voronoi is using object scale somehow, or else colorramp has a bug of some sort.) Here are two differently scaled cubes when I delete your light and skip your color ramp:

Here is your cube when I apply scale:

It changes because object coordinates are different, changing the mapping. Compare that to using generated coords (scaled up to simulate object coords on a standard cube):

Notice that the bump itself doesn’t change on applied scale (with generated coords, without true displacement), because the bump isn’t really bump, it’s a change in normals, and your normals haven’t changed.

TL;DR: You’re looking at the wrong thing. You don’t need to change your bump when you make object level changes to scale.

Exactly - the 2nd pic is not what I, or, as far as I can imagine, anyone would want to happen when scaling up an object.

That’s not what I said. I said the third picture is even more different from the first picture than the second picture is. This is to correct you when you wrote,

The picture might be different, but the dimensions of the material are exactly the same, which can’t be said for pictures 1 and 2.

Basically - if a texture has bumps that are 1mm in diameter, and also stick up (Apparently, I’m not necessarily talking about actual displacement here) by 1mm, scaling it up 1000 times should result in a texture with bumps 1000mm in diameter, and apparently sticking up by 1000mm. That doesn’t seem to be happening.

It sounds like you’re really sure of what’s going on. I think you’re mistaken, and I think I’ve demoed that pretty clearly and not just asserted it, but what does it matter what I think? It’s your cube. Still, if you’re really sure what’s going on, why aren’t you really sure about the solution?

If the bump doesn’t acquire scale, then scale up your bump height by multiplying it with your scale, using the node group I demonstrated if you want, or doing it by manually entering a value if you’d prefer. See if you’re happier with that.

Are you sure you want to use generated/object coordinates with a rigged character though? You should test that with preview node output to see what happens when it’s animated. I would really bake it down to a UV texture lookup and simply adjust the bump distance with the scale of the armature. Procedurals need a fixed to mesh coordinate system for things that deform, although generated can survive some deformation modifiers.

1 Like

Good point about the object coordinates, I’ll have to check that.

Short version - Make a material that looks like reptile skin, scale your model up, material no longer looks like reptile skin.