Randomly change diameter of instanced 'pipes'?

I’m creating an animated voyage along some ‘pipes’, like this:

Everything works well so far, but I’d like to assign random diameters (not changing over time) to each of the pipes so they look less uniform. I created the pipes using a Bezier spline with a Round Bevel applied to it in the Data panel (not a geo node - using a geo node to convert it to a mesh and give it thickness kills the ability to slide the texture that creates the illusion of light travelling along the tube). If I’d used a geo node to create the thickness, I could probably quite easily assign a random diameter…although I’ve tried sending a random value into the Radius of a Curve Circle and I get the error “Input expects a single value”, so that doesn’t work.

I used a simple Geo Nodes setup to replicate them and position them randomly:

Realise Instances doesn’t work because then my shader cannot assign a different colour to each pipe. This is my shader network (it moves the texture along the ‘pipe’ according to the value of “Glow Progress”)…

If anyone has any thoughts, I’d love to hear them!

Thanks in advance for any help,

Paul

Indeed, a circle only has one radius.
But a curve (spline) has many control points that have a radius attribute. Radiuses of all those points may correspond to a field.
That is what the Scale value of Curve to Mesh node (handling fields) is for.

By using indices of splines as ID and Seed of Random Value node, you can set a different radius per spline.

I plugged a random value into the Scale of the Curve to Mesh node, but it just assigns a random Scale to all the pipes uniformly, because the Instancing then happens after this stage. I need a random diameter to be assigned to each of the instanced pipes.

Also, converting the curve to a mesh means it becomes impossible to slide my texture along it, so unless there’s another way to move a texture along a mesh (not just in x, y, or z, but along the u or v), then I need to keep it as a curve.

Any ideas, please?

I see you hanging up on that false assumption; of course you can turn a curve into a mesh while keeping a lengthwise texture coordinate. Make sure you store the spline parameter ->factor attribute on the spline before curve to mesh and you can then call this attribute from the shader editor.

For your radius issue, you’ll have to realize instances and use a random value node with the spline index plugged into the ID. That will let the random value vary per-spline instead of per-point.

You could also just duplicate the curve directly (rather than instance it) and only then do a curve to mesh with varying radius.

Thanks for that; I tried playing around with your suggestions, but my rudimentary knowledge of geo nodes meant I didn’t get anywhere useful. For now, as much as I’d love to do it properly using geo nodes, having wasted all of yesterday trying to move a texture along a mesh pipe (and failing), I’m going to keep them as curves and just duplicate the whole thing a couple of times and change the Bevel Depth in the curve’s Data panel. Not an elegant solution, but it’ll have to do for now!

I’d love to learn exactly how to do this properly - with geo nodes - if you do possibly have the time to write up a more detailed answer, please?!

Given that you have all of twelve pipes, you could manually change the radius of each until it looks exactly how you want in about 30 seconds

Joseph is probably right that in this simple case, doing things by hand is more straightforward

I detailed everything necessary to make it work. Where are you stuck exactly ?

Just like mentioned in the other topics…

..but additionally captureing some other paramter..

(In fact there has to be some scaling in geometry nodes or the shader to make this look like this…)

Not only have you been given a detailed write-up, but in your last thread you were given a file that had everything you needed and you still chose to ignore it, do things your own way, and now you’re stuck again. I’m closing this thread- you have been given everything you need twice over, it’s time for you to use what you’ve been given before you ask for more