Weight paint on normal map on Z axis

Hello, I used a “normal” on Texture Coordinate in shader editor, with that I achieved that the grass texture is only on top of the object.

But now what I want to achieve is to weight paint on “normal” on Z axis, so that I can have all the grass particles being emitted where the grass shader is. I don’t want to waste time manually weight painting the parts that have grass texture over it, I want it to be done automatically just like the “normal” on Texture coordinates did it with grass texture.

Hi @Vadrigar,

The particle system doesn’t ( to the best of my knowledge) allow interactive access to Normals, so you’d probably have to use a vertex paint, which as you say is inefficient.

However, it is possible in Geometry Nodes:

The Green patches on the left ‘rock’ are coloured by Normal ( Z axis), the rock on the right has a simple blade of grass distributed across the equivalent normals using a maths ‘filter’ that acts much like the ColourRamp in the texture Nodes. Although you can’t ( that I’m aware of ) have one directly affect the other, it is really simple to dial in what you want. The RED box contains the relevant node. The other nodes control scaling and rotations to add randomness.

Here’s the Blend file if you’d like to explore / use.
Grass_by_normals.blend (2.1 MB)

Cheers,
Dj

2 Likes

Thanks a lot fella, It works on Blender 3.0 . I need to emit a collection of grass, not just one object called “grass blade”, but I will find that out by myself.
Now I gotta find out how to get and enable the Cycles X.

1 Like

by the way, CyclesX is the default Cycles renderer in Blender 3.0.

I don’t know why they didn’t keep the ‘X’ suffix, but there you go.

Dj.

1 Like

Hahaha ok great, I thought how it doesn’t have X in it but yet it all rendered faster.