Skip to content

Visuals

Visual smoothing at high framerates

Coming in 1.1

On this page

The kart simulates on a fixed 60 Hz async physics tick. Unreal already draws the kart body smoothly at any framerate, but the values your Blueprints read for visuals would only change in 60 Hz steps.

On a 120 or 144 Hz screen, or with uncapped FPS, wheels and lean then micro-stutter against the smooth body. Visual smoothing fixes this, and it is on by default.

What it smooths

Every physics tick the plugin stores a snapshot of the visual values. Each rendered frame, it blends between two snapshots at the exact moment the engine draws the body, so everything stays in step with the kart you see.

Blueprint valueTypical use
SpringCastHitsWheel placement
AsyncVelocity, AsyncAngularVelocityLean and other speed based effects
AsyncWorldTransform (and its inverse, AsyncLocalTransform)Kart position and rotation
AsyncForwardVector, AsyncRightVector, AsyncUpVectorKart directions
StateCheckImpactPoint, StateCheckImpactNormal, StateCheckHeightAboveGroundThe ground below the kart

In the Blueprint editor these show with spaces, for example Spring Cast Hits or Async Velocity.

The toggle

Open your kart Blueprint’s Class Defaults and go to Kart Base Settings > Visual Smoothing.

SettingDefaultWhat it does
Smooth Visual StateOnOn: the values above are blended between physics ticks and match the drawn body. Off: they show the newest raw physics values, refreshed once per frame (the behavior before 1.1).

You can also change it while the game runs, with a Set Smooth Visual State node on the kart.

What it does not change

  • Handling: no effect at all. The physics uses its own internal values. Smoothing only changes what your Blueprints read.
  • Multiplayer: prediction, corrections and replication all run on those internal values.
  • Gameplay decisions: the smoothed values run about two physics ticks behind the newest step, like the drawn body. If a Blueprint uses them to decide something (not to show something) and needs the newest data, turn smoothing off or do your own trace. For visuals, leave it on.

Tips

  • Let your camera follow the kart body, for example with a spring arm on the root component, and do not place it from AsyncWorldTransform. The engine already draws the body smoothly. The shipped kart’s spring arm sits on its root box, Kart Collision.
  • A wheel that leaves or touches the ground snaps instead of blending. This is on purpose, so a wheel never slides toward an empty “no hit” value.

Other players’ karts in multiplayer

In an online game, another player’s kart on your screen is predicted from that player’s last known input. When they tap the throttle, brake or turn, your machine learns it a moment later and the kart is corrected. Coming in 1.1

Unreal smooths the position of such a correction, but not its speed. Without help, the kart would seem to surge forward or snap back.

To hide this, the kart’s visual meshes (not the collision box) follow the body with a very short blend:

  • At a steady speed, the meshes sit exactly on the body, with no delay.
  • When a correction changes the speed, that change is blended over about 0.1 seconds (with the default setting).
  • Only the horizontal position and the turn angle are blended. Height, pitch and roll follow the body at once.

These settings are in the same category, Kart Base Settings > Visual Smoothing:

SettingDefaultWhat it does
Remote Visual Smoothing Time0.05 sHow long a correction’s change of speed is blended. The change is spread over about twice this time. Range 0 to 0.15 s, and 0 turns the blend off.
Remote Visual Max Offset40 cmThe furthest the visual meshes may be from the collision body, horizontally, while blending. A bigger correction closes the rest at once. The turn angle offset is limited to 4 degrees.

Where it applies:

  • Only on clients, and only for other players’ karts. Your own kart, single player games and the server are not affected.
  • Collision and handling do not change, only what you see.
  • It works independently of Smooth Visual State.

Hops of other players

The network reveals another player’s hop only after most of it is already over. When that happens, the visual meshes play the hop in full from its start, using that kart’s Jump Height and Gravity, so it still reads as a real takeoff. The collision body stays where the simulation puts it.

Blueprint helpers for cosmetics

Two functions tell you where the kart is shown, which can differ from the collision body on other players’ karts:

FunctionReturnsUse it for
GetVisualBodyLocationWhere the visual meshes are. Normally the collision body’s location. For another player’s kart, it includes the blend and a presented hop.Cosmetic traces that should follow the visible kart. The shipped BP_KartPawn uses it for its cosmetic center line trace.
IsVisuallyInAirTrue when bInAir is true, and also while another player’s hop is being shown.Cosmetic in-air logic, such as the wheels’ in-air pose. The shipped BP_KartAnim uses it.

Custom kart layouts

The blend only moves visual meshes that follow a few rules, for example: attached directly to the collision box, no collision, no physics. The shipped kart follows them.

If you build your own kart, check the rules in Using your own kart model. A mesh that does not follow them still works: it only gets Unreal’s normal correction smoothing.

Next steps

Not using the plugin yet? Get it on Fab.