In my first attempts I made particles hug the terrain, going up and down, flowing with the hills and valleys. This was problematic for a few reasons. The first is that our mountains have a lot of rock models for cliff faces; these cliff models are not part of the terrain information, only the underlying dynamically tessellated mesh was. This meant that the particles would clip right into all rock faces and disappear, making the windicator confusing to follow. It also looked a little unnatural hugging the terrain so perfectly, so my next attempt was to set the terrain as a floor so that particles would be pushed upward when moving uphill and let particles drift flat when the terrain sloped downhill away from them. I added upward velocity when hills are in the way by doing several tests ahead along the path of the particle’s motion. At each of these tests, the particle is looking to see how close it would be to the terrain at that point, or if it would even be buried. If the particle is too close or buried in these look-ahead points, the particle will be given upward velocity. Lastly, the windicator has different elements as the environment changes: pampas fluffs and grass in fields, leaves in forests, ash in burnt areas, and others. I’ll talk more about how that system works a little later in this post.