Snowflakes form when a small ice crystal (the “seed”) gets buffeted about up in a cloud, causing smaller ice crystals to stick to its surface and growing it into an aggregate structure. It’s possible to model this behaviour in code fairly simply, by assuming a static seed crystal and a cloud of smaller particles which move according to Brownian Motion (that is, random steps in a random direction). You can see that over time, when the smaller particles stick to the larger structure, a fractal snowflake grows:
Of course, this is a simulation not the real thing, so there’s nothing to say we can’t release the particles to drift downwards like rain, onto a line-like seed, and grow some trees: