Visuals, sound, gauges and displays¶
The rotor setup itself is in step 9 of the conversion. These are the main RFM_VisualsComponent fields:
| Field | Set to |
|---|---|
| Stock Engine Sync | NEVER |
| Neuter Stock Rotors | on |
| Main Slot Name / Tail Slot Name | Your model's rotor slot names |
| Rotor Child Bone, Rotor Child Index | Which child entity is the spinning rotor |
| Drive Spin, Spin Sign | On, and ±1 to match the main rotor's direction. The tail rotor and any extra rotors follow their own Spin Direction on their own. |
| Drive Mast Tilt, Mast Method, Rotor Pivot Point | Leans the visible rotor with the disc. The pivot is only visual. |
| Rated Power, Transmission Limit | Leave at 0, they get read from the reference engine. |
| Engine Gear Ratio | Engine output shaft RPM ÷ main rotor RPM, used for the engine sound pitch and the engine tachometer (Huey: 20.37). 0 = rotor-referred speed. |
| Extra Rotor Visuals | One entry per rotor that Drive Spin doesn't move (tandem rear rotor, coaxial second rotor, propeller, or the main and tail when Drive Spin is off). Put in its topology Rotor Id, plus a Slot Name, Model Token (part of the rotor's .xob file name) or Child Bone so it can find the visual. The log tells you which model it picked. It spins around the rotor's own hub and shaft at its simulated angle. If it spins the wrong way, tick Reverse Spin. If the model's mast isn't built along the physics shaft, or you put the physics hub somewhere other than the model's rotor head (real dimensions on an oversized model), set Spin Axis and Spin Pivot (Lining up an extra rotor visual). Lean With Disc tips the whole rotor model with the disc. It's a fallback for models without hinged blade bones, since it leans the mast too. If your model has flap bones, drive those instead (Blade flap on the model). |
| Bindings | Signals written from the flight model. Leave it empty to use the built-in set. |
| Extra Bindings | Extra signals added on top of the built-in set, for things like MFD displays (see below). |
| Sound Loops | Your model's _LP loop names and the rotor speed fraction each one plays at. Leave it empty for a built-in set using the vanilla helicopter sound events (turbine, main rotor, tail rotor, rotor whizz). Check your model's sound files actually use those names. |
| 1/rev, 2/rev and N/rev camera | First person rotor vibration, in inches per second (IPS) peak, zero = off. N/rev is the blade passage vibration. N is the blade count by default (4/rev on a UH-60, 5/rev on a Mi-8), and it's the main shake on any rotor with more than two blades. 2/rev does the same job for two-blade rotors. |
| Main/Tail Rotor Blur Model | Optional blurred rotor model at high RPM |
Bindings¶
Each binding writes one thing from the flight model to a named signal. A few useful ones that aren't obvious:
- MAIN_ROTOR_RPM, TAIL_ROTOR_RPM: rotor speed in RPM, read straight off the rotors (for rotor tachometers).
- MAIN_ROTOR_ANGLE_DEG, TAIL_ROTOR_ANGLE_DEG: blade angle, 0–360°, for graphs that spin the rotor using
MainRotorAngle/TailRotorAngle. If the blades turn backwards, set that row's Scale to -1 and leave Offset at 0. A lot of graphs (the Mi-8's included) switch to a blurred spin at speed and only take the sign of this signal, so it has to go negative to reverse both. On a tandem, give the row a Rotor Id (rotor.fwd,rotor.aft) and it reads that rotor instead. The rotor rpm sources work the same way. - BLADE_FLAP_DEG, BLADE_LAG_DEG: one blade's hinge angle in degrees (flap is + up with the precone included, lag is + trailing), for graphs that move the blade bones. Set Blade Index and, on a tandem, Rotor Id. See Blade flap on the model.
- ENGINE2_NG_FRACTION: the second engine's gas producer speed, 0–1. Scale it to your gauge's units (Mi-8: ×19500 for the engine tachometer). Engines 2 to 4 get sent over the network, so other players see each engine's own value. If the pilot's on an older RFM, engine 1 fills in.
The Mi-8 prefab is a good example of a setup driven by the animation graph.
Blade flap on the model¶
A real rotor's mast never tilts. The disc tilts because each blade flaps up and down on its hinge as it goes round. If your model has a bone per blade at the flap hinge, RFM can drive it, and you get coning, droop and disc tilt with the mast staying put. The Mi-8 does this for all five blades.
- Copy the model's animation graph into your addon (the
.agrand.agf) and point the Anim Graph on the helicopter simulation's VehicleAnimation at the copy. - In the
.agr, add a float variable per blade (the Mi-8 usesRFM_FLAP_1toRFM_FLAP_5, range −45 to 45). - In the
.agf, add a ProcTransform per blade that rotates that blade's flap hinge bone byrad(RFM_FLAP_1)and so on. Put them after any IK on the blades, so the flap turns the whole posed blade. If the graph has its own coning or cyclic tilt, zero it, or you get it twice. - On the vehicle's AnimVariables, map each variable to a new signal name.
- In the visuals Bindings, add a BLADE_FLAP_DEG row per blade with that signal name, the Blade Index and Create If Missing ticked. RFM registers the signal before the graph binds its variables.
- Untick Lean With Disc on that rotor's Extra Rotor Visual, so only the blades move.
Two things to check, because both look wrong in a very particular way:
- Which way the model numbers its blades. RFM's blade 1 points straight back at shaft angle 0, and blade 2 is the next one round in the direction the rotor turns. Plenty of models number theirs the other way. If they do, the blades go out of track when the disc tilts (they pass the same spot at different heights). Find which bone sits where from the model's bones, then map them so they match: on the Mi-8, mesh blade 1 gets Blade Index 5, blade 2 gets 4 and so on. Draw Blade Motion at scale 1 and a slow time scale shows it too: the big tip ball is RFM's blade 1 and should sit on the mesh blade you mapped to it.
- Which way positive rotation goes on the bone. Use the axis that's tangential to the blade (the one the blade pivots about to go up and down), and check a hovering rotor cones up. If it cones down, flip the sign in the expression.
By default the flap shows the disc (coning and tilt, smoothed over a couple of revolutions) at the spot where the model has drawn that blade, so the blades stay in track and don't jump each time the rotor solves. Untick Smooth Blade Flap on the visuals component to get each blade's raw solved angle instead. A stopped rotor shows its real droop on the droop stop. Other players' copies show the cone only.
Lining up an extra rotor visual¶
Extra Rotor Visuals spin the rotor model as one piece around an axis through a pivot. If that axis doesn't run along the model's own mast, the head circles or wobbles while it turns, and the tips move up and down a lot more than the hub does (a degree off is about 15 cm at a 9 m tip).
- Spin Axis is the axis the model was built around, in aircraft coordinates. RFM tips the model from that axis onto the physics shaft about the pivot, then spins it about the shaft. So a mast modelled straight up still shows your physics shaft tilt, and nothing wobbles. The log prints how far it tipped it.
- Spin Pivot is a point on that axis, in aircraft coordinates. Set it when the physics hub isn't on the model's rotor head.
- Leave both at 0 and RFM uses the rotor bone the child model declares, or the physics shaft and hub.
To line one up, turn on Draw Rotor Visual Axis and Hold Rotor Visuals on the visuals component (Presentation, 02 Rotor geometry). The yellow line is the axis the model is spun about, the white ball is the pivot and the grey line points straight up from the pivot to compare against. Short coloured rulers along the axis help you read small offsets. Hold Rotor Visuals parks the drawn rotors at their rest angle, so you can check the model against the axis without it moving. The simulated rotor still turns.
Workbench doesn't show you bone positions, so tick Dump Bones (Flight, 82) and spawn. It logs every bone, including the ones in child entities like a separate rotor model ([RFM-CHILD-BONES], with the child's placement and each bone's position, axes and offset).
Bones aren't always where the mesh is, though. The best fit comes from the mesh itself: the axis about which turning the head by one blade spacing lands the mesh back on itself. If the bones and the spin don't agree, trust the mesh.
Gauges¶
Gauges need matching variables in your animation graph. The Huey routes torque to VehicleThrottle, gas producer speed to VehicleBrake and EGT to AimY in its own graph (UH1ARFM.agr). Check what variables your graph actually has before adding bindings, because a signal nothing reads just does nothing.
Don't start the vanilla engine just to light up the gauges. DashboardPowerOn already follows RFM's engine state.
The torque signal reads the engine's Torque Gauge Full Scale Psi at the transmission limit (Huey: 50 psi). Set it to 100 if you want a % torque gauge.
Glass-cockpit displays (MFD Framework)¶
The MFD Framework draws its pages from vehicle signals you name in the page config, so RFM doesn't need it as a dependency and there's no special code. Just feed it through Extra Bindings, which add to the built-in set instead of replacing it:
- In
RFM_VisualsComponent> Extra Bindings, add one row per value, each with a new name. RFM creates the signal for you. - In the MFD page config, set each widget's Signal Name to that name. Leave Value Multiplier at 1, RFM already writes percentages and °C.
| Example name | Source | Shows |
|---|---|---|
RFM_NR |
NR_PERCENT | Rotor speed, % |
RFM_NP1, RFM_NP2 |
N2_PERCENT, ENGINE2_N2_PERCENT | Power turbine speed, % |
RFM_TQ1, RFM_TQ2 |
TORQUE_PERCENT, ENGINE2_TORQUE_PERCENT | Transmitted torque, % of the engine's Transmission Limit (100 = limit). Drops to zero when the freewheel opens. |
RFM_TGT1, RFM_TGT2 |
EGT_C, ENGINE2_EGT_C | Turbine temperature, °C |
RFM_NG1, RFM_NG2 |
NG_PERCENT, ENGINE2_NG_PERCENT | Gas producer speed, % |
RFM_IAS |
AIRSPEED (Scale 1.944) | Airspeed through the air, kt |
RFM_VSI |
CLIMB_RATE (Scale 196.85) | Climb rate, ft/min |
Colour bands go in the widget's Color Thresholds. Take the limits from your engine config, like torque going yellow above 95 and red above 100.
The framework's built-in Instruments page is set up for the Chinook and guesses torque from the collective lever, so I'd build your own page from the custom page template instead. That way every number actually comes from RFM. Engines 2 to 4 get sent over the network, so passengers see every engine's own numbers too.