I'm working on a track for the racing sim Assetto Corsa. My track is a section of California's Highway 1, and is around 35km (21.9mi) long.


My modeling process is to take a mesh, sized 10m along the Y axis and 1m along the X axis (with cuts made to increase the resolution along the Y axis to allow for a concave or convex road surface), array it along a curve, shrinkwrap it to a elevation model mesh (from CloudCompare), and laplacian smooth it to iron out the noise in the elevation model mesh. I can then add a displace modifier hooked to a cloud texture to add back some artificial noise on a smaller level.

road template

Assetto Corsa uses a proprietary model format (.kn5), and the SDK/converter has a per-mesh limit of 65535 vertices. This means that I have to split my mesh up every 4000m or so to get it to import. My current solution uses a stupid amount of modifiers and vertex transfer planes to work around the problems of not having a connected mesh:

stupid modifiers

The Array and Curve modifiers duplicate the road mesh along the road's centerline curve.

TransferNonSWArea transfers in a vertex group indicating the areas where the elevation model is inaccurate, and the track should not be shrinkwrapped.

TransferStartWelder transfers in a vertex group consisting of a manually-placed mesh over the overlap of the previous and current track segments.

TransferEndWelder transfers in a vertex group consisting of a manually-placed mesh over the overlap of the current and next track segments.

TransferWeldSmoothFix transfers in a vertex group consisting of the previous track segment to indicate where the mesh should not be smooth, lest it create a smoothing artifact around the join point.

ShrinkwrapToDEM project-shrinkwraps the entire current mesh to the elevation model, except for the vertex group area imported by the TransferNonSWArea modifier.

ShrinkwrapToPrevSurface shrinkwraps the vertices of the current mesh with the vertex group imported in TransferStartWelder to the nearest vertices of the previous track segment.

LaplacianSmooth smooths the entire current mesh, except for the vertex group area imported by the TransferEndWelder modifier.

Displace adds a very small magnitude of random vertical noise.

MaskOverlapToPreviousPiece hides the vertices in the overlap area to the previous track segment to avoid texture clipping issues.

ShrinkwrapToPrevSurfacePostMask shrinkwraps the vertices of the current mesh with the vertex group imported in TransferStartWelder to the nearest vertices of the previous track segment again in order to fix a slight misalignment issue.

This whole process ensures the track segments join seamlessly, avoiding Laplacian edge smoothing artifacts present in previous join attempts.

Even with all of those modifiers, the track join point can still be felt in-sim, but can be written off as a normal feature of the road surface.

thirty percent network

So far, I have modeled the road surface for around 35% of the track, and I already need four separate objects, all of which's modifiers are unlinked to each other, meaning if I need to change the smoothing value on the entire track, I have to change it on each modifier. In addition, having multiple track segments will make connecting the grass/terrain mesh to the track a nightmare that I would like to save for another question. As well, creating a new segment is annoying due to manually relinking the welder planes and updating other references manually.

My question today is this:

Is it possible, whether in stock Blender or with an addon or script, to split one monolithic track mesh into adequately sized pieces based on their distance along the track, in such a way that I can still apply modifiers across all of them, without having to apply all the modifiers each time and then manually select and split the mesh in Edit Mode? (I mean, Blender is extensible enough that it's probably possible, but I don't know of any addon that does this, and if none exists and one has to be written, I would appreciate any help I could get on writing it.)

I'd upload the .blend, but it's multiple gigabytes on account of the elevation data model. I'd be happy to answer any questions in the comments.

  • $\begingroup$ Why don't you apply all modificators, then split the object in parts? $\endgroup$
    – Crantisz
    Jul 6, 2022 at 11:50
  • $\begingroup$ @Crantisz I have been, and will be doing, frequent modifications to the mesh and the location of the curve defining the placement of the mesh, and as per my bolded question, I would not like to do that every single time I need to make a change to the mesh and export it to feel or see the changes in-sim-- not to mention that I still have no way of splitting the meshes in any other way than manually, through Edit Mode and P. $\endgroup$
    – ohyeah2389
    Jul 6, 2022 at 11:56

1 Answer 1


Using this Geometry nodes setup, you can separate the portion of track without applying modificators:

enter image description here

enter image description here

So there is no need to use these methods to glue parts of the mesh.

  • $\begingroup$ This is exactly what I was looking for, and I should have thought of this-- this also might solve one of my issues with the terrain mesh... but I wish Blender's Geometry Nodes could "output" multiple objects, as structurally weird as that sounds. $\endgroup$
    – ohyeah2389
    Jul 6, 2022 at 12:23
  • $\begingroup$ "Geometry nodes" is a modifier, and as a modifier it only manipulates with the object. Maybe we will have collection nodes in the future.. $\endgroup$
    – Crantisz
    Jul 6, 2022 at 12:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .