Skip to main content

Physics simulation and annotation tools for Blender

Project description

VibePhysics

VibePhysics Teaser

A lightweight Blender physics simulation framework for creating realistic robot animations, rigid body physics, water dynamics, and comprehensive annotation tools โ€” all running efficiently on CPU.

๐ŸŽฌ Example Results

Result Demo

Robot walking simulation with rigid body physics, interacting with uneven ground, puddles, and real-time annotation overlay.

๐Ÿ“Š Annotation Tools Demo

Annotation Demo

Comprehensive annotation system featuring bounding boxes, motion trails, and point cloud tracking for computer vision datasets.

๐Ÿ’ง Water Simulation Demo

Water Float Demo

Water physics simulation with floating objects, buoyancy forces, dynamic ripples, and point cloud tracking.

โœจ Highlights

  • ๐Ÿš€ No GPU Required โ€“ Runs efficiently on CPU-only machines (MacBook Pro, laptops, standard workstations). GPU accelerates rendering but is not mandatory.
  • ๐Ÿค– Robot Simulation โ€“ Realistic IK-based walking animations with the Open Duck robot
  • ๐Ÿ’ง Water Physics โ€“ Dynamic water surfaces, puddles, ripples, and buoyancy simulation
  • ๐Ÿ“Š Annotation Tools โ€“ Bounding boxes, motion trails, and point cloud tracking for vision datasets
  • ๐ŸŽฏ Production Ready โ€“ Clean API, modular architecture, and extensive examples
  • ๐Ÿ”ง Developer Friendly โ€“ Pure Python, works with Blender as a module (bpy), no GUI needed

Perfect for researchers, animators, and robotics engineers who need physics simulations without expensive GPU hardware.

Requirements

For Running Simulations

  • Python 3.11 (required for bpy compatibility - Python 3.12+ is not supported)
  • bpy (Blender as a Python module)

For Viewing Results (Optional)

  • Blender 5.0 - Free download from blender.org
  • Only needed to view/render the generated .blend files
  • Not required to run simulations

โš ๏ธ Important: This package requires Python 3.11. Python 3.12 and later versions are not compatible with the current version of bpy.

Dependency

We use the Open Duck blender model as demo purpose. We do not own the model. Please refer to the original github repo.

Installation

# Create conda environment with Python 3.11
conda create -n vibephysics python=3.11
conda activate vibephysics

# Install vibephysics (includes tqdm, numpy<2.0)
pip install vibephysics

# Install bpy (Blender as Python module) for simulations
pip install bpy

# Or install everything together
pip install vibephysics[blender]

# Or install from source
pip install -e .

Quick Start

# Run annotation demo
sh ./run_annotation.sh

# Run robot simulation (with mounted POV camera by default)
sh ./run_robot.sh

# Run robot simulation with different camera views
sh ./run_robot.sh mounted    # First-person POV (default)
sh ./run_robot.sh center     # Overview from multiple angles
sh ./run_robot.sh following  # Third-person tracking shot

# Run forest walk simulation (robot walking through dense forest on uneven terrain)
sh ./run_forest.sh

# Run water simulations
sh ./run_water.sh

Visualizing Results

All simulations generate .blend files in the output/ directory. To view and interact with these results:

Download Blender 5.0 (Free & Open Source)

  • ๐Ÿ”— Download Blender
  • Compatible with Windows, macOS (Intel/Apple Silicon), and Linux
  • No installation required for VibePhysics to run โ€“ Blender is only needed to view results
  • GPU accelerates viewport and rendering performance, but CPU-only works fine

Opening Results:

# macOS
open output/robot_waypoint.blend

# Linux
blender output/robot_waypoint.blend

# Windows
start output/robot_waypoint.blend

Once in Blender, press Spacebar to play the animation and view your physics simulation!

Camera System

VibePhysics includes a flexible multi-camera system with three camera rig types:

Camera Type Description Best For
Center Multiple cameras arranged in a circle, pointing at scene center Overview shots, multi-angle captures
Mounted Cameras attached directly to an object (e.g., robot head) First-person POV, onboard views
Following Single camera that follows and tracks a target object Third-person view, tracking shots

Usage Example

from vibephysics.camera import CameraManager

cam_manager = CameraManager()

# Center-pointing cameras (fixed position, looking at origin)
center_rig = cam_manager.add_center_pointing('center', num_cameras=4, radius=25, height=12)
center_rig.create(target_location=(0, 0, 0))

# Mounted cameras (attached to robot head for POV shots)
mounted_rig = cam_manager.add_object_mounted('mounted', num_cameras=4, distance=0.15)
mounted_rig.create(parent_object=robot_head, lens=10)

# Following camera (tracks a moving object)
follow_rig = cam_manager.add_following('following', height=12, look_angle=60)
follow_rig.create(target=robot_armature)

# Activate a specific camera
cam_manager.activate_rig('mounted', camera_index=0)  # Front camera

Command Line Options

Robot simulations support camera selection via shell script or Python:

# Via shell script (recommended)
sh run_robot.sh mounted    # First-person POV (default)
sh run_robot.sh center     # Overview from multiple angles
sh run_robot.sh following  # Third-person tracking shot

# Via Python directly
python examples/robot/robot_waypoint_walk.py --active-camera mounted
python examples/robot/robot_waypoint_walk.py --active-camera center
python examples/robot/robot_waypoint_walk.py --active-camera following

Switching Cameras in Blender

All three camera rigs are created in every .blend file โ€” the command line option only sets which one is active by default. You can manually switch between any camera directly in Blender:

  1. Open the .blend file in Blender
  2. Press Numpad 0 to view through the active camera
  3. Switch cameras using one of these methods:
    • Outliner (Easiest): In the top-right Outliner panel, find camera objects (e.g., MountedCam_0, CenterCam_0, FollowingCam) โ†’ Click the green camera icon ๐ŸŽฅ next to the camera name to make it active
    • Right-click Menu: Right-click a camera in Outliner โ†’ Set Active Camera
    • Keyboard: Select a camera โ†’ Press Ctrl + Numpad 0 to make it active
    • View Menu: View โ†’ Cameras โ†’ Set Active Object as Camera

๐Ÿ’ป Mac Users: Simply click the green camera icon ๐ŸŽฅ in the Outliner (see above) to switch active cameras.

This means you can generate a single .blend file and render from any camera angle without re-running the simulation.

Project Structure

vibephysics/
โ”œโ”€โ”€ src/vibephysics/
โ”‚   โ”œโ”€โ”€ setup/              # Scene & asset management
โ”‚   โ”‚   โ”œโ”€โ”€ scene.py        # Scene initialization, frame range
โ”‚   โ”‚   โ”œโ”€โ”€ importer.py     # Asset loading (GLB, FBX, PLY, etc.)
โ”‚   โ”‚   โ”œโ”€โ”€ exporter.py     # Save/export (blend, FBX, OBJ, etc.)
โ”‚   โ”‚   โ”œโ”€โ”€ viewport.py     # Viewport splitting, dual-view
โ”‚   โ”‚   โ””โ”€โ”€ gsplat.py       # Gaussian Splatting (3DGS)
โ”‚   โ”œโ”€โ”€ foundation/         # Core simulation modules
โ”‚   โ”‚   โ”œโ”€โ”€ physics.py      # Rigid body world, force fields
โ”‚   โ”‚   โ”œโ”€โ”€ ground.py       # Terrain generation
โ”‚   โ”‚   โ”œโ”€โ”€ water.py        # Water surfaces, ripples
โ”‚   โ”‚   โ”œโ”€โ”€ objects.py      # Floating objects
โ”‚   โ”‚   โ”œโ”€โ”€ materials.py    # Shaders (water, mud, etc.)
โ”‚   โ”‚   โ”œโ”€โ”€ lighting.py     # Lighting and camera
โ”‚   โ”‚   โ”œโ”€โ”€ robot.py        # Generic robot control
โ”‚   โ”‚   โ”œโ”€โ”€ open_duck.py    # Open Duck robot integration
โ”‚   โ”‚   โ””โ”€โ”€ trajectory.py   # Waypoint paths
โ”‚   โ”œโ”€โ”€ annotation/         # Visualization tools
โ”‚   โ”‚   โ”œโ”€โ”€ base.py         # Base annotation classes
โ”‚   โ”‚   โ”œโ”€โ”€ bbox.py         # Bounding box annotations
โ”‚   โ”‚   โ”œโ”€โ”€ motion_trail.py # Motion path visualization
โ”‚   โ”‚   โ”œโ”€โ”€ point_tracking.py # Point cloud tracking
โ”‚   โ”‚   โ””โ”€โ”€ manager.py      # Unified annotation API
โ”‚   โ””โ”€โ”€ camera/             # Camera system
โ”‚       โ”œโ”€โ”€ base.py         # Base camera classes
โ”‚       โ”œโ”€โ”€ center.py       # Center-pointing cameras
โ”‚       โ”œโ”€โ”€ following.py    # Following camera rig
โ”‚       โ”œโ”€โ”€ mounted.py      # Object-mounted cameras
โ”‚       โ””โ”€โ”€ manager.py      # Camera manager API
โ”œโ”€โ”€ examples/
โ”‚   โ”œโ”€โ”€ basics/             # Annotation demos
โ”‚   โ”œโ”€โ”€ water/              # Water simulations
โ”‚   โ””โ”€โ”€ robot/              # Robot simulations
โ”œโ”€โ”€ run_water.sh            # Run water examples
โ”œโ”€โ”€ run_robot.sh            # Run robot examples
โ””โ”€โ”€ run_annotation.sh       # Run annotation demos

Setup Module

The setup module provides scene initialization, asset import/export, and viewport management:

from vibephysics import setup

# Initialize a simulation scene
setup.init_simulation(start_frame=1, end_frame=250)

# Load assets (auto-detects format from file extension)
setup.load_asset('robot.glb')           # GLB/GLTF
setup.load_asset('mesh.fbx')            # FBX
setup.load_asset('points.ply')          # PLY

# Save/export (auto-detects format)
setup.save_blend('output/scene.blend')  # Creates directories automatically

# For format-specific options, use submodules directly:
from vibephysics.setup import importer, exporter

objects = importer.load_glb('model.glb', transform={'scale': 0.5})
exporter.export_fbx('output.fbx', selected_only=True)

Supported Formats

Import Export
GLB/GLTF Blend
FBX GLB/GLTF
PLY FBX
OBJ OBJ
STL PLY
DAE (Collada) STL
USD/USDA/USDC USD
Blend (append)

Gaussian Splatting (3DGS) (BETA)

VibePhysics supports loading 3D Gaussian Splatting data. [Warning] Currently it's under development

sh run_3dgs_viewer.sh

License

ยฉ 2025 MIMI AI LTD, UK. All rights reserved.

Academic & Student Use (Free)

This software is free to use for:

  • Students
  • Academic research
  • Educational purposes

Commercial Use

For business or enterprise use, please contact: tsunyi@mimiaigen.com We have separate license for business/enterprise users.

Citation

@misc{VibePhysics,
  author = {Tsun-Yi Yang},
  title = {VibePhysics: Physics and Robotics Simulation in Blender Without GPU Requirements},
  month = {December},
  year = {2025},
  url = {https://github.com/mimiaigen/vibephysics}
}

Project details


Download files

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

Source Distribution

vibephysics-0.1.10.tar.gz (98.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vibephysics-0.1.10-py3-none-any.whl (97.9 kB view details)

Uploaded Python 3

File details

Details for the file vibephysics-0.1.10.tar.gz.

File metadata

  • Download URL: vibephysics-0.1.10.tar.gz
  • Upload date:
  • Size: 98.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for vibephysics-0.1.10.tar.gz
Algorithm Hash digest
SHA256 51c682bb95781f5c6eb0fb32698af19084771299bd619f51f01fb1aa26a55b51
MD5 72b5d801eb7f2dea0e848413441be698
BLAKE2b-256 d22d1d69b093d1e106ac51d739f703ddccd9ac83dd95636540883e4cd4fff5ec

See more details on using hashes here.

File details

Details for the file vibephysics-0.1.10-py3-none-any.whl.

File metadata

  • Download URL: vibephysics-0.1.10-py3-none-any.whl
  • Upload date:
  • Size: 97.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for vibephysics-0.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 97fc661458853d56d86bfa25c6464b4fde55fc3a7e52a9425eaf19bc5fea14eb
MD5 508015e28eaef6360964d5a9a5c191f5
BLAKE2b-256 1f1320bcda9a3ec45b7d0f905f6120a5a065ffddf349802828635c1f363faa0f

See more details on using hashes here.

Supported by

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