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 value | Typical use |
|---|---|
SpringCastHits | Wheel placement |
AsyncVelocity, AsyncAngularVelocity | Lean and other speed based effects |
AsyncWorldTransform (and its inverse, AsyncLocalTransform) | Kart position and rotation |
AsyncForwardVector, AsyncRightVector, AsyncUpVector | Kart directions |
StateCheckImpactPoint, StateCheckImpactNormal, StateCheckHeightAboveGround | The 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.
| Setting | Default | What it does |
|---|---|---|
| Smooth Visual State | On | On: 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:
| Setting | Default | What it does |
|---|---|---|
| Remote Visual Smoothing Time | 0.05 s | How 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 Offset | 40 cm | The 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:
| Function | Returns | Use it for |
|---|---|---|
GetVisualBodyLocation | Where 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. |
IsVisuallyInAir | True 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
- Replace the kart model: Using your own kart model.
- Set up an online game: Multiplayer setup.
- Something looks wrong? Ask on Discord.
Not using the plugin yet? Get it on Fab.