I apologise for my English and also for responding to this even though I do not have in-detail experience with UDK, but this looks to be a draw order/ sort order issue that occurs with non opaque items in many game engines, so I will try to offer information that is as engine-agnostic as possible, maybe it will help
From your point of view (underwater), for this to look ok you would want to draw these two non-opaque elements always in this order:
1 - the top “sheet of water” then
2. - the “water fog volume”
(This is for an underwater camera; if we are talking about an above water camera, the order would be reversed)
It appears from the screenshots that the game engine sorts these two elements dynamically, and sometimes it draws ok but other times, based on camera position or angle, believes the top sheet of water is closer to the camera than the water fog volume and draws them in reverse order. This can happen sometimes depending on the sorting algorithm (it may be pivot based, or it may be bounding box based)
If you have access to any element properties/render flags that control the drawing order of these two elements, altering those in order to force your desired draw order will solve your problem.
The bubble particle issue is trickier, what appears to happen in the screenshot is that it gets drawn on the screen before the volumetric fog is applied, but the bubbles do not write their depth in the Z buffer, so the volumetric fog shader has no clue how far from the cammera the bubbles are, does not know how “foggy” they should get, so you are left with the already existing Zbuffer( or depth buffer) , written there by the pre-existing geometry.
Drawing the bubbles last will apparently solve the problem, and so will deactivating the fog on them, altering the fog color might also improve things, but the bubbles will never enter correctly the volumetric fog if the camera gets further away from them.
There are several ways to have the bubbles diplay ok AND be affected by the fog (more or less accurately)
a. Make the bubbles have a more “graphical pen” aspect by using an AlphaTest shader, not an alpha blend one, enable Z write on their shader and rely on a post-process AA algorithm to soften the ensuing jaggies. or
b. Dynamically link the bubble emitter to a parameter that gives the emitter’s distance from the render camera, and have all its particles fade out to 0 based on a linear relation of this parameter to a maximum fade-out distance established by you. (if that is possible in UDK)
c. and there are probably many other ways that I do not have a clue about
Hope this would be of some help,
Dragos Stanculescu