Ice Growth

Procedural Geometry

The procedural geometry creation is based on an input curve. The main spike geometry is created by scattering points on the curve, adding noise to the position of the points, and then using the Ray SOP to bring them back down to the terrain input. Normals are added to the points based on the terrain or a separate source geometry. Cylinders are then copied on the points, creating the main spikes. The points are used to transfer color on the terrain, which is then used to scatter points on the terrain for the secondary points. The normals for the secondary points come from the terrain normals. A different set of cylinders are copied on these points, and their sizes are based on their proximity to the main spikes. The spikes are remeshed and noise is added to remove uniformity.

Growth

After the geometry has been constructed, it is converted into a volume, and then into points. The points are fed through a for each loop for each different spike where the user-provided infection start point is rayed on to the points. Out of the for each loop, a resistance value is calculated for the points, based either on the default curveu attribute or a user-controlled attribute along the curve. The points are then fed into a sop solver where the infected points infect nearby points that are uninfected. The remaining uninfected points are deleted. A recently born group is created from points that were infected on the current frame. The points are then meshed using the VDB from Points SOP.