SkillAgentSearch skills...

Morningstar

Fast dynamic fracture using position-based rod-bonded discrete element method

Install / Use

npx skills add entropylost/morningstar

Installs into whichever agent you are using.

About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Morningstar: Fast Dynamic Fracture using PB-RBDEM

scenes/rigid-collide-4.scene fracture pattern

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

View on GitHub
GitHub Stars18
CategoryDevelopment
Updated1d ago
Forks0

Languages

Rust

Security Score

80/100

Audited on Aug 7, 2026

No findings