Geometry Nodes

The thing you’re “capturing” vs the thing you’re scaling are “disconnected”. - Sample Curve samples relative to a curve, so it would need to be re-captured onto a curve for the instance to make use of it.

The solution is to do the resample-shift on the curve points, not the instances. Also, do scale calculations after shifting so scale and “shifted” factor are in sync.

image

May have misunderstood the question tho.

Edit: if you were asking how to move single elements, then you’ll need to do some type of masking, maybe using a switch will work in your case:
image


…e.g. here the 3rd element of every curve will get shifted.

Dig your channel, good luck!

4 Likes

The issue with seam was that I used vertices instead of faces to instance because of domain interpolation

I think you can like this with Distribute points on faces and there is no seams issue

3 Likes

Is there a better way to achieve this and/or can someone explain to me exactly what I did? Because, I can’t explain it to myself.

3 Likes

You could do that using sine math, but the wave texture will do in this situation depending on your use case or how modular you want it to be.

You displaced the position by adding the normals to the position. Multiplying them by a texture will create a mask that will effect how much vertices are moved.

2 Likes

Hi again ) I’m facing famous problem with UV after Realize instances node… But in my case i have collection of dozens of objects with ~100 different materials. So i have manually add UVMap attribute to vector of all image textures to rebuild textures in GN, and that will take eternity. Is there is a way to transfer UV of collection of objects after Realize instances? Or script/addon that adds this attribute to all images textures of all materials automatically? Thanks!

This should do it

import bpy

for mat in bpy.data.materials:
    if mat.use_nodes:
        for n in mat.node_tree.nodes:
            if n.type == "TEX_IMAGE":
                n_attr = mat.node_tree.nodes.new("ShaderNodeAttribute")
                n_attr.attribute_name = "UVMap"
                n_attr.location = n.location
                n_attr.location.x -= 250
                mat.node_tree.links.new(n.inputs[0], n_attr.outputs[1])
9 Likes

Works perfectly, thanks! Now we can use modifiers on collection with UV mapped materials easily )

1 Like

Expand Selection

Edit: Added option to contract selection when setting negative Steps values

Expanding Selection.blend (1.4 MB)

14 Likes

o_O

that is alot of nodes…

we are going to need something native that just uses a map of what edges each vert is linked to

4 Likes

I imagine it will be fixed with loops (or a native grow selection, but that’s for cowards)

4 Likes

Hi,
found another way to map face indices to face-corner indices:
Face-Corner Index Offset test.blend (100.5 KB)

image

Made a node-group that gives the n’th face-corner of a face:

…for testing purposes I tried implementing it using the “interpolation” way, and also an accumulator way…

Accumulator way:
image

Interpolation with offset correction way:

…both give the same result, where you can get however many face-corner attributes per-face, for whatever combination of polygon sizes in the meshes.

I think the accumulator way is more intuitive (if you’re used to the accumulator), but I suspect the interpolation method will perform better.

Thanks.

@Xeofrios : cowards, and coders who experience physical pain when they see the sanctity of the DRY principle being violated. :wink:

7 Likes

Made this little test animation using your Divider preset and Animation nodes! )

11 Likes

Looks pretty cool!

Nice founding, I can use this to calculate mesh volume (using signed tetrahedron volume technique) without triangulating mesh. There is small discrepancy in measurement because how polygons are spit in to triangles but it works.

Thanks!

8 Likes

Hey everyone, I’m having some trouble transferring an attribute (colour) from an image texture on a plane to a curve and then to instances on that curve. The idea is that the instanced spheres will take on the colour of the image beneath them, but right now the colour attribute is not being transferred and the spheres are black. What am I doing wrong? Here’s the two node networks I’m using right now. Thanks :slight_smile:

1 Like

Pardon the noob question:

How to scale or tile a texture used for displacement using geometry nodes?

2 Likes

use box projection, and then you can scale the world vector before input into the box projection

1 Like

To scale a texture, you can use a vector math node set to multiply on the vector of the texture. To get a repeating tile, use another vector math node set to absolute.

1 Like

Like this?:

‘scale’ works well

1 Like