A fully randomise gerstner wave generator. This also has the option for custom user defined wave data. Made using a render taget to store the wave data, which saves on many parameters per wave. 2 Colours were stored for each wave, holding the data of: Direction (x and y), Speed, Steepness, Wavelength and Amplitude.
Sampling 64 waves can get a bit expensive (sin and cosine are invovled), especially if you calculate normals. I found that using derivities for the normal calculation was cheaper than sampling the function 2 more types for the cross product to get the normal.