Neon Lights - Geometry Nodes System

Neon sign system built in Geometry Nodes, with animation sequencing via the spline radius value and tubing blackout set through spline angle.

The process started when I did a “quick” 3D illustration during a meeting at work (that I spent a couple hours afterward finishing, haha). Pretty simplistic setup and details, but it sufficed for my purposes at the time. I attempted to use a solid core with motion blur to create the blurry arc within the glass tubing, but it wasn’t particularly successful. I haven’t really figured out how to properly abuse the Blender motion blur system like I used to in Lightwave. The glowing core does have variations, as difficult as it was to try and get them to travel along a path without being an exact repeat across multiple paths in the same object. If there’s a way to get the curve index (not the point index) in Geometry Nodes, please let me know. I need it!

The animation represents my second attempt, rebuilding everything from scratch with a more robust Geometry Nodes setup, more features, and more accurate support modelling, including twisted wire attachment points. I kept the end points simplified as through-mounts as opposed to the loop-backs often seen on neon signs because it kept everything much cleaner, if perhaps idealised (I did find real-world examples, so felt somewhat justified in this decision).

Because the spline radius is being overridden by a singular GN input value, the original radius values can be used to offset the luminance animation curve in time. Which means a single object can contain multiple curves that flicker on at different times, simplifying the management of different noble gases (you just need a single object for each). In the case of this animation, neon (red-orange) and krypton (lavender-white).

While I briefly played with the idea of using volumetrics for the gas arc, I quickly pivoted to a simple but high-polygon geometry approach; filling the entire tube with transparent spheres using incidence angle to provide falloff. It’s not fast to render, but it works. The spline tilt value is also overridden in the Geometry Nodes tree, so the spline tilt input can define areas of black paint on the exterior glass tube. Any portion of the spline can be blacked out by changing the tilt value of an associated spline point, much like any standard neon sign design where the tubing is painted black to block the light to create dashed lines or gaps in the illumination…a feature I didn’t actually end up using save for the ends of each curve. But hey, I have it ready for future projects I guess!

I maintained Eevee compatibility with a boolean input to switch between the transparent spheres approach and a simplified solid core (setting the inner glass surface to an opaque shader with emission and removing the spheres entirely)…which was especially helpful as I could quickly render out editing proxies with Eevee while still waiting on the full renders in Cycles.

Bloom was created in the Blender compositor using layered blurs and a reduced exposure copy of the render. Audio clips were created in Reaper (music retiming and sound effects), with final editing completed in Premiere. Colours and grading are a combination of Premiere, FilmConvert, and Photoshop (where I created a custom LUT for use in Premiere, skewing the red-orange of the neon to a more magenta-orange range…using it at half power in the final edit).

Of course immediately upon finishing the animation I wanted to make further revisions and changes! Modelling refinements and textures were added (thanks Polyhaven!), along with other small tweaks and improvements. The below render is another branding ligature I’ve been working on, staying up way too late on a week night just because the system is quite a bit of fun to play around with!


Very nice effect with the sphere.
From my brief experience glowing volumes are really tricky and if they look good they are taxing on rendering in Cycles.


Thanks! And for sure…a bunch of transparent spheres may not be exactly fast, but it’s gotta be magnitudes better than trying to get a volume effect to render nicely.

I bet improvements could be made with ray switching and/or visibility tags on multiple objects, but my goal was a single-object solution (not counting the hidden support objects that are instanced at the ends and periodically along the length of the tube). So I’m pretty happy with how editable this is, even if it’s not the most render-efficient.

1 Like

Cool project and thanks for sharing some insights !
Indeed this trick with spheres is quite clever !

Yes it’s quite easy :

You just need to make sure you are operating on spline domain.

In the same fashion the second setup will give an average of each points of the curve, that is in most cases the center of the curve !

Thanks again and see you next time :smiley:

1 Like

Awesome, thank you so much! Looks like in 3.3 and 3.4 it’s called “Interpolate Domain”?

1 Like

Yes indeed ! they changed the name in 3.5 :slight_smile:

1 Like

Es increíble, me encanta, muy muy sencillo y muy muy bueno !

1 Like

¡Muchas gracias!

1 Like

Good, because the current name doesn’t make all that much sense to me. :sweat_smile:

1 Like

I featured you on BlenderNation, have a great weekend!

1 Like

Thanks @bartv!

1 Like

Great work. I was trying to do something similar but failed miserably. Didn’t have enough GN knowledge. I might give it another try following your insights. :+1:

1 Like