Skip to main content

Physics Based Animation Toolkit

Project description

Physics Based Animation Toolkit

Wheels

We recommend exploring the official CMake documentation to beginner CMake users.

Overview

The Physics Based Animation Toolkit (PBAT) is a (mostly templated) cross-platform C++20 library of algorithms and data structures commonly used in computer graphics research on physically-based simulation in dimensions 1,2,3. For most use cases, we recommend using our library via its Python interface, enabling seamless integration into Python's ecosystem of powerful scientific computing packages.

Features

  • Finite Element Method (FEM) meshes and operators
    • Dimensions 1,2,3
    • Lagrange shape functions of order 1,2,3
    • Line, triangle, quadrilateral, tetrahedron and hexahedron elements
  • Hyper elastic material models
    • Saint-Venant Kirchhoff
    • Stable Neo-Hookean
  • Polynomial quadrature rules
    • Simplices in dimensions 1,2,3
    • Gauss-Legendre quadrature
  • Spatial query acceleration data structures
    • Bounding volume hierarchy for triangles (2D+3D) and tetrahedra (3D)
      • Nearest neighbours
      • Overlapping primitive pairs
      • Point containment
  • Seamless profiling integration via Tracy

Dependencies

See vcpkg.json for a versioned list of our dependencies, available via vcpkg (use of vcpkg is not mandatory, as long as dependencies have compatible versions and are discoverable by CMake's find_package mechanism).

Configuration

Option Values Default Description
PBAT_BUILD_PYTHON_BINDINGS ON,OFF OFF Enable PhysicsBasedAnimationToolkit_PhysicsBasedAnimationToolkit Python bindings. Generates the CMake target PhysicsBasedAnimationToolkit_Python, an extension module for Python, built by this project.
PBAT_BUILD_TESTS ON,OFF OFF Enable PhysicsBasedAnimationToolkit_PhysicsBasedAnimationToolkit unit tests. Generates the CMake target executable PhysicsBasedAnimationToolkit_Tests, built by this project.
PBAT_ENABLE_PROFILER ON,OFF OFF Enable Tracy instrumentation profiling in built PhysicsBasedAnimationToolkit_PhysicsBasedAnimationToolkit.
PBAT_PROFILE_ON_DEMAND ON,OFF OFF Activate Tracy's on-demand profiling when PBAT_ENABLE_PROFILER is ON.
PBAT_USE_INTEL_MKL ON,OFF OFF Link to user-provided Intel MKL installation via CMake's find_package.
PBAT_USE_SUITESPARSE ON,OFF OFF Link to user-provided SuiteSparse installation via CMake's find_package.
PBAT_BUILD_SHARED_LIBS ON,OFF OFF Build project's library targets as shared/dynamic.

Build

Build transparently across platforms using the cmake build CLI.

CMake build targets:

Target Description
PhysicsBasedAnimationToolkit_PhysicsBasedAnimationToolkit The PBA Toolkit library.
PhysicsBasedAnimationToolkit_Tests The test executable, using doctest.
PhysicsBasedAnimationToolkit_Python PBAT's Python extension module, using pybind11.

Install

From command line:

cd path/to/PhysicsBasedAnimationToolkit
cmake -S . -B build -A x64 -DPBAT_ENABLE_PROFILER:BOOL=ON -DPBAT_BUILD_TESTS:BOOL=ON
cmake --install build --config Release

Quick start

We recommend downloading the Tracy profiler server to analyze execution of PBAT algorithms, available as precompiled executable.

C++

Take a look at the unit tests, found in the library's source (.cpp) files.

Python

To download and install from PyPI, run in command line:

pip install pbatoolkit

For a local installation, which builds from source, our Python bindings build relies on Scikit-build-core, which relies on CMake's install mechanism. As such, you can configure the installation as you typically would when using the CMake CLI directly, by now passing the corresponding CMake arguments in the pip's config-settings parameter, or via the SKBUILD_CMAKE_ARGS environment variable. See our wheels workflow for working examples of setting SKBUILD_CMAKE_ARGS on Linux, MacOS and Windows. Then, assuming that external dependencies are found via CMake's find_package, you can build and install our Python package pbatoolkit locally and get the most up to date features. Consider using a Python virtual environment for this step.

As an example, using vcpkg for external dependencies, run in command line:

pip install . --config-settings=cmake.args="-DPBAT_BUILD_PYTHON_BINDINGS:BOOL=ON;-DPBAT_BUILD_TESTS:BOOL=OFF;-DPBAT_ENABLE_PROFILER:BOOL=ON;-DPBAT_PROFILE_ON_DEMAND:BOOL=ON;-DPBAT_BUILD_SHARED_LIBS:BOOL=OFF;-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON;-DCMAKE_TOOLCHAIN_FILE='path/to/vcpkg/scripts/buildsystems/vcpkg.cmake';-DVCPKG_MANIFEST_FEATURES=python" -vvv

For parallel builds on Unix systems, you can add the build.tool-args=-j<# threads> to the confg-settings parameter, where <# threads< is the number of compilation jobs to run simultaneously. On Windows, using MSBuild, you may specify build.tool-args=/p:CL_MPCount=<# threads> instead. This assumes that parallel builds were enabled, meaning /MP may need to be appended to CMAKE_CXX_FLAGS through cmake.args. Otherwise, CMAKE_BUILD_PARALLEL_LEVEL=<# threads>may be usable, again through the cmake.args parameter of config-settings.

Verify pbatoolkit's contents in Python shell:

import pbatoolkit as pbat
import pbatoolkit.fem, pbatoolkit.geometry, pbatoolkit.profiling
import pbatoolkit.math.linalg
help(pbat.fem)
help(pbat.geometry)
help(pbat.profiling)
help(pbat.math.linalg)

To profile relevant calls to pbatoolkit functions/methods, connect to python.exe in the Tracy profiler server GUI. All calls to pbat will be profiled on a per-frame basis in the Tracy profiler server GUI.

Use method profile of pbatoolkit.profiling.Profiler to profile code external to PBAT, allowing for an integrated profiling experience while using various scientific computing packages.

def expensive_external_computation():
    # Some expensive computation
profiler.profile("My expensive external computation", expensive_external_computation)

Tutorial

Head over to our hands-on tutorials section to learn more about physics based animation in both theory and practice!

Gallery

Below, we show a few examples of what can be done in just a few lines of code using pbatoolkit and Python. Code can be found here.

Harmonic interpolation

A smooth (harmonic) function is constructed on Entei, required to evaluate to 1 on its paws, and 0 at the top of its tail, using piece-wise linear (left) and quadratic (right) shape functions. Its isolines are displayed as black curves.

Harmonic interpolation on Entei model using linear shape functions Harmonic interpolation on Entei model using quadratic shape functions

Heat method for geodesic distance computation

Approximate geodesic distances are computed from the top center vertex of Metagross by diffusing heat from it (left), and recovering a function whose gradient matches the normalized heat's negative gradient. Its isolines are displayed as black curves.

Heat source on top center of metagross model Reconstructed single source geodesic distance

Mesh smoothing via diffusion

Fine details of Godzilla's skin are smoothed out by diffusing x,y,z coordinates in time.

Godzilla model with fine details being smoothed out via diffusion

Hyper elastic simulation

Linear (left) and quadratic (right) shape functions are compared on a hyper elastic simulation of the beam model, whose left side is fixed. Quadratic shape functions result in visually smoother and softer bending.

Bending beam FEM elastic simulation using linear shape functions Bending beam FEM elastic simulation using quadratic shape functions

Modal analysis

The hyper elastic beam's representative deformation modes, i.e. its low frequency eigen vectors, are animated as time continuous signals.

Unconstrained hyper elastic beam's eigen frequencies

Profiling statistics

Computation details are gathered when using pbatoolkit and consulted in the Tracy profiling server GUI.

Profiling statistics widget in Tracy server

Contributing

Coding style

A .clang-format description file is provided in the repository root which should be used to enforce a uniform coding style throughout the code base using the clang-format tool. Recent versions of Visual Studio Code and Visual Studio should come bundled with a clang-format installation. On Unix-like systems, clang-format can be installed using your favorite package manager.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

pbatoolkit-0.0.5-cp312-cp312-win_amd64.whl (6.1 MB view details)

Uploaded CPython 3.12 Windows x86-64

pbatoolkit-0.0.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (18.7 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.27+ x86-64 manylinux: glibc 2.28+ x86-64

pbatoolkit-0.0.5-cp312-cp312-macosx_14_0_arm64.whl (8.2 MB view details)

Uploaded CPython 3.12 macOS 14.0+ ARM64

pbatoolkit-0.0.5-cp312-cp312-macosx_13_0_x86_64.whl (9.2 MB view details)

Uploaded CPython 3.12 macOS 13.0+ x86-64

pbatoolkit-0.0.5-cp311-cp311-win_amd64.whl (5.5 MB view details)

Uploaded CPython 3.11 Windows x86-64

pbatoolkit-0.0.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (18.8 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.27+ x86-64 manylinux: glibc 2.28+ x86-64

pbatoolkit-0.0.5-cp311-cp311-macosx_14_0_arm64.whl (8.1 MB view details)

Uploaded CPython 3.11 macOS 14.0+ ARM64

pbatoolkit-0.0.5-cp311-cp311-macosx_13_0_x86_64.whl (9.0 MB view details)

Uploaded CPython 3.11 macOS 13.0+ x86-64

pbatoolkit-0.0.5-cp310-cp310-win_amd64.whl (5.5 MB view details)

Uploaded CPython 3.10 Windows x86-64

pbatoolkit-0.0.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (18.5 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.27+ x86-64 manylinux: glibc 2.28+ x86-64

pbatoolkit-0.0.5-cp310-cp310-macosx_14_0_arm64.whl (8.1 MB view details)

Uploaded CPython 3.10 macOS 14.0+ ARM64

pbatoolkit-0.0.5-cp310-cp310-macosx_13_0_x86_64.whl (9.0 MB view details)

Uploaded CPython 3.10 macOS 13.0+ x86-64

File details

Details for the file pbatoolkit-0.0.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b099804ba5f6554088699ae6c6273c2095b7c627237193fe7c2cff770020304c
MD5 5e2793e46dd13776dd0e11860d355d5b
BLAKE2b-256 bafdd01f60ad81ace368aa86413aae5a2d8c1d624d44ddbca05910d30731d256

See more details on using hashes here.

File details

Details for the file pbatoolkit-0.0.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5138dd2ee0daf1af68cb5d48545d7846514068c67a809aebf3ddfb4819403374
MD5 b2eead8882652c5cc451633149781a37
BLAKE2b-256 6c5e01e769266228ddc5ef36ded39857d3f5c134c1e59d964051b4186326c4a9

See more details on using hashes here.

File details

Details for the file pbatoolkit-0.0.5-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 dec80c06c0d74c9c939806384ced8f70a3d6246fd2ee642df46064e7c9305d6e
MD5 750c6fc315e0929b3e4232bc522b0519
BLAKE2b-256 83d066c4684a557c0db1842e37ddec78db213b7c3098fb48ddfc1481f1345d9d

See more details on using hashes here.

File details

Details for the file pbatoolkit-0.0.5-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 576c588caed31e15b98678982a0372a72d1cf36e65a866756a3202b50e93a565
MD5 9047b41906097d0c5bb36b39441498f3
BLAKE2b-256 ad817300feac214fa0c917774d9176b910d4a751c1dd8fd3d2c9b481e384d887

See more details on using hashes here.

File details

Details for the file pbatoolkit-0.0.5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e60d6f5ea66497f95c1442c83c396e54450096a07b05def92595bf8a21e88c28
MD5 1dc3e310c6549da40a6d560a5a874122
BLAKE2b-256 dffd92e840524167d5bdd0afb5f0c0dbb37be1c92d1e8a6755daa060c79cdae5

See more details on using hashes here.

File details

Details for the file pbatoolkit-0.0.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 985afc81b900ac3177022d5c62341b72e413f42013164d87946ff06e2e7961ec
MD5 1b5ae213449f60606e4050e740f4145c
BLAKE2b-256 3080a8f4d97a54a1fa3d2ba57032f8a21aa10c6115b8e7a78749fc682bceab35

See more details on using hashes here.

File details

Details for the file pbatoolkit-0.0.5-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 8458c03eb212ebe9229de8911ca4e0f6a3a19dd26eda0a683274e57731bc7b69
MD5 42ff0bd14149584129289fc9dd72ecdc
BLAKE2b-256 273367fd7ebd65c26290304a53f733768b1776100ae96060c8b6b52e08d437e7

See more details on using hashes here.

File details

Details for the file pbatoolkit-0.0.5-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 93b1e3b1d3441f1fb3300f63497b0f676a4a3eaa85740229f600c8e210aa5771
MD5 0adcced072ccc45a340e3f6bc1823ddc
BLAKE2b-256 09cfc9fb0f9b841d2a42a3b22db31778fb82f7bc458000c98b0705953f6547ac

See more details on using hashes here.

File details

Details for the file pbatoolkit-0.0.5-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 772abdcfe02c91b7b03b9069eb7b76b493afb4fb8cd3784075fcba0d2b9b71bf
MD5 58f3f20e5fbf8bc473ad3ed60be57975
BLAKE2b-256 711887c141a59ed4765d1eca05a34080dc719e634c9189be5ed92f62d3d5dda8

See more details on using hashes here.

File details

Details for the file pbatoolkit-0.0.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fab5834745777c0ed52ab4a7fd8d44d001a6d46f3fb774de302732b88b68c754
MD5 eef529c6d5b1a06987a441dbb370c9b8
BLAKE2b-256 0c2ba4c07e24ff43a1936311b12071b69fe38aa37022febb4d268520f32dd027

See more details on using hashes here.

File details

Details for the file pbatoolkit-0.0.5-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e690c3c6c2d207fe70101494eb90b3a5e53130fcaa70a276ba4c76e7a026c8d6
MD5 439a56227be866a05788674b3d886b25
BLAKE2b-256 24c1e4cdb5c87ef0dc39afbbfeebc8d29881ec5c2b14ddfb14be8e73a6cecee2

See more details on using hashes here.

File details

Details for the file pbatoolkit-0.0.5-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pbatoolkit-0.0.5-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 33f0105f867059b53ea6787317d4953214a44692f2a5bb7b62c400df1ed994e5
MD5 e8858445a2b7786b86dbe9ebca09e628
BLAKE2b-256 7ec9be26797265f361e67506fd84e488752fa74fb89a7d39cfb51a0eb6cca854

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page