Skip to content

Measure the ring with live ZBrush: hotkey to pixels, pick to brush changed, picks mid-stroke #213

Open

Description

@combwizard

The ring performance audit of November 2026 measured the renderer and the daemon off screen (#210 came out of it). Nothing was measured with live ZBrush, the real keyboard hook or a pen. These are the measurements still to take, each with how.

Hotkey to pixels, end to end

  • In a scratch branch, stamp perf_counter at the hook callback (compare KBDLLHOOKSTRUCT.time with GetTickCount), at the WM_APP_OPEN dispatch, after the first UpdateLayeredWindow and after ShowWindow. A 240 fps phone video of key press to ring visible is the outside check.
  • For the first open after start and for later opens, before and after The ring opens faster: pictures kept between opens and drawn ahead of the first #210.

ZBrush's frame time while the ring is up

  • PresentMon on ZBrush with the ring idle, hovering and in its open animation, at 100% and at 150% scaling. The ring is a large topmost window with per-pixel alpha.

Release to brush changed

  • radiald.log has millisecond stamps ("closed (released)", "pick #N -> listener"). The bridge's log has whole seconds, so log milliseconds there for the run, or time apply_request in ZBrush's Python console.
  • Separately: the existence check, the press, the extra read of Transform:Edit, and a brush loaded from a file, which goes through the 40 ms select retry (up to 1 s).

A pick during a stroke

  • The listener polls for the button on a 40 ms timer, which may come out near 47 ms at the default timer resolution. Measure button-up to brush changed; a 16 ms timer may be worth it.

ZBrush 2022 to 2025

  • The bridge-key route: key sent, ZScript reads the request file. Also how often the 1 s and 6 s fallbacks fire in ordinary use.

The app while idle

The browser window, on the pen's path

  • While the browser window is visible it registers raw mouse input with INPUTSINK (zorbit/popout.py), so every pen or mouse report becomes a WM_INPUT handled in Python. Compare its CPU while sculpting with the browser shown and hidden.

After #210

  • The ring warm-up line in radiald.log gives the time and the longest step on a real setup. Check it after start and after a save from Studio, on a monitor at the scaling actually in use.

Activity

  1. added
    bridgeHow ZOrbit talks to ZBrush, and the ZBrush plugins
    ringThe ring and fans: look, items, behaviour
    needs testingNeeds someone to try it in a particular ZBrush version
    on Nov 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bridgeHow ZOrbit talks to ZBrush, and the ZBrush pluginsneeds testingNeeds someone to try it in a particular ZBrush versionringThe ring and fans: look, items, behaviour

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions