This PrusaSlicer project cuts the original 3DBenchy.stl into parts, using 100% infill density for the aft hull and 10% lightning infill elsewhere. The resulting model floats upright when printed in PLA. This version is under 9 grams, but some of my previous test prints were over 12 grams and just ...
The technique can be applied to other models: Use PrusaSlicer's 'cut' feature to break the model into parts, and tweak the settings (mainly infill and perimeters) to give each part the desired density.
yeah.... but I wanna hit a button and see it go...
(I mean, I do understand how incredibly hard and difficult that could be. which is kind of why I asked. I'd be very curious about how you implemented that process.)
It's not rocket surgery. Boats need more weight at the bottom than the top. If you put it in water and it leans, shift some weight in the other direction.
PrusaSlicer has a 'center of gravity' indicator that removes at least some of the guesswork.