Skip to content

Releases: REMvisual/td-BrownianMotion

v2.0.0

01 Apr 23:22

Choose a tag to compare

What's New in v2.0

Math Upgrades

  • Exact OU transition formula (Gillespie 1996) — zero discretization error, no substep loops
  • Implicit spring filter (Klak-style) — unconditionally stable at any timestep
  • Voss-McCartney 1/f pink noise detail layer — true organic micro-texture

New Features

  • Rotation noise — independent OU process with its own speed, per-axis amplitude (pitch/yaw/roll)
  • Detail + Detail Layers — adds fractal richness, respects Smoothing
  • 6-channel output: tx, ty, tz, rx, ry, rz

Parameter Renames

  • Reversion → Center Pull
  • Roughness → Smoothing (inverted: 1 = smooth, 0 = raw)
  • Center → Anchor

Bug Fixes

  • Speed=0 stops instantly (no settling delay)
  • TD timeline pause freezes the script
  • Smoothing no longer changes perceived speed (narrowed omega range)
  • Detail respects Smoothing (applied before spring filter)
  • Init at Anchor (no cold-start drift)
  • par.enable moved to enableExpr (prevents cook loops)

Testing

  • 26 automated tests covering all parameters at extreme values

v1.2.1 — Clean Release (TD 2025+)

27 Mar 18:57

Choose a tag to compare

Patch release with clean script and version requirement.

  • TD 2025+ required — uses CookLevel.ALWAYS and 2025.x absTime behavior
  • Removed enableExpr that caused setup failures on some versions
  • Clean single-file script (src/brownian_motion.py)

All core features from v1.2.0 intact:

  • Decoupled spring filter (smooth at any speed)
  • sqrt(speed) spring scaling
  • Per-axis range toggle
  • Module-level state (no cook loop)

Full changelog: v1.2.0...v1.2.1

v1.2.0 — Smooth at Any Speed

27 Mar 18:41

Choose a tag to compare

What's New

Decoupled Spring Filter

The critically-damped spring now runs at real frame time, separate from the OU simulation. Previously the spring ran inside the OU substep loop — at high speeds it was chasing 20+ random jumps per frame and couldn't smooth anything. Now the OU evolves at speed-scaled time, and the spring smoothly interpolates toward wherever it lands. Crank speed to 100 with roughness=0 and it's still butter.

sqrt(speed) Spring Scaling

The spring's natural frequency scales with sqrt(speed) instead of linearly. At speed=10 the spring is 3.2x stiffer (not 10x), keeping motion smooth while still tracking faster OU evolution.

Per-Axis Range

New Per-Axis Range toggle — set different min/max bounds per axis. X can be [-180, 180] degrees while Z is [-10, 10] centimeters. Irrelevant range params are greyed out based on the toggle and axis enable state.

Parameter Enable Logic

  • Per-Axis Range OFF: uniform Range Min/Max active, per-axis params greyed out
  • Per-Axis Range ON: per-axis params active, uniform greyed out
  • Affect X/Y/Z OFF: corresponding per-axis range params also greyed out

Cook Loop Fix

Replaced scriptOp.store()/fetch() with module-level state dict — eliminates the cook dependency loop that was freezing animation. Added CookLevel.ALWAYS for guaranteed per-frame cooking.

Detailed Parameter Docs

README rewritten with plain-English descriptions for every parameter.

Full Parameter List

Motion: Range Min/Max, Speed, Amplitude, Reversion, Roughness
Range: Per-Axis Range toggle, Range Min/Max X/Y/Z
Axes: Affect X, Affect Y, Affect Z
Advanced: Center X/Y/Z, Seed, Independent, Reset

Install

Download the .tox below and drag it into your TouchDesigner project.

Brownian Motion v1.0.0

25 Mar 05:05

Choose a tag to compare

Brownian Motion v1.0.0

Ornstein-Uhlenbeck brownian motion Script CHOP for TouchDesigner.

Features

  • Mean-reverting procedural noise — stays within your defined range
  • Critically-damped spring smoothing for silky motion
  • Per-axis control (X, Y, Z)
  • Deterministic seeding for repeatable results
  • All parameters animatable

Install

Download Brownian Motion.tox below and drag it into your TouchDesigner project.

Requires TouchDesigner 2023.11000+