What I did was creating 10 different low poly sand grains (colour, shape). And making them member of the same group! This is important for particles.
Then apply a particle modifier to a basic plain surface. Where the hair particles are coming (random) from the sand grain group (it’s a property in partciles). Then I rendered this flat plane with the camera heads up (frontal). Goal is to generate a texture map. In GIMP I made from this texture a seamless tile.
So now I have a sand texture in the same colour structure / texture!
Also in GIMP I created a NORMAL map from my texture.
The reason for this approach is that if you want to have a sand look-and-feel like this, totally done with particles. You need billions of sand grains (computer crash probaly). Where the ones in the back have no real value except of the colour and texture.
My final sand (dunes) floor displayed here. Has the generated sand tile map and can be seen at the back, behind the objects. In front (water pools) I applied the same particle system as I used for the sand texture.
But under control of a density vertex group. Many particles it the front. Less in the middle, None at the back.
The final result is that the front has real (particle) objects. Interacting with water, etc.
Gradually shifting to the basic sand texture in the back.
I hope I explained it well.
Have fun, be smart, use Blender
PS. this was the original project Cube dude beach ready