Skip to content

Snowflake growth simulation in BlocksCAD

Advertising
?
Creation quality: 5.0/5 (2 votes)
Evaluation of members on the printability, utility, level of detail, etc.

  • 4.3k views
  • 21 likes
  • 226 downloads

License
3D design format
STL Folder details Close
  • Reiter_20_ridged.stl
  • r40-rg1.stl
  • r40-rg2.stl
  • r40-rg3.stl
  • r40-rg4.stl
  • r40-rg5.stl
  • r40-rg6.stl
  • r5-rg2.stl
  • r50-rg3.stl
  • r50-rg6.stl
  • reiter-var2.stl
  • reiter-var3.stl
  • reiter-var4.stl
  • reiter-var5.stl
  • reiter-var6.stl
  • reiter20-1.6-0.7-0.002-30.stl
  • reiter20-1.6-0.7-0.002-50.stl
  • reiter20-1.6-0.8-0.002-40-beveled.stl
  • reiter20-var1.stl
  • reiter30-0.5-0.7-0.003-150.stl
  • reiter30-3d.stl
  • reiter30rand-gamma.stl
  • reiter30rand-gamma.stl
  • reiter40-1.6-0.7-0.002-120.stl
  • reiter40-1.6-0.7-0.002-80.stl
  • reiter40-3d.stl
  • reiter40-ridged.stl
  • reiter40-var0.stl
  • reiter40-var1.stl
  • reiter40-var2.stl
  • reiter40-var9.stl
  • reiter50-1.stl
  • reiter50-with-plates.stl

Learn more about the formats

Publication date 2018-10-09 at 13:29
?
Published to Thingiverse on: 2017-12-31 at 07:06
Design number 34184

3D printer file info

3D model description

This implements a modification of Reiter's hex cell snowflake growth algorithm in BlocksCAD. The algorithm uses a real-valued cellular automaton modeling the diffusion and accretion of moisture. When run at high resolution, the model can produce surprisingly lifelike snowflakes, but BlocksCAD can't handle more than about radius 50 (and even that is laggy) of hex grid for the evolution.

I strongly recommend using Firefox instead of Chrome for these large BlocksCAD projects. Firefox is much more responsive.

The model has these main parameters:
* alpha: controls moisture diffusion speed
* beta: controls background moisture level (with optional random local variation)
* gamma: controls accretion rate at frozen locations (with optional random temporal variation)

The random variation modifications, which aren't in the original Reiter algorithm, have ended up producing very nice effects--or at least the beta variation has (the gamma variation seems not to do as much).

There are four versions of the BlocksCAD code: radius 20, radius 30, radius 40 and radius 50. Up to radius 40, it works fine on Firefox, and on Chrome up to radius 30. Radius 50 is laggy on Firefox, and I haven't even tried it on Chrome. Firefox is much faster for BlocksCAD.

You can vary the thickness of the snowflake based on the simulated mass value at a given point for a further 3D effect (change the min_thickness to be less than the max_thickness for this effect), or you can introduce symmetric ridges for a pleasing visual 3D effect (make the ridge_angle be something like 3-10 degrees).

The snowflakes are readily printable--see photos. I recommend a thickness of about 2.5mm, and using a razor to scrape the flake off the printer bed.

The Thingiverse customizer was produced by exporting the code from BlocksCAD to OpenSCAD and moving the parameters to the top. Exported OpenSCAD code also generated the animation and the mosaic.

BlocksCAD does not support arrays. And it's a functional language. The evolution is thus handled by having a gigantic evolve module, which takes 421 arguments (in the radius 40 version): the iteration count, and the data for all the 420 cells being simulated (only 1/12 of the full board needs to be simulated--the rest is reconstructed by symmetry). The module then calls itself recursively, with a decremented iteration count and with evolved cells. Because of the lack of arrays, each cell's evolution has a hard-coded call to a cell evolution function. Once iteration count reaches zero, all the cells that count as frozen (data value at least 1) are drawn, as well as their (typically) 11 symmetric copies, by the draw module.

There is also a big go module that initializes the arguments for evolve.

While one could, though it would be crazy to, drag-and-drop all the hard-coded evolution code, I just wrote a python script (included: the main code is reiter.scad) that generates the BlocksCAD xml for the evolve and go modules. The drawing code, the individual cell evolution code, and the parameter initialization code was hand-written in BlocksCAD.

https://youtu.be/kZH0ZB992ZY
https://youtu.be/812HeHZrEhk

Advertising


Issue with this design? Report a problem.

Would you like to support Cults?

You like Cults and you want to help us continue the adventure independently? Please note that we are a small team of 3 people, therefore it is very simple to support us to maintain the activity and create future developments. Here are 4 solutions accessible to all:

  • ADVERTISING: Disable your banner blocker (AdBlock, …) and click on our banner ads.

  • AFFILIATION: Make your purchases online by clicking on our affiliate links here Amazon.

  • DONATE: If you want, you can make a donation via Ko-Fi 💜.

  • WORD OF MOUTH: Invite your friends to come, discover the platform and the magnificent 3D files shared by the community!


Sharing and downloading on Cults3D guarantees that designs remain in makers community hands! And not in the hands of the 3D printing or software giants who own the competing platforms and exploit the designs for their own commercial interests.

Cults3D is an independent, self-financed site that is not accountable to any investor or brand. Almost all of the site's revenues are paid back to the platform's makers. The content published on the site serves only the interests of its authors and not those of 3D printer brands who also wish to control the 3D modeling market.

100% secure payment by credit card, PayPal, Apple Pay, Google Pay, etc.
View all payment options.