Shape FlowPath: A Procedural Tunnel Generator for Blender and Unity.
by Vicente C.
Published |
9
Share
Technical Artist Abdullah Hesham released Shape FlowPath, a procedural tunnel generation system built with Geometry Nodes for Blender and Unity.
After experimenting with ways to speed up environment creation, Technical Artist Abdullah Hesham built Shape FlowPath, a procedural tool that generates tunnels inside Blender.

It was made with Geometry Nodes and a custom Python add-on. The package includes more than 40 tunnel variations.

According to Hesham, the goal was to generate all of them from the same setup.
Building the Tunnel
The system starts with a cylinder that defines the shape of the tunnel. The shape of this cylinder can go from circular to square depending on how many sides you use. 
Once the shape is ready, the system repeats that segment to build the rest of the tunnel.
The default cylinder can also be replaced with custom geometry to create different tunnel shapes.
According to Hesham, the same Geometry Nodes setup is used to generate all of these variations.
Adding Variation
To add more variation, the system places four-sided shapes around the tunnel walls. 

The scale and rotation of those shapes can then be adjusted to break up repetition across the tunnel.
The materials repeat a set number of times before switching to the next one. This helps change the look of different sections of the tunnel.
Connecting Multiple Segments
Once a few tunnel pieces are ready, the custom Python add-on connects them together. It measures the final size of each segment, then places the next section at the end of the previous one.
def get_object_length_on_axis(obj, axis='Y'):
    depsgraph = bpy.context.evaluated_depsgraph_get()
    eval_obj = obj.evaluated_get(depsgraph)

    bbox_corners = [eval_obj.matrix_world @ mathutils.Vector(corner) for corner in eval_obj.bound_box]

    axis_index = {'X': 0, 'Y': 1, 'Z': 2}[axis.upper()]
    min_val = min(corner[axis_index] for corner in bbox_corners)
    max_val = max(corner[axis_index] for corner in bbox_corners)

    return abs(max_val - min_val)
According to Hesham, the key part is forcing Blender to calculate the final geometry before measuring it

This is done through evaluated_depsgraph_get(), which keeps placement accurate even when a segment length changes.
Once the tunnel segments are ready, they can be exported as FBX files and brought into Unity. The package also includes a Unity tool for generating additional variations inside the editor.

If you want to learn more or get the tool, the links will be right below.

Interested in learning more?
If you’re interested in the technical side of Unity? The Unity Dev Bundle brings together six books covering shaders, math, procedural shapes, editor tools, and character customization.
Jettelly wishes you success in your professional career! Did you find an error? No worries! Write to us at [email protected], and we'll fix it!

Subscribe to our newsletter to stay up to date with our latest offers

© 2026 Jettelly Inc. All rights reserved. Made with ❤️ in Toronto, Canada