Bringing your own boat mesh into a VesselPawn
The fastest path to a custom-looking boat is to clone a shipped reference vessel and swap its mesh. This guide walks the process for a Runabout-style planing powerboat. Adjust the source vessel for displacement boats (BP_Dinghy) or sailboats (TallShip data assets).
Prerequisites
Section titled “Prerequisites”- Completed the First Vessel walkthrough.
- A static mesh of your boat: clean, watertight, hull pointing up the +X axis.
- Familiarity with hull approximation: you’ll re-tune shapes after the swap.
Walkthrough
Section titled “Walkthrough”-
Duplicate
BP_Runabout. Browse toPlugins/DynamicRealWater/Content/Blueprints/Pawn/Vessels/Runabout/. Right-click → Asset Actions → Duplicate. Move the copy into your own project’s content folder. Rename toBP_MyBoat(or whatever). -
Open
BP_MyBoat. In the Components panel, selectHullMesh. In Details, replace theStatic Meshwith your own mesh asset. -
Verify pivot and orientation. Your mesh’s local origin should sit roughly at the centre of buoyancy (mid-ship, at the waterline). +X should be forward. If not, fix the source mesh: DRW reads the hull’s local axes directly.
-
Re-tune the buoyancy shapes. The Runabout’s
PhysicsBodyComponent → Boxesare sized for its specific hull. Open the array, adjust each box’sExtentsandTransformso they trace the new hull’s underwater volume. Read the Hull Approximation guide if you haven’t: this step is the single biggest determinant of how the boat will float and behave. -
Adjust the vessel data assets (optional but usually needed). Duplicate the Runabout’s data-asset stack into your own folder:
DA_Runabout_VesselData→DA_MyBoat_VesselDataDA_Runabout_Hull→DA_MyBoat_HullDA_Runabout_Hydro→DA_MyBoat_HydroDA_Runabout_Stability→DA_MyBoat_StabilityDA_Runabout_Propulsion→DA_MyBoat_Propulsion
In your
DA_MyBoat_VesselData, swap the four sub-references to point at your duplicates. Then inBP_MyBoat, setVesselData = DA_MyBoat_VesselData. -
Update hull dimensions in
DA_MyBoat_Hull.WaterlineLength,WaterlineBeam,Draft, andFreeboardshould match your mesh’s actual dimensions in cm. Form coefficients can stay close to the Runabout’s defaults if your hull is similar in shape. -
Update propulsion in
DA_MyBoat_Propulsion.LocalPositionshould match where the engine / propeller actually lives on your mesh.MaxPowerKWcontrols top speed: start with the Runabout’s value and tune from there. -
Place and test. Drag
BP_MyBoatinto a level withBP_DynamicRealWater. Press Play. Possess via drone (F key) and drive. Iterate.
What to check first if it doesn’t feel right
Section titled “What to check first if it doesn’t feel right”- Sinks at rest → buoyancy shapes are too small, or
MaterialTypedensity is too high. Visualise withDebugDrawShapes()in PIE. - Floats too high → buoyancy shapes are too large, or you don’t have enough Subtractive volume for cabin / hollow hull interiors.
- Tippy / capsizes → centre of mass too high. Lower
CenterOfMassOffsetZ, or add a ballast shape with high density at the keel. - Won’t plane → check
bEnablePlaning = trueand thatPlaningThresholdSpeedis reachable with your engine’s power. See Tuning a planing hull. - Won’t turn → increase
TurnAssistMultiplieronVesselMovementComponent, and verify yourControlSurfacesarray contains a Rudder.
What you didn’t need to do
Section titled “What you didn’t need to do”- Write any C++.
- Touch any shaders or materials.
- Build a full data-asset stack from scratch: the Runabout’s stack was the seed.
- Configure input: the cloned
BP_Runaboutalready has Enhanced Input wired.
That’s the value of the reference vessels: they’re not just demos, they’re starting points.