How-To: Scale Pops by Camera Distance (Optional)
Goal: make far-away pops render smaller (and optionally disappear) instead of holding one fixed on-screen size. One float curve drives it: X = camera-to-pop distance in cm, Y = scale multiplier. Without a curve, pops render at a constant size (the class default; the plugin's demo content ships a sample curve you can replace or clear).
1. Author the curve
Create a Curve Float asset (Content Browser -> right-click -> Miscellaneous -> Curve -> CurveFloat) and add keys mapping distance to scale. A good starting shape:
| Key (X = distance, cm) | Value (Y = scale) | Effect |
|---|---|---|
| 0 | 1.2 | Slightly oversized right at the camera |
| 1500 | 1.0 | Normal size at typical combat range |
| 5000 | 0.6 | Shrinks with distance |
| 8000 | 0 | Hidden beyond max range |
2. Assign it in Project Settings
Set Project Settings -> Crimson -> Crimson Number Pop -> Scaling -> Distance Scale Curve Path to your curve. It async-loads with the registry and widget class; if the path is set but fails to load, the subsystem logs a warning and falls back to constant size.
(none - constant size)).How it combines
The curve is evaluated every frame for every active pop, measuring from the local player's camera (PlayerCameraManager location) to the pop's tracked world point. The final render scale is the per-player WidgetScale (stored on the widget as BaseRenderScale at dispatch) multiplied by the curve value - so player preference and distance falloff stack cleanly.
MaxDisplayDistance filter drops an event once at receive time, measured from the pawn - a dropped event never displays. The curve re-evaluates live from the camera during a pop's lifetime, so a hidden pop can reappear as the camera moves closer. Use the filter to cut noise; use the curve for the visual falloff.See also
- How-To: Filter Pops Per Player - the
WidgetScalethe curve multiplies and theMaxDisplayDistancefilter. - Concept: Styles, Formatting & the Widget Pool - where in the per-frame update the curve applies.