Skip to content

Throw v0.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Nov 15:39
· 5 commits to main since this release

The first release of Throw: a projector throwing your clip onto a real surface, as an FFGL effect for Resolume Arena and Avenue, SW Throw (TW01). Crumpled paper, a brick wall, corrugated sheet, aluminium tread plate, pleated drapes, weatherboard, glazed tiles, or a height map or photo of your own.

The one idea. A projector is a lamp with a picture in it, and you are not standing at the lens. Every pixel of the clip is a ray leaving a lens at a real place in the room. Where the ray meets the wall it brings light: as much as the clip's pixel, times how squarely it meets the surface, over the square of how far it travelled. The wall gives that light back in its own colour, and you see each point of the relief from your own angle, not the projector's. Nothing is drawn on: the wall's colour, shading by angle, shadows, the picture sliding over the relief as you move, the lens's reflection off metal, a floor that never reaches black, and keystone all fall out of that one idea. Everything is at its real size: a brick is 215 by 65 mm with 8 mm raked joints, the corrugated sheet is 3-inch, and the wall is 2.5 m high in the frame unless you say otherwise.

The surfaces. Flat (a matte screen, the reference), Paper (facets in up to four generations as Crumple rises), Brick (Stretcher, English, Flemish or Stack bond, joints 3–25 mm), Corrugated (galvanised Sine or Box profile, 25–300 mm pitch), Plate (aluminium tread plate: Diamond, Five-Bar, Crosshatch), Drapes (pleated cotton, with Sag), Weatherboard, Tiles (white glazed metro tile) and File (your own height map or photo). The metals' reflectance is computed from published optical constants (zinc, Werner et al. 2009; aluminium, Rakić 1995), not picked by eye.

Controls: Surface (Surface, Wall Height, Scale, Depth, Seed); Paper, Brick, Corrugated, Plate and Drapes (Crumple; Bond, Mortar; Profile, Pitch; Pattern; Pleats, Sag); Finish (Roughness); File (Surface File, File Holds); Projector (Projector X and Y, Throw, Aim: Lens Shift or Pointed, Lumens, Black Level); Room (Ambient, Exposure); Viewer (Viewer X and Y, Viewer Distance); Output (View: Picture, Height, Normals, Light, Shadow, Albedo; Mix). The defaults are a brick wall under a 10 000 lumen projector in a dim room, with you 2 m to its right. Depth is the knob for drama.

Downloads: a universal macOS build (Apple silicon and Intel) as a .dmg or .zip, and a Windows x64 installer (-setup.exe) or .zip. Every archive carries ATTRIBUTIONS.md. The macOS build is Developer ID-signed and notarised minutes after publication; if macOS refuses a download, it's from before that, so download it again. The Windows build isn't signed, so SmartScreen warns once. The Windows installer's folder page starts at Program Files, which Resolume never reads: give it Documents\Resolume Arena\Extra Effects (or Avenue's), as the guide says.

What is measured (offline, by tools/verify.sh on an Apple Silicon Mac under macOS 26, driving the plugin's own class in a headless GL context, at 1280×720 and 320×180 and again on Apple's software renderer):

  • The light. A flat wall gives the clip back within 3.0e-7 from any projector and viewer tried. Every pixel of three tilted planes under five projectors carries d²·cosθ/(r²·cos³α) from the plane's closed-form hit, worst 0.47 of its per-pixel bound. Faces turned from the lens get the room's light and nothing of the clip. Black and white come back as b + A and 1 + A in five rooms, within 8.6e-7. A pointed projector's dots land within 0.015 px of the pinhole's place, with the keystone's light right per pixel.
  • The relief. A recess's dots sit within 0.0007 px of a closed-form render from four viewpoints. A step's shadow ends where R(x_e − C_x)/T says, within 0.69 px. From the lens, no surface casts a shadow at its real depth, bar 4 brick pixels of 921 600. Zinc's highlight is 0.0000 px from the mirror point, every pixel GGX within 2.8e-5.
  • The surfaces, measured off the surface buffer in metres: brick courses 75.00 mm, bricks 225.00, the corrugation's 76.000 mm period and 17.97 mm depth, tread plate's repeat, the pleats. 16- and 8-bit height maps come back within 9e-9 m.
  • The checks can fail. Eighteen deliberately wrong models each fail their check, and 23 one-character mutants of the shipped GLSL and C++ are all caught. All 29 controls change the picture. The bundle is universal, and oxbow reads SW Throw / TW01 / effect and renders 120 frames through it.

On Windows it has been in Resolume. The fleet's Arena gate ran this release workflow's own Windows build in Arena 7.27.1 on win-lab (software rendering, no GPU), twice: the DLL loads, registers as TW01 (an effect) and appears in Arena's list, all 35 controls (Arena's Opacity and the plugin's 34) match their names, order, types, ranges and defaults, it renders, and Arena's log stays clean: 10 passed, 0 failed, 0 skipped. Against a still, 28 of the plugin's 29 controls changed the picture, the surface-specific ones under their own surface. Surface File comes out inconclusive, as a file control always does there, but it took the gate's height map and File Holds then changed the picture. Mesa compiled the shaders, so they aren't only Apple's dialect.

What isn't verified, or is a limit. It's never been loaded into Resolume on macOS. Nobody has run it on a GPU other than one Mac's or measured what Resolume's own clips do to the frame rate at 4K. The model is a pinhole projector and a pinhole viewer, matte bodies with a GGX highlight on metal and glaze, and the room's light uniform and white: no depth of field (sub-pixel at real distances), no interreflection, no lamp colour. The surfaces' colours are chosen to look right, not measured. A Photo's brightness standing in for its relief is a look, not a measurement.

Cost, GPU time on an Apple Silicon Mac: at the defaults (Brick) 0.47 ms a frame at 1080p and 2.03 ms at 4K; Drapes 1.40 and 8.77 ms; the heaviest case tried, Paper fully crumpled at Depth 4, 2.07 and 13.04 ms. Changing a surface control rebuilds the surface that frame (Paper with its Seed changed every frame is 33.47 ms at 4K), so at 4K the surface controls are for setting up, not for automating. Nothing was timed inside Resolume.

Not done. No presets and no OpenFX port.