# Overview

FLASH is a GPU-native physics engine designed for **parallel simulation of deformable bodies**. It implements a redesigned Local–Global / NCP solver stack on CUDA that scales to **millions of degrees of freedom at real-time rates on a single GPU**, with Python bindings, vectorized multi-environment execution for reinforcement learning and synthetic data generation, and a built-in rasterizer and OptiX ray tracer.

{% hint style="info" %}
**Scope.** The current release covers cloth and codim-0 soft bodies (tetrahedral and triangular elements). Rigid- and articulated-body dynamics are under active development.
{% endhint %}

The integrator is a **Projective-Dynamics local–global** solver coupled with a **non-smooth Newton** update for Signorini–Coulomb contact and friction. The solver math is described in [Zeng et al. 2025](https://arxiv.org/abs/2503.15078); the FLASH system — multi-environment scheduling, block-diagonal solve, headless rendering — is described in [FLASH](https://arxiv.org/abs/2604.17513).

## Highlights

* **Time integration.** Projective-Dynamics local–global solver on CPU and CUDA.
* **Contact.** Non-smooth Newton with Fischer–Burmeister NCP, Projected Gauss–Seidel, and a mass-approximated *Lite NSN*. All three on CPU and CUDA.
* **Constitutive models.** Neo-Hookean / ARAP / corotational elasticity for both triangular and tetrahedral meshes; isometric and Laplace–Beltrami bending; edge springs; pin and cable hard constraints.
* **Linear solvers.** Sparse Cholesky direct inverse, dense and sparse CG, CR, Jacobi-PCG, Jacobi-PCR — all CPU and CUDA.
* **Collision detection.** Continuous (CCD) and discrete (DCD) detection covering vertex-face / edge-edge / face-vertex pair categories; analytical primitives (plane, box, cylinder, sphere, torus).
* **Parallelization.** Multi-environment vectorization with shared assets and per-environment state on a single GPU.
* **Rendering.** Built-in GL rasterizer + OptiX ray tracer, multi-camera — RGB / depth / segmentation / point cloud returned as `flash.CudaArray` (DLPack / CUDA Array Interface, zero-copy into PyTorch / JAX / CuPy).
* **Robotics interface.** URDF kinematic actors (render-only), positional and cable controllers, bounding-box end-effector.
* **Python-first.** [`flash.RealtimeSim`](/api-reference/realtimesim.md) and [`flash.OfflineSim`](/api-reference/offlinesim.md) share the same scene format and step API.

## Where to go next

* New to FLASH? [Installation](/user-guide/installation.md) → [Quickstart](/user-guide/quickstart.md) → [Examples](/user-guide/examples.md).
* Authoring scenes? [Scene structure](/engine/scene-structure.md), [Constitutive models](https://github.com/PranaLabs/FLASH/blob/main/docs/engine/constitutive-models.md).
* Writing Python? [`flash`](/api-reference/flash.md), [`flash.RealtimeSim`](/api-reference/realtimesim.md), [`flash.OfflineSim`](/api-reference/offlinesim.md), [`flash.Camera`](/api-reference/camera.md).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.realsim-gym.org/user-guide/readme.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
