Morningstar
Fast dynamic fracture using position-based rod-bonded discrete element method
Install / Use
npx skills add entropylost/morningstarInstalls into whichever agent you are using.
README
Morningstar: Fast Dynamic Fracture using PB-RBDEM

This repository contains a GPU implementation of real time dynamic fracture using Rod-Bonded Discrete Element Method and Position Based Dynamics (see Primal/Dual Descent Methods for Dynamics). There is an unoptimized version of the Cosserat bond model available at entropylost/primal_dual.
Installation
Install Rust, clone this repository, and then execute cargo build --release. Note that this currently uses CUDA and so will fail on any machines without a dedicated NVIDIA gpu.
Usage
To launch the program, execute cargo r --release scenes/glassbreak-3.scene. When running, the keys WASD[Space][Shift] can be used to move the camera, and the mouse will rotate the camera, togglable via [Esc]. The key \ toggles the controls display, and [Enter] pauses the simulation.
The files use the Rusty Object Notation (RON) serialization format, with files ending in the .scene extension used to describe loadable scenes, and .pts to describe sets of points which can be referenced by objects in the scenes. The parameters used for the objects and constants can be seen in src/data.rs, as well as the default values. src/bin/generate.rs also shows an example program that can be used to generate a .pts file.
Performance
I could not get a demo application for RBDEM, so this is based on the estimations within the paper: In their video, the "Thick Plate" scene takes 14.06 seconds per frame on a 1080 Ti for 53 frames, which is 12.4 minutes of simulation time. Meanwhile, in rigid-collide-4, a similar simulation executes in real-time on a 3080 Laptop GPU over the course of 7 seconds. According to a GPU compute benchmark, the 1080 Ti and 3080 Laptop have scores of 9627 and 8459 respectively which are close enough for comparison purposes (although given that the 5090 D has a higher score than the 5090 it may be somewhat erroneous). So, by these metrics, the implementation here is about 100x faster than the version in the paper.
However, the validity of this logic is debatable, as the rigid-collide-4 scene looks worse than the reference.
Gallery
<table align="center"> <tr> <td align="center"><img src="images/glassbreak-3-anim.gif" alt="Glassbreak 3 Fracture Pattern"><a href="scenes/glassbreak-3.scene"><code>glassbreak-3</code></a> (see <a href="images/glassbreak-3-fracture.png">still</a>)</td> <td align="center"><img src="images/rigid-collide-4-side.png" alt="Rigid Collide 4 Side View"><a href="scenes/rigid-collide-4.scene"><code>rigid-collide-4</code></a> (see <a href="images/rigid-collide-4-video-redirect.md">video</a>)</td> <td align="center"><a href="images/glassbreak-large-front.png"><img src="images/glassbreak-large-front-50.png" alt="Glassbreak Large Front Fracture (downscaled)"></a><a href="scenes/glassbreak-large.scene"><code>glassbreak-large</code></a> (front)</td> </tr> <tr> <td align="center"><img src="images/prism-front.png" alt="Prism Front View"><a href="scenes/prism.scene">The Illumaniti</a></td> <td align="center"><img src="images/rigid-collide-4-front.png" alt="Rigid Collide 4 Front View"><a href="scenes/rigid-collide-4.scene"><code>rigid-collide-4</code></a> (front)</td> <td align="center"><img src="images/glassbreak-large-back.png" alt="Glassbreak Large Back Fracture"><a href="scenes/glassbreak-large.scene"><code>glassbreak-large</code></a> (back)</td> </tr> <tr> <td align="center"><img src="images/glassbreak-traced.png" alt="Rendered glassbreak"><a href="scenes/glassbreak-3.scene"><code>glassbreak-3</code></a> using <a href="https://github.com/entropylost/morningstar/tree/render">the alternate renderer</a></td> <td align="center"><img src="images/tablecrush-cone.png" alt="Tablecrush Hertzian cone"><a href="scenes/tablecrush.scene"><code>tablecrush</code></a> making a Hertzian cone</td> <td align="center"><a href="images/collide-200x60x60.png"><img src="images/collide-200x60x60-50.png" alt="200x60x60 Collision"></a><a href="scenes/tablecrush.scene">Ball hitting a 200 by 60 by 60 block</td> </tr> <tr> <td colspan="3" align="center"><img src="images/banner-pattern.png" alt="Wide glassbreak pattern"><a href="scenes/glassbreak-wide.scene"><code>glassbreak-wide</code></a></td> </tr> </table>Related Skills
node-connect
385.5kDiagnose OpenClaw Android, iOS, or macOS node pairing, QR/setup code, route, auth, and connection failures.
blender-python-addon
40.5kBlender Python add-on rules for operators, panels, properties, registration, testing, and API-safe scripting
flutter-development-guidelines-cursorrules-prompt-file
40.5kCursor rules for Flutter development with MVVM architecture, Riverpod state management, Material widgets, and Dart style guidelines.
commit-push-pr
140.6kCommit, push, and open a PR
