RLS Studios
ProjectsPatreonCommunityDocsAbout
Join Patreon
BeamNG Modding Docs

Guides

Reference

Server CommandsGE UtilitiesGame Engine MainNavigation GraphScreenshot CaptureServerServer ConnectionSpawnpoint ManagerSimulation TimeVehicle SpawningSuspension Frequency Tester
Auto AnnotationBoosterCalibrate ESCCompile ImpostersCompile MeshesConfig List GeneratorDecal Roads EditorDependency TreeDoc CreatorVehicle ExporterFollow The White RabbitForest GeneratorGround Model DebugInput System UtilsInstanced Line Render DemoJBeam StatsLog StreamsMap TilesNode Beam ExportNode StreamPhotomodePrecompile ShadersPrecompile VehiclesProcedural Track GeneratorRectangle GeneratorRender Components APIResave MaterialsRich PresenceSave Dynamic DataScreenshot CreatorShowroomSort LinesStep HandlerTerrain GeneratorTest Extension ProxiesTest JSON Files SyntaxVehicle Rope DebugBatch WorkerWebSocket Test
Basic BordersBasic CentersBorder Wall MeshCamera TransitionCeiling MeshTrack MarkersMaterial UtilTrack MeshesMulti Track MergerObstacle PlacerTrack PiecesProcedural PrimitivesQuickrace SetupSegment To Procedural MeshSpline Track

UI

Resources

BeamNG Game Engine Lua Cheat SheetGE Developer RecipesMCP Server Setup

// RLS.STUDIOS=true

Premium Mods for BeamNG.drive. Career systems, custom vehicles, and immersive gameplay experiences.

Index

HomeProjectsPatreon

Socials

DiscordPatreon (RLS)Patreon (Vehicles)

© 2026 RLS Studios. All rights reserved.

Modding since 2024

API ReferenceGE ExtensionsutiltrackBuilder

Obstacle Placer

Reference for `extensions/util/trackBuilder/obstaclePlacer.lua`. Places static and procedural obstacles (rocks, ramps, rings, etc.) along track segments.

Reference for extensions/util/trackBuilder/obstaclePlacer.lua. Places static and procedural obstacles (rocks, ramps, rings, etc.) along track segments.


Exports

KeySignatureDescription
placeObstacles(track)Places all obstacles for the entire track
placeProceduralObstacles(segment)Creates/updates procedural mesh obstacles for one segment
clearReferences()Clears all cached obstacle object references

Internals

  • Static obstacles use predefined .dae shapes: sharp1, sharp2, obstacle1, obstacle2 (rocks and sharp angles from GridMap).
  • Procedural obstacles use proceduralPrimitives to generate: ring, cube, cylinder, cone, bump, ramp.
  • Object pooling: Static obstacles are pooled per type via expandTruncateList. Excess objects are deleted; missing objects are created on demand.
  • Positioning: getAdjustedPosRotWidth(o, piece) computes the world position/rotation by interpolating along the segment's points based on o.offset (0–1 normalized position along the piece).
  • Anchoring: Each obstacle has an anchor value that offsets it laterally relative to the track width.
  • All objects are rotated 90° via turn90 quaternion to match the track coordinate system.

How It Works

  1. placeObstacles(track) iterates all pieces, collecting static obstacle placement data.
  2. For each obstacle type, the object pool is resized and objects are positioned/scaled/rotated.
  3. For each segment, placeProceduralObstacles handles procedural meshes:
    • Counts how many procedural obstacles the segment needs
    • Creates/destroys ProceduralMesh objects to match
    • Generates the mesh geometry (ring, cube, etc.) and sets position/rotation
  4. The obstaclesChanged flag on segments prevents unnecessary rebuilds.
-- Place all obstacles on the track
obstaclePlacer.placeObstacles(track)

-- Obstacle data structure on a piece:
piece.obstacles = {
  {value = 'ring', variant = '', offset = 0.5, position = vec3(0,0,1),
   rotation = quat(0,0,0,1), scale = vec3(2,0.5,1), anchor = 0,
   material = 'track_editor_A_border'}
}

Additional Exports

  • M.clearReferences - (undocumented)
  • M.placeObstacles - (undocumented)
  • M.placeProceduralObstacles - (undocumented)

See Also

  • Track Builder - Basic Borders - Related reference
  • Track Builder - Basic Centers - Related reference
  • Track Builder - Border Wall Mesh - Related reference
  • Game Engine Overview - Guide

Multi Track Merger

Reference for `extensions/util/trackBuilder/multiTrackMerger.lua`. Creates procedural meshes at intersection points where multiple track segments meet, filling the gaps with bezier-interpolated surfac

Track Pieces

Reference for `extensions/util/trackBuilder/pieces.lua`. Converts abstract track piece descriptions (forward, curve, spiral, loop, bezier) into concrete segment data with positions, headings, and cont

On this page

ExportsInternalsHow It WorksAdditional ExportsSee Also