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.
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.
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
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
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.
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.
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.
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.
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.
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.
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?
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.
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