private static void GerstnerShoreWave(WaterGerstner.PrecomputedShoreWaves wave, Vector2 waveDir, Vector2 pos, Vector2 shoreVec, float variation_t, ref Vector3 outP)
    {
        float single = Mathf.Clamp01(waveDir.x * shoreVec.x + waveDir.y * shoreVec.y);

        single *= single;
        float     k             = wave.K * (waveDir.x * pos.x + waveDir.y * pos.y - wave.C + variation_t);
        float     single1       = Mathf.Cos(k);
        float     single2       = Mathf.Sin(k);
        ref float singlePointer = ref outP.x;
    private static void GerstnerShoreWave(WaterGerstner.PrecomputedShoreWaves wave, Vector2 waveDir, Vector2 pos, Vector2 shoreVec, float variation_t, ref float outH)
    {
        float single = Mathf.Clamp01(waveDir.x * shoreVec.x + waveDir.y * shoreVec.y);

        single *= single;
        float k = wave.K * (waveDir.x * pos.x + waveDir.y * pos.y - wave.C + variation_t);

        Mathf.Cos(k);
        float single1 = Mathf.Sin(k);

        outH = outH + wave.A * wave.Amplitude * single1 * single;
    }