**We ran into this same issue while working on Bioshock Infinite. **
The problem scene - (opening sequence) - Booker and Twins are on the boat* - Booker exits the boat and is given full camera freedom (this includes the ability to look back at the boat).
Issue #1 - The ocean was calculated with a vertex shader (vertex animation), which meant the waves pierced the hull and ignored the space in which air was suppose to occupy.
Issue #2 - After exiting the boat, this became even more evident as they began to row away from the lighthouse, the water did not appear to be affecting the boat (foam, splashes, etc.).
Issue #1 Performance Solution: Since the player (Booker) was confined to the boat, we were able to simply change the rendering priority of the boat (and all objects within it) to a sort priority that was 1 level higher.
Issue #2 Solution: When out of the boat, there was no getting around the interaction and volume issue. I unfortunately am not able to give “all” the details, but I can steer you in one of the several right directions. When dealing with vertex information, it is impossible to add unique alpha maps (textures - such as the shape of the hull of the boat) into the equation. “I mean, it is possible, but dangerous and extremely performance heavy. Not to mention “in UE3” you had to modify a bit of code to do it”. So with that in mind, the big question is, how do you mask off the vertex information to fit the shape of the boat? One solution is: There needs to be a texture map (alpha) of the shape of the boat. Then, this needs to be applied to a special material that can be projected through a light or dynamic decal onto a surface. You then need to bind the location of the dynamic actor (i.e. - the light or dynamic decal that is projecting the alpha texture) to the location of the boat. You then need to modify it so that the projected material (alpha texture) acts as a rendering mask for the ocean priority only. You then place a second (and much cheaper mesh) under the boat with another type of ocean material that is bound to the boats location. This material has a modified boat hull gradient falloff which is then driving a tessellation deformation (or just a deformation), which then conforms the underlying mesh with the top ocean plane “effectively stitching them together”. Further modifications can be made so that the mask behaves as the boat rocks and drops farther into the ocean or raises out of it.
This solution is (roughly the same “if I am not mistaken” - as the one used on the opening sequence). After I brainstormed with the Lead VFX - Stephen Alexander - he took the concept and implemented it. So I am not sure of all the details he chose to implement, nor did I bother investigating his kismet setup and shaders. (Was busy trying to stay on top of all my tasks)
As a side note, this is not the only way to accomplish unique “boolean volumes”. There are other methods, just gotta reach way outside the box to find them
You can see the end result of the implementation at 2:30 seconds: