Modifiers for splines?


Active member
Modifiers for splines?

* :confused: :confused: :confused:
* Is there a simplish way to generate a cluster of identical splines?
* Similar to a linear array or a radial ring of poly objects.

* I have here a hierarchic cluster of neurons, basically a minute section of the CNS´s (= central nervous system´s) grey matter. For simple modelling / animation purposes, all neurons are morphologically identical: 6 dendrites on top, soma, axon, 6 axonal terminals at the bottom. There are 3 levels, eg sensory input + some cerebral processing + muscular output (clearly and grossly simplified).

* To animate different patterns of the transmission of impulses I want to have lights (real or radiant spheres) propagate down the consecutive neurons, typically modelled by spline-tracking the blobs on pre-existing Beziers or NURBS.

* I tried a particle mesh of splines, but neither can I use a PM as a component of a sweep, nor can I use it in a spline track.
* As I got frustratingly stuck in any attempt at a solution, I am now experimenting with different ideas, but it (a cluster of splines) does not seem to be an exotic step of design.
* Thank you for any ideas :smile:

PS: As it fits to the primary query: What for can I use a particle mesh of splines, anyway?


Last edited:
Hi Helmut,

how to array or modify splines I don't know.

But you can take a spline and
- make a sweep of it
- have a ball with spline tracking tag move along it
- put both in a folder
- put folder in a particle system

To my surprise the animation multiplies along each particle position and orientation.

As hinted in an earlier thread, alternatively the color blobs moving along the axons can be done as animated materials.

Please check example files and animation.

- greetings to Vienna!


Last edited:


Active member
* Thank you, Miss OS!
* Your suggestion looks like a major step to a solution for my problem.
* As I implied in my original post, I had experimented with particle meshes as a basis for the spline tracked impulse zooming along the input & output fibres. Due to a structural error I got stuck in frustration.
* In future I should outsource any conceptual thinking tasks to humans who are demonstrably better at it than me :redface: :frown:

* This architecture - with a few more bells and whistles added - should allow me to use a fairly generic minimal neuronal net for a set of 6 or so videos on different principles (normal stuff, back propagation, neuroplasticity et al).
* Once more, muchly obliged for your help!
* Have a pleasant day :smile:


Active member
:smile: Wow Miso!
May I ask how you animated the color gradients moving along the splines?
What did you record and how did you record it to achieve the results?
I tried picking your jas file apart but I’m lost.
I guess I don't know what I'm looking for.


My Best


Active member
Hi Jeanny,
* There is some info in the thread entitled "gradient" from the 23.08.2018, including a sample from Frank and misOS. Essentially it is a pulse train with a softish edge (I don't fully understand it, as yet :confused: :redface: ). In any case, it is good fun to delve into the trickery of vector maths and the mysterious noodle system of materials.
* Have a pleasant day :smile:

* PS: I dimly recall that you were involved in a thread - probably 2 years ago - using the instance node as an input for fairly complex trickery, either chained objects or a particle mesh on a spline. Most likely, you grasp the node system much better than me, anyway.
Last edited:


Active member
:D Thanks Helmut!

That sure was a fast answer!
I'll check things out right now.
* Have a pleasant day
Back at you.
* PS: I dimly recall that you were involved in a thread - probably 2 years ago - using the instance node as an input for fairly complex trickery, either chained objects or a particle mesh on a spline. Most likely, you grasp the node system much better than me, anyway.
That must have been a rare good day I was having.
Most of the time I really don't fully understand what I am doing. Not that I don't try hard.
Unfortunately I have to rely on Happy Accidents most of the time.:tongue: :confused: :redface:

My Best
Thanks Jeanny!

Unfortunately the "membrane" material in the colorsplinicles file is quite complicated because I used the instance node's "rand" output to get different colors and velocities.

I made a simpler material with a node setup easier to understand:


As Helmut has already stated, it is based on a pulse train node which creates stripes when given a position input. I'm using the y-component of the UV1 from the state node here in order to get bands across the spline sweeps.
When I add the time output those bands will automatically move along the sweeps without any need for keyframes. Here I use a multiplyadd node to multiply the time value with -0.1 to slow it down and give it an outward direction.
The black gradient from the I-N output of the state node produces the membrane effect by lighting only the sides of the tubes but keeping the middle black.
The white gradient does the opposite, it makes the middle white.
Now I'm using a mix node with the pulse train determining which of the membrane gradients to use.
The whole thing is a pure emissive material because that renders the animation fastest without shading.

I'm including a file with the simpler material here:



Active member
* Thanks misOS :smile:
* As an ignoramus in the noodly cosmos (slightly improving after a fair bit of research and experiments), this is very helpful.
* I am still playing with the random function :tongue:
* Hi from Vienna!


Active member
Final comment on the neuronal net (original post)

* Yep, my basic problem was that I had a ring modifier for the individual fibres of the neuron which was then used as a node in the particle mesh.
* The ring (maybe, not so surprisingly) is simply ignored in particle-meshing the spline tracked impulse, so it just propagates along a single "unringed" spline (somewhere in Nirvana, as the ring builds a new geometry, based on the phantom template).
* I have now significantly complicated the structure of the instances of the neurons to get a satisfactory model. I may need to split the splines for dendrites (which transmit impulses independently from presynaptic neurons) from the axon > terminals side (which fire simultaneously; or not at all as a function of the threshold milliVoltage) in future.

* Some experiments seem to indicate that this architecture will permit modelling the mentioned stuff (neural nets, neuroplasticity, backpropagation and so on). Fairly laborious and time consuming, but all the basics are flexible enough to customise the same basic template for different processes.

* Aaargh, whoever modelled all this stuff in Genesis on days 5 and 6 (which was Thursday and Friday just after the Big Bang) was definitely a bit more omniscient than me. Fortunately, it is only Monday and there is time to improve. Maybe purchasing a large bag of AI from the supermarket will help? I would hope it comes fermented and bottled :rolleyes:

* What we really need here is an equivalent of Grasshopper 3D interfacing with C3D. No doubt, the seven dwarves (living next door to our Good Doctor in the Black Forest) could engage in some constructive brainstorming.
* Thank you, again, for clearing some rubbish in my original concept!
Helmut, I'm glad that I could help with your neurons :smile:
Though the biological nodes stuff sounds all noodles to me :tongue:

Once you got your brain all set up and animated I'd really like to see the result* :wink:

* talking about the video here


Active member
:D Thanks again Helmut
The posts you directed me to are helping. I see I have a lot of work and trial and error to do to further understand all of it.

:D Thanks Miso
I really appreciate your explanation.
I can see this is going to take me some time to digest after asking lots of questions.
I’m looking at the property menus for the various nodes and am trying to make heads and tails out of them.
I've attached screen shots of some of them and am wondering if I am headed in the right direction.

I’m wondering about where the time value is.
I see a "t" property in the Pulsetrain and Multiplhyadd nodes.
Does that stand for time output?

I’m thinking I better wait until I have more time. I was just trying to understand in case I could use it in the future.
I’m working on a Christmas project that I started last November. I missed last Christmas and wonder if I will make it in time for this Christmas.


I’m still working on my Rose Quartz project.

Thanks a big bunch

My Best


Last edited:
I’m wondering about where the time value is.
Hi Jeanny!

The node system works from left to right, normally the leftmost node is the one everything starts with.
We're talking here about the "membrane.2" material in the "splinicles-" file I provided in post #7 (including screenshot of the node editor).

The node on the left there is the state node of which the UV1, I-N and the time output you are asking for are used.
In order to get an understanding what those values mean you could plug them directly in the diffuse input of the material node on the right (in this case better the emissive input because there's no light in the scene).

- State-UV1 colors the splines from purple at the origin to cyan and the ends.

- State-UV1 > Vec2float-Y makes that black to white.

- State-UV1 > Vec2float-Y > Multiplyadd does the same, but now the time output of the state node is joined and what it does cannot be seen in a single render, instead we make another render at frame 60 and one more at frame 120 and it looks like the sweeps get darker with time.

- State-UV1 > Vec2float >
______________________Multiplyadd > Pulsetrain make the white bands (moving with time)
- State-Time >


I'm stopping here to ask if you're still with me :wink:
(And also I'm still waiting for an SSS shader in Cheetah so that I can help you further with the rose quartz ...)
Last edited:


Active member
Good Morning, Jeanny,
* There is a brief intro by Tonio Loewald on nodes which you should find with the help of auntie Google on a Safari.
* You may want to start with misOS´s first sample in this thread (a single helical spline), which is a bit easier to understand.
* There is also a simplish sample plus GIF by Frank in a thread from 23.02.2018, entitled "Oh, the state I'm in".

* The time variable sits in the state node, a simple container which has no inputs (all inputs are at the left margin of a node panel, all outputs are on the right). Basically, this time is used to calculate the edges of the pulse which then feed the positional input of the gradient (for experiments, you can keyframe the edges). The pulse itself simply generates a white ribbon between the edges (plus a grey fringe if smooth is set), depending on the t value.

* If curious, you may want to get some basic knowledge on vector maths. It is not really required in this particular node construct but it will help in other noodly cooking experiments for the advanced spaghetti artist :rolleyes:



Active member
:D Miso and Helmut:

Wow! What can I say? I’m so impressed with your knowledge and
appreciative of your generosity in taking the time to help.

Already just quickly reading over your replies my little brain is saying:
“Oh! now things are beginning to make sense.”

Today and the next few days I am only able to take a quick peek at the forum.
I only have time to make this quick reply.
I will reply more in depth as soon as I can.
I won’t be able to take the time to digest and apply your information;
but as soon as I can I will eagerly put the necessary time in to learn from your posts.

I hope there will be many others who will benefit from this thread.

Again - Thank you so much!

@Helmut: This is your thread.
I have more questions -
Would you prefer that I start a new thread rather than ask and respond on this thread?
I don't want to be a pirate and highjack anyone's post.
I don't have the women power to do so yet: I never did finish the lady pirate ship I was making from the ship you so benevolently shared with the forum.:mrgreen:

My Best


Active member
Good Morning, Jeanny

* This is just a red band traversing the surface of a sphere. Use a simple sphere with a default material node.

* Step #1:
* Add a gradient node as an input.
* Connect the top labels, colour >> diffuse.
* You can now keyframe the input of the gradient, position, from 0 to 1 (ore use the mouse to scrub up and down in the properties panel of this node). This is just for testing.
* No surprise: the colour of the object changes as a result of the position. This colour will be shown in the spherical icons of the two nodes affected.

* Step #2:
* Add a pulse node (default settings may suffice) as an input.
* Scrub up and down in the t parameter.
* Note that a pulse (white blob) is shown only if t > Edge 1 AND t < Edge 2. When t < edge 1 or t > edge 2, you get a black blob which means no pulse.
* Connect the numeric output, Val to the gradients input, Position.

* Step #3:
* Add a state node to run the t-label of the pulse.

* In my trivial sample, I have just keyframed the pulse´s edges 1 & 2. As you get a feel for this, you will want to look at methods to feed these inputs directly from the state node (as shown by misOS via the detour of some maths nodes).

* Hint:
* to show / hide the preview blobs in the node panels, click on one of the output labels. The blobs are very useful as they show the effect of your noodly labour.

* Once you get the idea, you will enjoy experimenting with some amazing special effects you can achieve. Eg, hooking up a pulse to the transparency results in quite spectacular fade-outs / -ins which move along the mesh.

* Sometime, in the distant future (when I may rest supinely underground :confused: ), the C3D node system will be able to calculate parameters in objects and tools. Briefly check Grasshopper 3D for Rhino, if interested.



Active member
:smile: Good Afternoon Helmut!
I suppose you are nearing the end of your afternoon on your side of the world.
Couldn’t resist sneaking in the C3D Forum for a brief look before starting my day.
I always look forward to starting my day with my Cheetah 3D family.
Thanks so much for the additional information along with the jas file!
I can’t wait to get my head into all the new info you and Miso have provided!
Have a wonderful day everyone!

My Best


Active member
:D @ Miso: Yay! Thank you! Your explanations along with visual aids are excellent!

I believe I’ve Got it thus far!

I would love it if you would continue.
I have a few questions that I suspect you will answer upon further explaining
your Gradient Band animation MISOstery like:

Which Node’s Property Values does one need to concern myself with?
I tried playing with the values in the Multiplyadd, Pulsetrain and Mix nodes.
I didn’t touch the gradient properties at all - my brain is complaining already.

I only seemed to figure out:
1) The Edge property of the Pulsetrain determines the length of the Gradient Band.
2) It seems the X value of the Multiplyadd property determines
weather the Gradient Band moves toward the center or the outside:
(Minus values drive toward the center and
Plus values drive toward the outside end of the cylinder.)
It seems this same property determines the speed of the Gradient Band's movement.

It took me most of the day to slowly digest this info. :tongue: :rolleyes:

:D @ Helmut: Your info looks equally helpful and I intend to dig into your suggestions and info as soon I’m finished working on miso's.

Thanks again

My Best
Last edited:
1) The Edge property of the Pulsetrain determines the length of the Gradient Band.
2) It seems the X value of the Multiplyadd property determines
weather the Gradient Band moves toward the center or the outside:
(Minus values drive toward the center and
Plus values drive toward the outside end of the cylinder.)
It seems this same property determines the speed of the Gradient Band's movement.
Great, you've got everything right so far!
- the period property determines the distance between bands (pulse train means sequence of pulses)
- the multiplyadd node works like this: A*t+B
In A we put the time output from the state node.
It runs from 0 at frame#0 to 1 after one second, that would be frame#30 at 30fps.
That's so fast it's confusing to watch, so setting factor t to 0.1 means a band travels along the sweep in 10 seconds instead of one.
When the direction is wrong the value needs to be set negative.
In B we put the Y (length component) of the UV1 from the state node, which is a gradient from 0 (start) to 1 (end of the sweep),
from this (plus the time value) the pulse train calculates where to place the bands.

Now for the gradient nodes:
- The I-N output of the state node is white (value=1) when you look directly (perpendicular) at a surface and black (0) when you look at it sideways (90° angle).
- The upper gradient gives the sides of the tubes 25% emissive color and the middle 0%, which produces a membrane effect together with transparency.
- the other gradient has the same value for the sides but 100% (white) for the middle, that is the glow effect of the white bands.
- with the mix node I let the pulse train determine wether to show the membrane or the glow effect.

That's it!
Plug the gradient outputs directly into the material's emissive input to see what they do in a render.

In post#2 I provided a more complicated version of this with the rand output of an instance node (random color for each particle) making the bands colored and even vary their velocities via the t input of the multiplyadd.
That are so many nodes that after some time when I forget how I did it I may have a hard time myself to figure it out again :tongue: