Skip to content

Multiplane 0.3.6

Choose a tag to compare

@LBEILC LBEILC released this 15 Oct 12:46

Faster 3D shots with motion blur and depth of field, a new fast quality preset, and fixes found while rendering a long production video.

npm install multiplane
npx playwright install chromium

Changed

  • 3D shots with motion blur and depth of field are much faster. The bundled 3D layer no longer multiplies depth-of-field samples by motion samples. It first decides how many motion samples a frame needs, then splits the frame's depth-of-field budget across them (max(2, ceil(budget / N)) per capture, with the lens pattern rotated by sample time, so the blended frame still covers the whole aperture). The rotating lens pattern no longer counts as motion: whether to add samples is judged from extra captures with a fixed lens phase, so depth-of-field noise no longer pushes still or slow 3D frames to the sample limit. It also keeps the captures it has already made when samples double. On a 1080p 3D shot with depth of field, three frames went from 45.4 s to 19.7 s with the first of these changes, and the 3D part of that shot from 64 to 8 motion samples per frame with the second; splitting the depth-of-field budget took two 3-second sections of a production video from 88.6 s to 68.8 s and from 92.3 s to 61.5 s, with no visible increase in noise.
  • New dofSamples in results. render, stills and verify report dofSamples next to blurSamples ({ min, max, mean, histogram }): how many depth-of-field accumulations went into each delivered frame.
  • standard starts lower and stops earlier. Under --quality standard (the default), motion blur starts at no more than 4 samples (a shot's post.motionBlur above 4 starts at 4) and doubles up to 32 instead of 64. In a comparison against a 256-sample reference averaged in linear light, a fast typography frame has a mean error of 1.75 (99th percentile 5.7) under the new default. An explicit --motion-blur still sets the start, and a limit no larger than the start keeps the shot's count fixed.
  • New --quality fast. The same as standard with a limit of 16 samples: renders sooner, and very fast motion shows slightly more visible steps (mean error 2.11, 99th percentile 10.7 on the same frame). Use it when speed matters more than the last bit of quality; standard remains the default for final videos.
  • Fewer browsers for unmeasured 3D shots. Without a multiplane benchmark result, shots that use WebGL or the 3D layer start at most 4 browsers (other shots: at most 12, as before). Many WebGL browsers share one graphics card and could slow down the whole computer.
  • 3D cards take lodBias. layer.card({ ..., lodBias }) (default 0, unchanged output) sharpens a card shown smaller than its texture; try -1 for small text on a card facing the camera.

Fixed

  • The desktop app no longer marks running renders as failed. A system query that timed out on a fully loaded machine was taken as "the render process exited unexpectedly". The app now uses a lightweight presence check; only a process confirmed gone is reported as exited.
  • Progress moves during capture. progress.done (and done in status.json) counts frames already captured, so heavy shots no longer sit at 0 for minutes.
  • The app's bundled command hands renders to the app. Renders started with multiplane.cmd (Windows) or the bundled command on macOS were refused by the running app ("Rendering locally: Invalid hosted request.") and rendered in the terminal instead, so closing the terminal stopped them. The app now accepts requests from its own executable.
  • 3D layer: a layer-wide textureBackground no longer fills transparent cards. It applies only to cards with annotations or browserFrame; a card's own style.textureBackground still applies.
  • 3D layer: card borders no longer flicker against the image at long distances (for example a narrow field of view with the camera far away).
  • stills --draft --out <dir> no longer ends with internal_error after capturing all stills.
  • No more favicon.ico 404 in render logs. The local server answers that path with 204 when the shot root has no icon.

Shots without motion blur and without the 3D layer render the same pixels as 0.3.3. Shots with motion blur use the new standard sample counts, and 3D shots with depth of field use the new split, so their output differs slightly from 0.3.3.

Installers

System File
Windows x64 Multiplane-Setup-0.3.6-x64.exe
macOS, Apple silicon Multiplane-0.3.6-arm64.dmg
macOS, Intel Multiplane-0.3.6-x64.dmg

On Windows, 0.3.2 and later update themselves from the About page (only the changed blocks are downloaded). If you are on 0.3.0 or 0.3.1, install this version by hand once. The Linux AppImage is not included yet. The installers are not code-signed: on Windows choose "More info", then "Run anyway" in SmartScreen; on macOS right-click the app and choose "Open" the first time.

SHA-256:

File SHA-256
Multiplane-0.3.6-arm64.dmg c67192e0a39e0040187b33d8393756ccc1318ce409c9ddd3b02097183c39a722
Multiplane-0.3.6-x64.dmg d753d5448b8f68f4a8e8e4b3941d45c4335850ce19e9730b8b9e6521dccfafb2
Multiplane-Setup-0.3.6-x64.exe c8872ff2aa5b0edbfde3c537f93d8158acb4ac76308f442bdac56df74fe577fa

Verified

The full test suite and the desktop app tests pass on Windows; the everyday suite passes on macOS and Linux in CI. A packaged Windows build accepted a render from its bundled command, reconnected to it with multiplane wait after the terminal closed and delivered the video. Both macOS installers were installed, launched, used to render a real video and removed in CI.

Licence

Apache-2.0. Third-party notices are in THIRD_PARTY_NOTICES.md and inside each installer.