for each plane you use to render the surface you need a matching volume mesh. OceanPlane does not have any... so you have to use pPlane1 or pPlane2 – or create a volume based on the OceanPlane. if you attach the underwater script to the weapon camera, then the underwater post shader does not "see" the scene as it gets the depth buffer from the weapon cam and not the scene cam. so first you would have to grab depth from the 1st camera. see luxwater_cameradepthmode.cs e.g.: this script does it for metal - but you could comment the if (metal) parts. it uses a commandbuffer to grab the depth buffer and uses Cameraevent.AfterLighting. at least in unity 5.6.3 this commandbuffer will be executed after the 2nd (weapon) camera has finished lighting using BeforeSkybox however solves the problem as the weapon camera does not render a skybox. in case you want caustics and render them using the gbuffer normals you will also have to copy the normal buffer from the first camera. then you have to tweak the underwater post shader and make it sample the _Lux_GrabbedDepth texture instead of the _CameraDepthTexture. this shader also uses the built in _ProjectionParams which of course matches those of the weapon camera. you will have to provide _CustomProjectionParams which fit those of the main camera. or make sure that far clipping planes of both cameras just match. and this are just the first steps to make it work somehow... so actually 2 cameras are not supported out of the box.