Day 1 Project Preparation 

The project is based on the Taichi programming language to perform snow simulation in real physical conditions. Therefore, the corresponding taichi dependency package for Python needs to be configured.

By running the physical simulation program on Python, we can get obj files that can be exported to Blender. At the same time, it is also possible to observe real-time particles directly by calling the gui function in the taichi language. After confirming that the whole process worked, we finished our first day of the project.

Day 2 Particle Generation 

The particles can be generated in the program by instantiating the positions. By limiting the range of activity of the object particles to a rectangular area, we can generate a rectangular-shaped snow block at a higher position. 

To render it on the GUI, we placed the camera in front of the rectangular box and colored the particles in each position as blue dots with a small radius to get approximate information about the object.

Day 3 Applying the MPM  Algorithm 

After obtaining these particles, we just need to simulate the physical movements they perform. Providing the program with parameters such as Young's modulus, we then need to perform one APIC iteration at each step and take into account the compression properties of the snow. 

The tutorial video for the specific implementation of this algorithm is below: 

https://www.bilibili.com/video/BV1ZK411H7Hc/

Day 4 Model File Extraction 

With the tool MCubes in Python, we can transform the corresponding particles into a combination of vertices and triangles. With the KDtree function included in the Scipy package in Python, it is easy to reconstruct the particle mesh for this object. Depending on the threshold value we set, the corresponding data will be transformed into an obj file. 

Day 5 Shader

We are considering integrating Blender's shaders to improve the visual appearance of the snow simulation. In the shader editor, we edit the material for the object. The initial step is to configure the blender for material displacement. Cycles is used for the rendering engine and GPU is used for the device. At the same time, we added suitable lights and world properties in the scene to better preview the performance of the result. Secondly, we've set the big scale displacement and the small scale displacement and combined them. The next step is to simulate semi-translucent objects via subsurface scattering, in which light rays enter, bounce around, and leave in a new location. It can show the material effect of ice and snow more effectively. The last step is to set the roughness or rather enhance the glittering effect of the snow. 


We can see how the reflection of the material behaves in the preview image.The black areas indicate the reflectable areas, which can be found mostly inside the structure, so it is necessary to flip both areas. Meanwhile, the white area indicates the non-reflective area, which also needs to be modified to be slightly reflective.


Finally we can get the final material result.

Day 6 Animate the Sequence 

We used the Stop Motion OBJ tool to easily import a 600 frame obj sequence file for real time play. The smoothing shading was set for each frame. Cycles is used for the rendering engine and GPU is used for the device. The average rendering time for each frame was 3 minutes, and the entire animation took over 30 hours to render. 

Day 7 Final Work 

This video is the final work.

snow result.mp4