Scratch texture generator (geometry nodes)

Recently I saw a post detailing a scratch texture generator addon. But I figured that it would be easy enough to create the same thing utilizing geometry nodes.
Here is the addon that inspired this:

And here is my result:



I also added the function to create normal maps of the scratches


Since the geometry of the scratches is this V shape. This way I thought that the normal map would better represent the actual topology of the damage.

Of course the workflow is completely modular, you can have multiple layers of different scratches, just duplicate the node group


And here is a look at the inside of the node group:

Now here is an example of the effect it gives to for example a metal material, but you can get creative whith how you use it.

In this case I am using the generated normal map. And using tri-planar projection to get rid of the UV seams. (You can also just set the projection method in the image texture to be “Box”)

Also to note, if you make the sizes of the scratch curves too large then the seamless tiling effect breaks at some point. But I tried to mitigate that as much as possible.

You can get the blend file on my gumroad for free: https://mart0nnn.gumroad.com/l/scratchy

If anyone makes something cool with this feel free to share in this thread!

10 Likes

Added the option to make circular scratches:

I also made a shader node group that combines 3 scratch maps. This is to demonstrate the use, and to have a easy to use way of adding scratches to anything.

This node group combines 3 scratch textures that I made, but it can be changed to custom textures.

The gumroad file has been updated to the newest version!

This is great stuff, thanks !

1 Like

I’m glad you like it!

I have also taken a look at the iridescence of micro scratches, and with some pointers from others I have come up with something that kind of works.


It is a very subtle effect but could add extra realism with closeups.

Rigth now this is the setup for this effect:


Where the input inot the map range is the greyscale mask of the scratches, and the input to the normal of the layer weight node is the normal map of the scratches.

So far I have just been eyeballing it with what looks correct and what doesn’t, so if anone knows of a better method then do let me know!

1 Like