Tissu
Tissu is a C++ cloth simulation SDK designed to integrate seamlessly into Digital Content Creation (DCC) tools such as Blender. It was developed to make high-fidelity cloth simulation as accessible as possible for technical artists and developers.
By combining a high-performance C++ core with a flexible Python API, Tissu lets you script complex simulations with the simplicity of Python and the velocity of C++.
Table of Contents
- Features
- How To Use
- Real-time Viewer
- Requirements
- Supported Operating Systems
- Build and Installation
- Development and Testing
- Technical Documentation
- License
Features
Tissu includes the following features:
-
IO
- Alembic exportation (
.abc) - Wavefront
.objimportation and exportation - State serialization (
.tissu) - Scene loader and exporter (
.json) - Material presets loader (
.json)
- Alembic exportation (
-
Physics (XPBD Solver)
- Distance constraint
- Bending constraint
- Volume constraint
- Pin constraint
- Stitch Constraint
- Broad-phase collision detection via Spatial Hash
- Sphere, capsule and plane colliders
- Mesh colliders
- Kinematic Colliders
- Self-collision detection
- Gravity force
- Aerodynamic force
-
Python API
- Full simulation scripting via
tissuPython package - Event scheduling
- Full simulation scripting via
Coming Soon
Features planned for future releases:
- USD exportation
The ultimate goal of Tissu is to become a Blender add-on.
How To Use
Let's script a cloth falling onto a sphere collider. The following example demonstrates how to set up a simulation, add constraints, schedule events, and export the result.
from tissu import Simulation
# 1. Initialize the simulation environment
sim = Simulation(substeps=10, iterations=3, thickness=0.05)
# 2. Create a cloth grid
curtain = sim.create_grid(
name="curtain",
rows=80,
cols=80,
spacing=0.05,
material="silk"
)
# Pin the top corners to initially hold the curtain in place
curtain.pin_top_corners()
# 3. Add a sphere collider
# (name, initial position, radius, friction)
ball = sim.add_sphere('ball', [2.0, 0.0, 0.0], 1.0, 0.5)
# 4. Schedule an event: Unpin the curtain at frame 40 so it falls
@sim.on_frame(40)
def unpin(sim):
curtain.unpin()
# 5. Run the simulation and export the result directly to Alembic
output = "data/animations/cloth_on_sphere.abc"
sim.bake_alembic(
filepath=output,
start_frame=1,
end_frame=240,
fps=60
)
Real-time Viewer
Tissu comes with a built-in OpenGL viewer for real-time visualization. If you install Tissu with viewer support, you can preview your simulation before baking.
Instead of calling sim.bake_alembic(), simply launch the interactive viewer.
sim.view()
The viewer includes an integrated ImGui control panel to manage the simulation on the fly. From here, you can:
- Load Scenes, Materials, and Physics presets
- Adjust Shader and World parameters
- Tune Solver parameters in real-time
- Monitor performance statistics
Keybindings
- G : Take a state snapshot (.tissu files)
- S : Take a geometry snapshot (.obj files)
- R : Reset the simulation
- Space : Play / Pause the simulation
- Left Click : Grab and interact with particles manually
Requirements
These dependencies must be installed on your system before building the project:
- Cmake ($\ge$ 3.20)
- C++ Compiler with C++17 support (GCC, Clang, or MSVC)
- OpenMP
Python Requirements
To build and use tissu, you need:
- Python ($\ge$ 3.12)
- Build Tools: setuptools $\ge$ 61.0, wheel
- Packages: mypy, numpy, tqdm, pytest
Python dependencies are automatically handled if you install the package via
pip install .
Fetched Dependencies (Core)
These dependencies are automatically downloaded and built by CMake via FetchContent:
- Eigen (3.4.0)
- tinyobjloader
- nlohmann/json (v3.11.3)
- pybind11 (v2.13.6)
- Alembic (1.8.11)
- Imath
- GoogleTest (v1.15.2) - For testing
- Google Benchmark (v1.9.1) - For benchmarking
Standalone Viewer Requirements (Optional)
If the build includes the standalone viewer (TISSU_BUILD_VIEWER=ON), the following additional dependencies apply:
System Requirements:
- OpenGL (System graphics libraries)
- Threads (Standard OS threading support)
Fetched Dependencies (Handled by CMake):
Supported Operating Systems
- Linux: Supported and tested (On Fedora)
- macOS: Tested
- Windows: Supported and tested.
Build and Installation
1. Clone Repository
Cloning the repository is as simple as
git clone https://github.com/evanrock520-ciencias/Tissu.git
cd Tissu
2. Compile the SDK
Build the shared library and the standalone viewer using our build script.
python scripts/build.py
3. Install Tissu
To import the library in your scripts, install the tissu package with pip:
pip install .
Development and Testing
Tissu includes a test suite for both C++ and Python
- C++ Tests: Powered by Google Test (
tests/) - Python Tests: Powered by Pytest (
tests/python/). - Benchmarks: Powered by Google Benchmark (
benchmarks/).
To run all tests, you can use the test script:
python scripts/test.py
Technical Documentation
Technical documentation is currently a work in progress. It is expected to include:
Almost all pages may be incomplete or missing content.
License
This project is licensed under the Apache 2.0 License - see the LICENSE file for details.
Gallery
Metadata
Release files for pytissu 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pytissu-1.1.0.tar.gz | 84.5 kB | Details |
Built distributions (wheels)
Total release size: 13.8 MB
Release files / pytissu-1.1.0.tar.gz
| Download URL | pytissu-1.1.0.tar.gz |
|---|---|
| Size | 84.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4f731fad31e9daa24e669afd6f2f2aef07212d894f6fa07bc210e2e741434430
|
|
BLAKE2b-256 checksum How to use checksums |
d48812b74258c79cac1572c21c19fd92413fe8e55c01e9f9607390e5b4870e19
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp314-cp314-win_amd64.whl
| Download URL | pytissu-1.1.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 795.2 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
72ef2dab019ed8c5b8090bbbbaf63fb8f207b1e5aeb3f5def4e58fb8c92b9da3
|
|
BLAKE2b-256 checksum How to use checksums |
23ebfe6e041a3ee28be007e052dc0ee408e1fdce54f95891dfb6c97b6f31ce8a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp314-cp314-manylinux_2_39_x86_64.whl
| Download URL | pytissu-1.1.0-cp314-cp314-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.14 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
420c47b683bcc9163598da24bb7b809fa9470a6fd15a856a1dee215451989b05
|
|
BLAKE2b-256 checksum How to use checksums |
36832586c4abbc826dc13b387db87fc76cfd7af8c457fac9c4e54ace9591024e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp314-cp314-macosx_26_0_arm64.whl
| Download URL | pytissu-1.1.0-cp314-cp314-macosx_26_0_arm64.whl |
|---|---|
| Size | 868.1 kB |
| Tags | CPython 3.14 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7780f3d904bc0cbed5915ce0c9f8bbfe2579e1ef559e407ebfa1f4ee54af5e25
|
|
BLAKE2b-256 checksum How to use checksums |
ac1737596ddd81f7864619f5f73fefd658e130acc81166ccc189679e5346795d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp313-cp313-win_amd64.whl
| Download URL | pytissu-1.1.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 772.4 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
319daacd4c7f56b627c5c77454c71568e500a49d6ba5b15d945a82905b5d824c
|
|
BLAKE2b-256 checksum How to use checksums |
ce11c4d7b250afa115d1a87ba811dd19d92d49ecf6e9d18b4d2a68bd73ee0fc6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp313-cp313-manylinux_2_39_x86_64.whl
| Download URL | pytissu-1.1.0-cp313-cp313-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.13 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
4af389919ea64906065eb552777f037806ba40c4087935158fc279bbe5263d93
|
|
BLAKE2b-256 checksum How to use checksums |
0bc2c7bbfe0ad7adef9eec458258c83df4c8875ad4f8b05be7350e661393a12e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp313-cp313-macosx_26_0_arm64.whl
| Download URL | pytissu-1.1.0-cp313-cp313-macosx_26_0_arm64.whl |
|---|---|
| Size | 866.9 kB |
| Tags | CPython 3.13 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
01e19101be5ca7a76db2b7899bd8287df1e9dc305046c14502bfe3b85385069d
|
|
BLAKE2b-256 checksum How to use checksums |
4dbb732f5e5eecefe4cd33d5872112807cf3ff5165d0a81304f1e2e3d2a21849
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp312-cp312-win_amd64.whl
| Download URL | pytissu-1.1.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 772.4 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
243c53e4b3f6dea81e3e86a9817a148e5c56cfa4934282db698e35a2dad25b8e
|
|
BLAKE2b-256 checksum How to use checksums |
51ee2a65e334961a40222baad41584f0c6b623f1ac8f84cdf951ab9a603dd905
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp312-cp312-manylinux_2_39_x86_64.whl
| Download URL | pytissu-1.1.0-cp312-cp312-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.12 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
6b9e0d68a1bc4c3b900a39066644b2f66751707b8f291fd73287c8e619d09834
|
|
BLAKE2b-256 checksum How to use checksums |
4b1d0fe44a1cc79520489f767bc710ff131402504a7052ff445704fd551c421c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp312-cp312-macosx_26_0_arm64.whl
| Download URL | pytissu-1.1.0-cp312-cp312-macosx_26_0_arm64.whl |
|---|---|
| Size | 866.8 kB |
| Tags | CPython 3.12 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0889f8900c424d1d64e76f38f9dafcce5f76780ef8250aae71403317eb7d38dd
|
|
BLAKE2b-256 checksum How to use checksums |
173f459c15069cd4c730854da15a81df715e92d8527d5c6473cd9c72ae45e7a2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp311-cp311-win_amd64.whl
| Download URL | pytissu-1.1.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 769.8 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8ba5993c2f53fb8a6fe77ef6e9841c5778b409983e3407dd4857e09d4b64a1dc
|
|
BLAKE2b-256 checksum How to use checksums |
0794f1bbc93511e64f31c83cdf7f4035f1f47712cd27735de2c0106230b618e9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp311-cp311-manylinux_2_39_x86_64.whl
| Download URL | pytissu-1.1.0-cp311-cp311-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.11 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
9c967c24bd5edce39905b3ef0b7dcb076f64ca416e28084a58f32b61f0ed0c6e
|
|
BLAKE2b-256 checksum How to use checksums |
8ea8de80ded01bb5959338f7cd7df2ffcbe80f916888ac48d9ab3463e913020c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp311-cp311-macosx_26_0_arm64.whl
| Download URL | pytissu-1.1.0-cp311-cp311-macosx_26_0_arm64.whl |
|---|---|
| Size | 866.0 kB |
| Tags | CPython 3.11 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
1dc2068a18518848f2374535dfed9acdfd9016ecf78d1cd0bb4d48bbcacc917a
|
|
BLAKE2b-256 checksum How to use checksums |
5eb8550511693d0fbc054a40c9a7f2b1ae07d30b59f7caaff3ff3d26866aff0d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp310-cp310-win_amd64.whl
| Download URL | pytissu-1.1.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 768.5 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d4c2b369a820c4f01f5f45438f48e356f823b5eedef7626a4b4e063bd7ab4181
|
|
BLAKE2b-256 checksum How to use checksums |
aee53f68630a0bde5f4ff3cb323af62ffb77df918673825b40f171cc57fba7aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp310-cp310-manylinux_2_39_x86_64.whl
| Download URL | pytissu-1.1.0-cp310-cp310-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.10 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
36ffd698c9e29e8c9194271b4c2e0a1248fd7d97a2e28b6d9d568f3c0bd71d18
|
|
BLAKE2b-256 checksum How to use checksums |
67c5a325ded17d652891dc5ff1ea6616ce7c89ff54b36801e31eac3d109188fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / pytissu-1.1.0-cp310-cp310-macosx_26_0_arm64.whl
| Download URL | pytissu-1.1.0-cp310-cp310-macosx_26_0_arm64.whl |
|---|---|
| Size | 864.6 kB |
| Tags | CPython 3.10 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
97b6e02e7363cf4b623fd029d42a5da1d21030f202e8f0358ab1b0d74b99fa2a
|
|
BLAKE2b-256 checksum How to use checksums |
9977b8052fdb1119eec7221fb914223afd67eb0fefa22f1fcb5edb6e65937d35
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|