Hi everyone. It’s been a long time, I know. We’re starting on a new approach to the world and the campaign, leaning more heavily into procedural generation. And with more procedurally, dynamically placed elements, we’re also seeing how we can instance them to minimize draw calls and improve performance.

This post isn’t going to be one of our big marketing posts. This is going to be more of a technical look for some colleagues and potential contributors.

One of the new assets we have been working on is the water shown here. We are using some panning textures to offset vertices in the vertex shader. Unreal Engine 3 does not natively allow textures in the vertex shader. We had to do some digging into the C++ code to allow it.

In addition to the panning texture that controls the vertex offset, we have different scales and speeds of noise to control the underwater distortion and the surface highlights. We also use a Fresnel node on the surface normal to draw some hints of wave outlines. Besides the dynamically drawn outlines and the specular highlights, the water is all one solid color, with a little depth-based translucency.