I'd say a simpler approach to calculating that would be to have the drag forces from water have different strengths on each cell based on how many faces are touching another occupied cell. For example, a cell will all 6 adjacent cells empty (despite being useless for a ship, as this would just be a GSO or Venture cab, or individual floating single cell blocks) would receive full drag force, while a cell with all 6 adjacent cells occupied would receive much less drag.Can we get better drift control?
If you’re already doing calculations per block below or at water, could add it relatively easily: buoyancy goes up, gravity goes down, and you could add a predefined drift force in the other four axes pointing inwards. (Proportional to current tech velocity)
Doing that on every block makes most of the “drift” forces cancel out (mostly) with each other, except for the blocks on the outer shell of whatever is floating, which will prevent drifting.
The proportionality to velocity also means the tech stops much sooner without propulsion, and that if a tech happens to be drifting, it will be penalized extremely heavily in the normal axis of the tech, which greatly assists in turning.
Hang on, that won't work... I'm missing something here. I don't have much time to type this, but if you combine this with ray casting in the opposite direction to the velocity of the tech, it might work at least moderately well.