Full track-ride pipeline.

Progress.

This project is still very young and I will be updating this page as I make progress. The goal here is to set up a track-ride system and pipeline, allowing the ability to very quickly and easily add a new ride type to the system.

As of last update to this post, the following is (potentially) on the to do list:

  • ■ Cart rigging.
  • ■ Special track pieces. (pull chains, launchers, ...)
  • ■ Player controller for runtime track editing.
  • ■ Implement other ride types. (Water rides, spinning carts, ...)
  • ■ Proper meshes and materials.
  • ■ Adaptive track mesh selection based on curvature and length.
  • ■ MaxScript for easy track mesh generation and exporting.
  • ■ Track saving and loading.
  • ■ Speed affects grass, water, ...

Process.

The track uses a spline-based system and supports all orientations. The rails are a spline mesh while any connectors and supports are static meshes. The ride can be altered in editor in realtime simply by changing the spline component. Once a playercontroller and some UI elements have been created, the track can be edited during runtime in just the same way.

Supports are generated based on track orientation, height and clipping avoidance. If a support would clip with anything it shouldn't it will adapt attempt other forms or positions. If none work, the support is not generated. Each ride can specify values such as support spacing, height levels and track avoidance width.

Rail connectors for the track are placed based on an input distance. These also use mesh instancing to increase performance.

Supports are generated based on track orientation, height and clipping avoidance. If a support would clip with anything it shouldn't it will adapt attempt other forms or postitions. If none work, the support is not generated. Each ride can specify values such as support spacing, height levels and track avoidance width.

The system uses a datatable to store all info for every ride type.

To add a new ride you simply fill in all the variables.

One issue was that the spline mesh does not precisely match the spline itself. This caused the static meshes to misalign. For this reason I needed a new "GetLocationAndRotation" function.