This question addresses exactly what I want but it hasnt been answered: How could I create a sand dune animation?

enter image description here

In case it might be helpful I found this paper on the physics of it (although uncertain if its the same thing as in the above desired image): https://arxiv.org/pdf/1201.4353.pdf

Dunes at pg 39. enter image description here enter image description here enter image description here

  • 2
    $\begingroup$ Hello :). What have you tried so far and where exactly are you stuck? This isn't the best place for asking for full tutorials :). $\endgroup$ Commented Apr 15, 2021 at 7:25
  • $\begingroup$ I've already made the dunes using this tutorial: cgcookie.com/course/… However, I have no idea how to make actual sand particles move in this way. I dont have any particle system set up, because I'm not even sure that's a smart way to do it or the best way to achieve the above effect. I'm not even sure if the way I made the dunes should be scrapped for a diffrent way (which I don't mind doing) (made entirely of real particles or something) to achieve this effect. $\endgroup$
    – Hmm
    Commented Apr 15, 2021 at 7:28
  • $\begingroup$ do it with smoke maybe? $\endgroup$
    – moonboots
    Commented Apr 15, 2021 at 9:55

2 Answers 2


Something can be done with Smoke simulation, partly used to fake soft dust and partly to be used as a Force Field > Fluid Flow for Particle system (sand particles).


The main issue with smoke sim is you can't expect backflip turbulences behind the tip of dune.

enter image description here

Note: to see smoke like this enable
Simulation Properties > Fluid > Viewport Display > Slice and Grid Display ... just move White slider to the left side of Colorramp to make it brighter.

version Smoke

I'm not going to do step by step answer since I don't know if this is a way for you. Just a quick overview ... One Landscape object is used to be rendered and also be Fluid > Effector for simulation (to let smoke flow over). Second Landscape (copy of first one) is used as Inflow object (emitter of smoke).

To build sim quicker ... with this object selected search for Quick Smoke. This operator automatically assign this object to be in sim Inflow object and creates also Domain with Smoke (volumetric) material. The only one parametr I changed (probably :)) for Domain setting is Gass > Heat to zero (or something low) so smoke is not raising up, but stay on ground level.

Because we don't want to emit smoke from all surface, switch to Weight Paint mode and paint by Strength 1 (red) places you want to emit smoke. This creates a Vertex Group. Use this Group in Simulation Properties > Fluid > Settings > Vertex Group (usually named "Group".

Last thing ... add Force Field object type Wind here Strength 150, but probably can be less ... play with the value.

enter image description here

But if you need only to let fly some "dust" from dune edge, you can probably fake it by creating a Vertex Group only from top edge vertices and use them as smoke Inflow.

Enable for Domain under Physics Properties > Fluid > Dissolve for effect from your reference image.

  • $\begingroup$ This is really nice. I'm not sure whether @Hmm is looking for the sand-flow, or the resulting movement of dunes. I've probably missed the point. But this is such a great subject. $\endgroup$
    – Robin Betts
    Commented Apr 15, 2021 at 10:13
  • 1
    $\begingroup$ Yes, his tech images shows your topic ... I just grabbed the title (sand blowing over dunes) :) ... and yes subject is great, but what I tried previously not for blender with smoke. There is not nice way to use for detailed obstacles (effectors) - result is very blocky (I tried simulate car in with tunnel) ... and as described here smoke sim doesn't calculates secondary collision turbulences. $\endgroup$
    – vklidu
    Commented Apr 15, 2021 at 10:22
  • 1
    $\begingroup$ This stuff is always so fiddly! It would be wonderful if we could find a way to pick sand up in one place and dump it in another. $\endgroup$
    – Robin Betts
    Commented Apr 15, 2021 at 10:24
  • $\begingroup$ Thank you so much! As a beginner I'm really struggling to set this up. Could you give more detailed instructions/steps on how to achieve the result you achieved? I don't even know where many of those buttons are located. @RobinBetts I am curious about both actually! Perhaps I was thinking of like slight granular movements but even coarse movements are really interesting. $\endgroup$
    – Hmm
    Commented Apr 15, 2021 at 11:50
  • $\begingroup$ Wow! Love that you included the .blend file and have elaborated on the process. So many kind people here. Thank you again so so much! $\endgroup$
    – Hmm
    Commented Apr 15, 2021 at 17:22

This just happens to touch on something I've been playing with lately. I watched the excellent Entagma's video on algorithm design, here, which uses sand dune evolution as an example. They use a Houdini graph to implement a model of it, which is a much cruder one than in the paper you link. (Thanks for that reference!)

I don't think Geometry nodes is quite up to that yet, so I thought: 'Why not use the renderer to do this, and hand all the work over to the GPU?' The idea is as follows:

  • Set up an orthogonal camera to shoot a square plane, exactly filling the frame.
  • Give the plane an image-sequence texture, containing a height-map. To begin with, only frame 0 matters. It's the seed from which the rest will be generated.
  • Frame 1 of the animation uses frame 0 of the sequence as an input to its shader tree.
  • The shader tree manipulates the input texture in some way that simulates the effect of wind, and renders it to frame 1
  • Frame 2 uses the render of frame 1 as its texture, and so on. Frame n manipulates the texture provided by frame n-1, and renders it for use by frame n+1. Feedback through the renderer.

The manipulation in this example is as crude as Entagma's:

enter image description here

  • The incoming height-map is put through a Bump node to extract an approximation of its normals. This tree is only interested in the normals' X and Y components.
  • The Combine XYZ node gives us a 'Wind Direction'
  • The Dot Product then varies some effect according to how much the dunes are facing the wind. In this case, reducing the height where facing toward the wind, increasing where facing away.

In this case, I also put the result through the compositor, to blur it a little before rendering for use in the next frame. So far, so OK, over 25 frames, when the resulting height-map sequence is used to actually displace the plane:

enter image description here

The possibilities are endless .. instead of using a Bump node, you could actually displace the plane for every frame, and use a raking light as wind. getting shadows. A Shader to RGB node would let you manipulate the light-response of the surface as color, before feeding the texture back. (Not claiming the settings wouldn't be fiddly)

I think the general method might have some potential for generating other kinds of growth or flow.. if not the process, then at least the result for use as textures. Challenging to get 3D information in there, somehow.. it would be great to get the stains left by rain on buildings, etc.

  • $\begingroup$ @vklidu Spotted! .. I'm looking forward to playing with this some more.. but it is quite time-consuming :D .. maybe not so much when I've had some practice. Could reduce the step-size and run it for longer. $\endgroup$
    – Robin Betts
    Commented Apr 15, 2021 at 10:33
  • $\begingroup$ Thank you @RobinBetts ! This is incredible. Thank you for the effort you put into this answer, beautiful. I will explore and try this out. $\endgroup$
    – Hmm
    Commented Apr 15, 2021 at 11:52
  • $\begingroup$ OK it seems to be correct, it needs probably just big and small layer youtu.be/3PXHpsQtdcU $\endgroup$
    – vklidu
    Commented Apr 18, 2021 at 7:18
  • $\begingroup$ @vklidu That's lovely. I bet we could do that through the renderer in Blender. The fixed terrain could be done, adding in a second immutable height map, with accretion/reduction conditional on exceeding that height. Your 'big and small' looks likely, doesn't it. Achievable with different blur levels in the compositor? The 'For sale, if there is interest' caption on Barrett's other dunes video does not bode well for quizzing him on his algorithm :D. I may have to start a 'Dunes' chat when I can get back to this. Busy, myself, for a while. $\endgroup$
    – Robin Betts
    Commented Apr 18, 2021 at 9:53
  • $\begingroup$ Later I red it ... Conclusion is not so much optimistic :) so I hope some hints for py codecs :) I deleted my comments. $\endgroup$
    – vklidu
    Commented Apr 24, 2021 at 19:08

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .