Motion-capture studies for openFrameworks 0.12.1.
The six examples from the 2012 Perfume “Global Site Project” now use the
programmable OpenGL 3.2 renderer, ofApp, member-owned state, and mesh-based
drawing. Two new shader studies turn the bundled motion into luminous ribbons
and animated contour fields.
The G1 Motion Lab adds a Unitree G1 kinematic-reference
study, with an original-human-skeleton overlay and explicit validation status.
| Example | What you see | What you learn |
|---|---|---|
| Motion Ribbons | Fine luminous trails following the dancers | Vertex, geometry, and fragment shaders; expanding a line into a ribbon |
| Motion Field | Contours and halos around moving joints | Passing motion to a full-screen fragment shader |
These are actual application captures, not concept images. The studies recenter horizontal root travel to keep the three dancers legible; they show the recorded poses rather than reconstructing the original stage formation.
Both use the existing bundled BVH samples and need no external addons or audio downloads. The shader guide explains the rendering stages and where to start editing. Companion studies are available in the Processing repository.
The perfume-dev organization was founded by Daito Manabe in 2012 and has remained under his stewardship since launch. He continues to oversee maintenance of this repository with project collaborators.
Perfume is a Japanese artist group. Manabe's documented collaboration with Perfume goes back to the 2010 Tokyo Dome performance, which credits his programming. The later 2020 “Time Warp” project credits him with creative and technical direction and sound-effect design. Across multiple Perfume projects since 2010, his roles have included creative direction, technical direction, programming, and sound-related design, including sound-effect design. For the 2012 Global Site Project, the Agency for Cultural Affairs award record credits Manabe with planning, direction, and programming, and records the many artists, choreographers, designers, programmers, engineers, producers, and supporters who made the project possible.
This stewardship statement does not replace individual authorship. Historical and third-party credits are preserved in CONTRIBUTORS.md, the per-example README and LICENSE files, the Git history, and vendored source notices.
| Directory | Purpose |
|---|---|
example-bvh |
Standalone BVH playback and three bundled sample motions |
example-sync-sound |
Synchronised BVH, audio, and motion-trail rendering |
example-pen-graphics |
Ribbon-like graphics generated from skeletal motion |
particle-motion-example |
Particle forces driven by tracked joints |
motion-visualization |
Long-exposure-style joint trajectories |
marching-cubes |
A metaball surface driven by skeletal endpoints |
example-motion-ribbons |
Geometry-shader ribbons following the bundled motion |
example-motion-field |
A joint-driven fragment-shader contour field |
example-g1-motion-lab |
G1 robot reference playback, rigid-link meshes and source skeleton comparison; no robot control |
ofxBvh |
The bundled BVH loader and player used by every example |
Download the official openFrameworks 0.12.1 macOS release, then place this repository at the standard openFrameworks application depth:
export OF_ROOT=/absolute/path/to/of_v0.12.1_osx_release
git clone https://github.com/perfume-dev/example-openFrameworks.git \
"$OF_ROOT/apps/myApps/example-openFrameworks"
cd "$OF_ROOT/apps/myApps/example-openFrameworks"
./scripts/build-all.sh "$OF_ROOT"The script builds all nine applications in Release mode and runs the ofxBvh
boundary/malformed-input and marching-cubes lifecycle regression tests. An
individual application can be built with, for example:
make -C example-bvh Release OF_ROOT="$OF_ROOT"
open example-bvh/bin/example-bvh.appTo render every example in a hidden test window and save PNG evidence:
./scripts/smoke-all.sh /path/to/capturesThe GitHub workflow builds and runs regression tests on macOS, then independently
builds and renders all nine examples in a clean, digest-pinned Ubuntu 22.04
container with Mesa llvmpipe and Xvfb. The container isolates OF dependencies
from the hosted runner's preinstalled compiler SDKs.
This supplies a real software OpenGL context where hosted macOS runners cannot
provide the required pixel format. The openframeworks-rendering artifact contains
screenshots, application logs and the OpenGL context report. Render failures fail
CI; the shader studies are captured at two motion timestamps to check that their
output changes. Local capture also requires a desktop OpenGL context, even though
the test windows stay hidden. The build/capture scripts support macOS and Linux.
The checked-in Xcode projects were regenerated from the openFrameworks 0.12.1
macOS template. They use relative paths and expect the repository layout shown
above. If you put the repository elsewhere, use the Makefiles with an explicit
OF_ROOT, or update the projects with the openFrameworks Project Generator.
example-bvh is ready to run with its bundled A_test.bvh, B_test.bvh, and
C_test.bvh files. The two new shader studies read those same files. The other
five historical applications first look for the original
Perfume Global Site assets in each application's bin/data directory:
bin/data/
├── Perfume_globalsite_sound.wav
└── bvhfiles/
├── aachan.bvh
├── kashiyuka.bvh
└── nocchi.bvh
Those original full assets are not duplicated in this repository. When they are absent, the maintained examples fall back to the bundled A/B/C motion samples and a silent internal clock, so every application can still be built and explored from a clean checkout. Startup logs identify motion fallback, and an on-screen notice identifies silent-clock mode.
ofxBvh is kept in this repository and referenced as a local addon. The
historical ofxMarchingCubes source required by marching-cubes is vendored
with provenance and its LGPL-2.1-or-later notice under
third_party/ofxMarchingCubes.
Application and addon license terms remain in their respective directories;
the two examples by Atsushi Tadokoro retain their original copyright and MIT
license notices. See LICENSES.md for the component-by-component
license index; the repository does not apply one blanket license to every
directory.
The maintained example code uses GLM vectors and mesh drawing. ofxBvh retains
its older public vector/matrix types so existing addon consumers continue to
compile; its example rendering supports the programmable renderer. The vendored
marching-cubes dependency retains its upstream public interface and attribution.
G1 Motion Lab displays the same A/B/C recordings adapted to a pinned 29-DOF Unitree G1 model. Geometry comes from the robot asset, not a procedural humanoid. Computation is separate from the lightweight viewer; there is no CUDA, Python, learned policy, or robot SDK in the application.
The separate remote reproduction kit records source/model hashes, explicit coordinate conventions, dependency versions and the independent full-frame export gate. It does not provision cloud resources or automatically install or publish generated motion.
The source-motion transform and complete original-frame pose checks are separate from rendering checks. The warning KINEMATIC REFERENCE — PHYSICS NOT VALIDATED is always visible. A reference that looks right is not evidence of balance, self-collision clearance, feasible torque, or safe hardware operation. The first independent gravity/contact experiment did not pass its collision gate; this example does not send any actuator commands. Model geometry retains its Unitree BSD-3-Clause license; the new viewer's MIT license does not relicense the original or derived performance data.
All three bundled references now pass complete 40 Hz pose checks. See the measured results and physical limitations for the exact scope; no hardware execution is approved.


