Skip to content

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).

  • 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.
  1. Duplicate BP_Runabout. Browse to Plugins/DynamicRealWater/Content/Blueprints/Pawn/Vessels/Runabout/. Right-click → Asset Actions → Duplicate. Move the copy into your own project’s content folder. Rename to BP_MyBoat (or whatever).

  2. Open BP_MyBoat. In the Components panel, select HullMesh. In Details, replace the Static Mesh with your own mesh asset.

  3. 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.

  4. Re-tune the buoyancy shapes. The Runabout’s PhysicsBodyComponent → Boxes are sized for its specific hull. Open the array, adjust each box’s Extents and Transform so 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.

  5. Adjust the vessel data assets (optional but usually needed). Duplicate the Runabout’s data-asset stack into your own folder:

    • DA_Runabout_VesselDataDA_MyBoat_VesselData
    • DA_Runabout_HullDA_MyBoat_Hull
    • DA_Runabout_HydroDA_MyBoat_Hydro
    • DA_Runabout_StabilityDA_MyBoat_Stability
    • DA_Runabout_PropulsionDA_MyBoat_Propulsion

    In your DA_MyBoat_VesselData, swap the four sub-references to point at your duplicates. Then in BP_MyBoat, set VesselData = DA_MyBoat_VesselData.

  6. Update hull dimensions in DA_MyBoat_Hull. WaterlineLength, WaterlineBeam, Draft, and Freeboard should 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.

  7. Update propulsion in DA_MyBoat_Propulsion. LocalPosition should match where the engine / propeller actually lives on your mesh. MaxPowerKW controls top speed: start with the Runabout’s value and tune from there.

  8. Place and test. Drag BP_MyBoat into a level with BP_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 MaterialType density is too high. Visualise with DebugDrawShapes() 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 CenterOfMassOffset Z, or add a ballast shape with high density at the keel.
  • Won’t plane → check bEnablePlaning = true and that PlaningThresholdSpeed is reachable with your engine’s power. See Tuning a planing hull.
  • Won’t turn → increase TurnAssistMultiplier on VesselMovementComponent, and verify your ControlSurfaces array contains a Rudder.
  • 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_Runabout already has Enhanced Input wired.

That’s the value of the reference vessels: they’re not just demos, they’re starting points.