Dreamteck Splines - Powerful and Flexible Spline Solution


What is it?
Dreamteck Splines is an all-in-one spline solution that will help you with level design, game mechanics and effects. Create and follow paths, generate geometry, spawn objects, control particles, level terrain and much more! This is a battle-tested tool that our company has been developing and using for years. We started it’s development back in 2013 and slowly advanced it throughout the years. Recently we realized that the tool has grown into a big asset that can help lots of other developers and studios so we decided to make it public by releasing it on the asset store.

Asset Store Page
Official Website Page
Promo Video

Getting Started

Why Splines?
Splines is not just a spline extension, it comes with a range of components that are able to follow splines with uniform speed, generate geometry along splines, spawn and control objects, level terrains, project objects along splines and a lot more. The tool has been around since 2016 and has been receiving frequent updates through the years.

For the full list of available components, refer to the end of the post. Our solution is tight - each spline is one game object no matter how many control points it has. In the same time, if a control point needs to be parented to a Transform in the scene, that’s possible using the so-called Nodes. On top of all this, the tool is open source. We feel that developers should be able to edit the code and even contribute for future releases.

Key features

  • Rapid spline creation and editing via custom editor in Unity.
  • Four types of splines: Hermite, Bezier, B-Spline and Linear
  • Lots of components
  • Mobile friendly - Supports Android, iOS and Windows Phone
  • Single Game Object per spline
  • Procedural primitives and saving presets for later use
  • Junctions
  • Morph states
  • On-the-fly mesh generation
  • Multithreading
  • Open source
    Version 3
    Version 3 is the new major update which fixes longstanding issues with

If you have any requests for a speciffic mechanic or a prototype using Dreamteck Splines, we’ll be glad to look into it.

Tutorials
While the tool comes with an extensive PDF User manual and API reference, we have tutorial videos on our YouTube channel. This is a list of all the available tutorials for version 2 and 3: [Dreamteck Splines Tutorials]

List of components in v3

  • SplineComputer - A spline, affected by the Transform component which can be edited and evaluated

  • Spline Follower - Follow a spline with uniform speed (3 wrap modes)

  • Spline Projector - Project a 3D point in space on a spline

  • Particle Controller - (Uses Shuriken)spawn particles along a spline and animate them

  • PolygonColliderGenerator - Generates a 2D polygon collider from a spline

  • EdgeColliderGenerator - Generates a 2D edge collider from a spline

  • SplinePositioner - positions a single transform along a spline - useful for animations and tweens

  • Object controller - Spawn and control GameObjects along a spline

  • Spline Renderer - Render a spline with any camera (analogue of the line renderer)

  • Path Generator - Generate flat geometry along a spline (useful for making roads)

  • Tube Generator - Generate a tube along a spline (usfeul for making pipes, ropes, tubes…)

  • Waveform generator - Generate a waveform using the spline’s shape (useful for visualizing music, making fences and 2D terrains)

  • Surface generator - Creates a triangulated surface from a spline shape (useful for rendering shapes, modeling platforms, water pools, etc.)

  • Extrude Mesh (deprecated) - Extrudes a custom mesh along a spline

  • Spline Mesh - A replacement for the Extrude Mesh - flexible, effective and stable

  • Length Calculator - Calculates the length in world units of the spline

  • Object Bender - Bends a game object and all of its children along a spline.

  • Node - used to bind control points to Transforms in the scene and for making junctions

  • SplineMorph - a system for blending between different spline shapes

  • TextMeshProController - component for working with Text Mesh Pro objects.

Editor-only tools in v3

  • Level Terrain - Levels a unity terrain using a spline
  • Bake Mesh Generators - Bakes some or all mesh generators in the scene so their meshes can be lightmapped and used in more than one scene
  • Update tool - used to update all or some Spline components in the scene with a single click
  • Import/Export - provides importing and exporting functionality from and to SVG and CSV
  • Spline Explorer - a tool that displays all splines in the current scene and makes selecting and managing easy.
  • Catenary Tool - a tool for creating sagging cables, useful for electric posts, etc.

Sound very handy. Judging by the post, all of the splines are MonoBehaviours do I always have to have a SplineComputer component in order to have a spline?

Hi Dark Protocol, no you don’t always have to have a SplineComputer component in order to have a spline. You can create a spline at runtime from any script like that:

Spline spline = new Spline(Spline.Type.Bezier);

The SplineComputer component is there to provide a thread-safe way to transform splines. Also, if you want to work with the spline editor, you will have to use a SplineComputer.

Hey Dreamteck,
First of all thank you for the thorough description and tutorials. They helped me get into the tool really fast. I’ve had the chance to test it over the past couple of days and I think it has great potential to optimize my work as it’s clean and straightforward. I’ll have to give it some more time but I already think it combines all the futures I’ve hoped to find bundled in other spline solutions on the asset store.
So keep up the good work and give us plenty of content rich updates.
Cheers

1 Like

Hey, I quite like the tool, it’s very straight forward to use and works nicely. I was wondering if there was any way to extrude a surface generator along a spline? Right now it only seems like I can extrude it in a straight line. I can always make my own shapes outside and use the mesh extrude so this isn’t a big problem but I was just curious if there was a way to do this.

Hi wadewt,
currently there isn’t such functionality but we’re planning to add it in a later version. The tool is updated frequently and we prioritize the tasks based on our clients’ needs and requests so we’ll make sure to include this feature in a next version as soon as possible!

EDIT: This functionality has been added in version 1.0.3

1 Like

Hello Dreamteck :slight_smile:

Have been getting a bit more involved with the splines for a project and have come across an unfortunate problem. We’re using mesh extrude to generate race tracks for our racing game and it works lovely so far with one exception: the mesh generated does not merge overlapping vertices. This has caused a lot of strange collision problems with the mesh collider being generated. Our current work-around is to export the mesh, open it up in blender and optimise the overlapping vertices, and re export. This is ok but it creates a lot of back and forth which can be annoying when you can’t immediately playtest changes to a track.

If this is something that could be fixed it would be wonderful.

High fives,

Wade.

Hi Wade, this is an issue we came across when we developed the tool and to our knowledge, these vertices cannot be merged because this would screw up the UV coordinates (since in Unity a mesh is represented with several arrays for vertex positions, normal directions, uvs etc.). Merging the overlapping vertices causes the UVs to get squeezed at the faces between the merged vertices and the other vertices of the mesh. So basically, if the UVs require a seam, all the vertices have to be split at that seam. The same thing happens with imported meshes, or at least to the extents of our research.

We however have never had any issues with the generation and use of colliders for the meshes and collision has always been smooth. You can see that in the promo video (the part with the sport car driving along the generated road). We would be happy to assist with and further look at that issue so you are welcome to write to our support mail - support@dreamteck-hq.com and provide more information on the problem as well as screenshots/video/example scene if you feel the need to. We would be happy to take a look at the geometry of the model you’re trying to extrude.

Very nice spline system. I got results I needed right away.

On thing is, I have a problem where I am using nodes to anchor points to parts of an animated character. It works, but there is something wrong in the update sequence and the spline lags behind the updating position of the nodes.

This video demonstrates: https://drive.google.com/file/d/0B8s-MOIARkyQbHpZVWNHNXFVNHc/view

You’ll note that I have the tube generator set to Late Update and multithreading off. The issue, though, does not seem to be with the generator itself but rather the spline itself not being computed after the animation has moved things.

David

Hi David, thanks for using our spline system, we’re glad you like it!
We have found and fixed this problem. Contact us at support@dreamteck-hq.com to get a new copy of Dreamteck Splines with this issue fixed until it goes live on the Asset Store (asset store approval usually take up to 5-10 days).

The issue was with the Update calls + The script execution order. We didn’t know that the execution order does not support derived classes and the order we had set was 1.Node, 2.SplineComputer, 3.SplineUser. However, after some debugging we realized that each spline user has to be added explicitly after the SplineComputer in the script execution order in order to work.

EDIT: ISSUE FIXED SINCE VERSION 1.0.3

Is it possible to get the normal of the spline at a given point? I don’t mean the direction to the next point but the lateral outward normal (and up if available) ?

Yes, absolutely. This is one of the key features of the system. Each control point has a normal and their normals are interpolated along the spline so yes. The Evaluation method for the spline returns a SplineResult object which provides that information.

Hows the garbage collection, as you mentioned SplineResult object? Thanks for replies.

1 Like

We have been profiling garbage collection quite a lot while developing and we still do. The SplineUser components cache the sample results from the SplineComputers in arrays and reuse these arrays so basically there isn’t much allocation and deallocation going on when you’re editing splines. Garbage collection occurs when the cache arrays have to be resized. So for example GC would occur when changing the precision of a spline or addind/removing control points after a mesh generator has been set to use it.

If you’re not using SplineUsers, you can use the Evaluate method of the Spline class which has an overload that takes an array reference as a parameter. This way no new arrays are created and the referenced array is only resized if there is a need to.

In addition to Evaluate there is also EvaluatePosition which will only return a Vector3 point along the spline.

The surface generator component can now extrude the shape along another spline! This is one of the upcoming features in version 1.0.3.

Very nice. Have you considered giving it an optional Animation Curve property to control the fatness along the spline?

Also: I assume you have a flip direction option just in case a spline was made the wrong way round which results in spline A’s normals not being in the direction of spline B’s normals?

1 Like

The clockwise direction problem is automatically resolved but there is a flip option for each mesh generator in the package as well as a double sided option. Since each control point can have it’s own size and color, size is automatically interpolated and you can control the shape’s thickness by modifying the sizes of the control points of the spline that the shape is extruded along. :slight_smile:

Version 1.0.3 is out with a lot of bug fixes, some API redesigns and a couple of new features!
We also made the API Reference and User Manual public so everyone can download and read through them before purchasing. Both documents can be found in the “Documentation” panel on the official page: 403 Forbidden

Great work. V 1.0.3 solved all of my problems! Thank you, I’ll make sure to leave a positive review :slight_smile:

1 Like

Bought this a few days ago, but haven’t used it yet. Looking forward to it, seems quite capable :slight_smile:

1 Like