Water reflections for the noob

HD, 1440p, and 4k resolutions are exasperating the problem. If you have very simple materials (EXTREMELY simple materials), few draw calls, few triangles, and a very powerful graphics card, you might be able to use proper scene reflect captures and get a good performance out of it. However, UE4’s complex renderer would not handle reflections very well at all. Just using forward per-pixel lighting on a water plane sends the rendering costs into realms that used to be reserved for parallax occlusion materials last gen. And since we’re now expecting higher resolutions than last gen, it’s much more difficult to make an accurate scene reflection possible.

Super Mario Sunshine had realtime reflections on its water. However, the water was an unlit translucent material without any normals or specularity or shading at all, just a texture with interesting mipmaps to make it “look” like it’s shaded in the distance, and the reflection. It ran 640x480 interlaced in 30 frames per second, materials were extremely simple, and there were framerate drops at certain angles. Doing the same thing nowadays with full scene GI, complex specular, and way more polygons at 4-8 times the resolution and 2 times the framerate is obviously going to be problematic.

While I would like to see Epic feature a reflection, normals, and simple specular water shader as an option for some more technically-inclined games at lower resolutions (as opposed to running the reflection, shadow, and GI environments), it’s still nigh-on impossible to expect it to run well. I made a level for a class project that used a giant bay with realtime reflections, and the rendering cost was so bad, everything else I made had to be extremely simple just to avoid dipping below 26 FPS. Even on a GTX 960 I suffer massive rate drops with scene captures. There has got to be a better way, but I don’t know it.