RLS Studios
ProjectsPatreonCommunityDocsAbout
Join Patreon
BeamNG Modding Docs

Guides

Reference

Server CommandsGE UtilitiesGame Engine MainNavigation GraphScreenshot CaptureServerServer ConnectionSpawnpoint ManagerSimulation TimeVehicle SpawningSuspension Frequency Tester
Activity ManagerAudio Bank ManagerAudio Ribbon SystemBus Route ManagerCamera SystemCore Chat (IRC)Core CheckpointsCore Command HandlerCoupler Camera ModifierDevices (RGB Peripherals)Dynamic PropsEnvironmentFlowgraph ManagerForestFun StuffGame ContextGame StateGround Marker ArrowsGround MarkersHardware InfoHighscoresHotlappingInventoryJob SystemLap TimesLevelsLoad Map CommandMetricsMod ManagerMultiseatMultiseat CameraMulti SpawnOnlinePaths (Camera Paths)Quick Access (Radial Menu)Recovery PromptRemote ControllerReplayRepositoryRope Visual TestScheme Command ServerCore SnapshotCore SoundsCore TerrainTraffic SignalsTrailer RespawnVehicle Active PoolingVehicle Bridge (GE ↔ VLua Communication)Vehicle MirrorsVehicle PaintsCore VehiclesVehicle TriggersVersion UpdateWeather SystemWindows Console
Camera Mode: AutopointCamera Mode: AutozoomCamera Mode: Big MapCamera Mode: ChaseCamera Mode: CollisionCamera Mode: CrashCamera Mode: DriverCamera Mode: External / Fan CameraCamera Mode: FallbackCamera Mode: Free CameraCamera Mode: Game EngineCamera Mode: HandheldCamera Mode: Manual ZoomCamera Mode: NoiseCamera Mode: ObserverCamera Mode: OnboardCamera Mode: OrbitCamera Mode: Pacenote OrbitCamera Mode: PathCamera Mode: PredictorCamera Mode: RelativeCamera Mode: ShakeCamera Mode: SmoothCamera Mode: Top DownCamera Mode: TrackIRCamera Mode: TransitionCamera Mode: Unicycle

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 ExtensionscorecameraModes

Camera Mode: Transition

Global filter that smoothly interpolates between camera states during camera mode switches and vehicle changes. Prevents jarring cuts by blending position, rotation, and FOV over a configurable durati

Global filter that smoothly interpolates between camera states during camera mode switches and vehicle changes. Prevents jarring cuts by blending position, rotation, and FOV over a configurable duration.


Overview

A hidden global filter with runningOrder = 0.2 (runs early in the pipeline). When a camera switch or vehicle change occurs, it captures the old camera state and blends toward the new state over a configurable transition duration. Uses quadratic easing for smooth deceleration. Performs line-of-sight checks to skip transitions when the path is obstructed.


Class Properties

PropertyTypeDefaultDescription
isGlobalbooltrueAlways active
runningOrdernumber0.2Runs early in filter chain
isFilterbooltruePost-processes other camera output
hiddenbooltrueNot selectable by the user
transitionTimenumber0Remaining blend time
transitionDurationnumberfrom settingsMode-switch blend duration (sec)
transitionVehicleDurationnumberfrom settingsVehicle-switch blend duration (sec)
camLastPosRelvec3-Previous relative position
camLastPosAbsvec3-Previous absolute position
camLastFOVnumber90Previous FOV
camLastQDirquat-Previous rotation
camLastNearClipnumber0.1Previous near clip

Methods

MethodSignatureDescription
initC:init()Initialize state and load settings
onSettingsChangedC:onSettingsChanged()Reload transition durations
canTransitionC:canTransition(origin, target)Check line-of-sight (max 100m)
updateC:update(data)Blend between old and new camera state
startC:start(isVehicleSwitch, camPathTransitionData)Request a new transition

Settings

Setting KeyDefaultDescription
cameraTransitionTime300Mode-switch transition (ms)
cameraVehicleTransitionTime500Vehicle-switch transition (ms)

Transition Blending

-- Quadratic ease-out blending
self.transitionTime = math.max(0, self.transitionTime - data.dt)
local perc = (self.transitionTime / oldTransitionTime)
perc = perc * perc  -- quadratic easing

-- Blend all camera properties
data.res.pos = data.res.pos + (self.camLastPosRel - data.res.pos) * perc
data.res.fov = data.res.fov + (self.camLastFOV - data.res.fov) * perc
data.res.rot = data.res.rot:nlerp(self.camLastQDir, perc)

Line-of-Sight Check

-- Skip transition if camera would clip through geometry
function C:canTransition(origin, target)
  local dir = target - origin
  local dist = dir:length()
  if dist > 100 then return false end
  return castRayStatic(origin, dir, dist) >= dist
     and castRayStatic(target, -dir, dist) >= dist
end

Key Notes

  • Works in vehicle-relative space during blending, then converts back to absolute
  • camPathTransitionData allows camera path system to inject old state via callback
  • First frame after init (firstTime = false) skips transition to avoid glitch
  • Vehicle switches use longer duration than mode switches

See Also

  • Camera Mode: Autopoint - Related reference
  • Camera Mode: Autozoom - Related reference
  • Camera Mode: Big Map - Related reference
  • Core Systems Guide - Guide

Camera Mode: TrackIR

Global filter that integrates TrackIR head-tracking hardware. Translates and rotates the camera based on the player's physical head position and orientation.

Camera Mode: Unicycle

First-person walking camera for the unicycle vehicle. Handles ground detection, collision, gravity, VR snap-turning, and communicates rotation data back to the vehicle controller.

On this page

OverviewClass PropertiesMethodsSettingsTransition BlendingLine-of-Sight CheckKey NotesSee Also