normalScale is a Vector2. What for?

The docs don’t really say how to use normalScale. When do we want the scale to be different on X and Y? Is this normalScale similar to a adjusting the X/Y position of a drop shadow in CSS? What is the equivalent in Blender?

The normalScale is a property of MeshNormalMaterial. The docs promise the following:

How much the normal map affects the material. Typical ranges are 0-1. Default is a Vector2 set to (1,1).

For the normalMap it says:

The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the y component of normalScale should be negated to compensate for the different handedness.

The normalScale seems to be a scale to a 2D-mapping effect, hence the Vector2. I would expect this to allow for anisotropic effects like brushed metal, to specify the intensity and direction of the brush stroke.

1 Like

I think it’s pretty rare that you’d adjust normalScale.x and normalScale.y independently, but one example would be to compensate for normal maps created with different UV texture coordinate conventions: GLTFLoader: Normal-Tangent Test model result is incorrect · Issue #11438 · mrdoob/three.js · GitHub