This app allows you to simulate how any origami crease pattern will fold. It may look a little different from what you typically think of as "origami" - rather than folding paper in a set of sequential steps, this simulation attempts to fold every crease simultaneously. It does this by iteratively solving for small displacements in the geometry of an initially flat sheet due to forces exerted by creases. This solver extends work from the following sources:
Origami Folding: A Structural Engineering Approach by Mark Schenk and Simon D. Guest
Freeform Variations of Origami by Tomohiro Tachi
All simulation methods were written from scratch and are executed in parallel in several GPU fragment shaders for fast performance.
Built by Amanda Ghassaei as a final project for Geometric Folding Algorithms. Code available on Github. If you have interesting crease patterns that would make good demo files, please send them to me (Amanda) so I can add them to the Examples menu. My email address is on my website. Thanks!
More documentation coming soon - I'm preparing a paper about the simulation methods used here, I will post it once it's ready. For now, find some additional info here.
FILE IMPORT TIPS
Bad design files will throw errors and create models that explode or cannot be solved, here are some tips for importing FOLD or SVG files that work.
The FOLD file format is specified in these docs. This tool imports FOLD v1.0 files with all of the following fields populated:
This tool currently supports an interactive Virtual Reality mode for the Vive and Oculus headset and controllers (it may work on others, but it is not tested). For this to work, you must first use a WebVR enabled browser: currently only an experimental build of Chromium (with enable-webvr and -enable-gamepad-extensions flags) and the latest Firefox for Windows are supported by this app.
When you open this page with the appropriate browser, you will see a button that says "ENTER VR". Clicking this will put the app into an interactive VR mode. The hand controllers will allow you to grab the origami mesh and pull on it. This is especially interesting if you set the Mesh Material to Strain Visualization so you can see how your interactions change the internal strains in the material.
The dynamic simulation is calculated by solving for all the forces in the system, moving time forward in small Δt steps, and updating the vertices of the origami incrementally. The time step size for this animation is calculated automatically based on the material stiffnesses set in the Simulation Settings section: more stiff settings require shorter time steps to solve and will slow down the simulation.
Num simulation steps per frame allows you to control the number of tiny time steps forward to take on each render cycle. If the simulation looks choppy to you, you might consider lowering this setting. Lowering the number of steps per frame will slow down the simulation, but will result in a more smooth animation.
Average vertex error gives a sense of how much the distance constraints in the origami pattern are being violated (i.e. how much the sheet is being stretched). The error at each vertex is evaluated by averaging the percent deviation of all its distance constraints with adjacent vertices. This error is reported as a percent of the total length of the distance constraint to remove scaling effects.
This measurement is equivalent to Cauchy strain or engineering strain of the distance constraints on this system. Increasing the Axial Stiffness will tighten these constraints and lower the error in the simulation.
To visualize the error of each vertex graphically, select Strain Visualization under Mesh Material in the left menu.
This app uses a compliant dynamic simulation method to solve for the geometry of an origami pattern at a given fold angle. The simulation sets up several types of constraints: distance constraints prevent the sheet from stretching or compressing, face constraints prevent the sheet from shearing, and angular constraints fold or flatten the sheet. Each of these constraints is weighted by a stiffness - the stiffer the constraint, the better it is enforced in the simulation.
Axial Stiffness is the stiffness of the distance constraints. Increasing axial stiffness will decrease the stretching/compression (strain) in the simulation, but it will also slow down the solver. Face Stiffness is the stiffness of the face constraints, which help the axial constraints prevent deformation of the sheet's surface between the creases.
Fold and facet stiffnesses correspond to two types of angular constraints. Fold Stiffness is the stiffness of the mountain and valley creases in the origami pattern. Facet Stiffness is the stiffness of the triangulated faces between creases in the pattern. Increasing facet stiffness causes the faces between creases to stay very flat as the origami is folded. As facet stiffness becomes very high, this simulation approaches a rigid origami simulation, and models the behavior of a rigid material (such as metal) when folded.
Internally, constraint stiffnesses are scaled by the length of the edge associated with that constraint to determine its geometric stiffness. For Axial constaints, stiffness is divided by length and for angular constraints, stiffness is multiplied by length.
Since this is a dynamic simulation, vertices of the origami move with some notion of acceleration and velocity. In order to keep the system stable and help it converge to a static solution, damping is applied to slow the motion of the vertices. The Damping slider allows you to control the amount of damping present in the simulation. Decreasing damping makes the simulation more "springy". It may be useful to temporarily turn down damping to help the simulation more quickly converge towards its static solution - especially for patterns that take a long time to curl.
A Numerical Integration technique is used to integrate acceleration into velocity and position for each time step of the simulation. Different integration techniques have different associated computational cost, error, and stability. This app allows you to choose between two different integration techniques: Euler Integration is the simplest type of numerical integration (first order) with large associated error, and Verlet Integration is a second order integration technique with lower error and better stability than Euler.
COMPLIANT DYNAMIC SIMULATION
COMPLIANT STATIC SIMULATION
RIGID STATIC SIMULATION
Cauchy strain or engineering strain is a unitless measurement of how much a material is being stretched or compressed under load. The Strain Visualization illustrates the strain across an origami sheet by mapping it to a color from blue (no strain) to red (max strain).
Toggle this control to enable/disable mouse interaction with the origami model. When enabled, mousing over the model will display a highlighter; clicking and dragging allows you to interact with the model in real time. Very vigorous interactions with the model may cause it to pop into a strange configuration that it can't escape - use the Reset button to start the simulation again from a flat state.
Speed : ( radians per frame )
SVG IMPORT SETTINGS
Vertex merge tolerance (px) :