13 Commits

Author SHA1 Message Date
sindoring 25c0f4ced7 graphify 2026-11-02 10:49:31 +04:00
sindoring 19457cb5ae moonwell-gfx: the secondary light reads far colour off a pyramid
Its far samples took their depth off the coarse pyramid levels but their
colour off the full screen, so a supersampled frame's colour fetches missed
the cache. A half-size colour pyramid beside the depth one now gives each
far sample its colour at its depth's level.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 22:48:58 +04:00
sindoring 8389b08d31 MoonWell voice: in-game voice chat through a relay
Three channels: near (the speaker's own faction within /say's 25 yards,
heard from where the speaker stands), group/raid and guild (any
distance). Voice never rides the world socket: clients send 20 ms Opus
frames over UDP to moonwell-voice-relay, which forwards each one only
to whoever may hear it, from the state the core feeds it (faction,
map, instance, position, group, guild), so no client can claim a place
or a group of its own. The core vouches for a client with a signed
ticket (`.mwvoice`).

- crates/moonwell-voice: the ticket and feed formats (byte-checked
  against the core's own C++ output), the client-relay wire, routing,
  the relay binary; with `client`, the microphone and voice output on
  their own cpal streams, Opus through the vendored libopus (no cmake),
  per-speaker playout queues and the UDP session.
- crates/moonwell/src/voice.rs: the game side: push-to-talk (Mouse4 by
  default) or voice activation, near speakers placed by distance and
  side, Lua MoonWell_Voice*, settings in moonwell-voice.toml, and the
  MoonWellVoice addon (voice.lua): the ticket, /voice and its settings
  window (devices by id with their Windows names, activation, key,
  threshold and meter, talk channel, channels heard, volumes, echo test).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 17:29:20 +04:00
sindoring 5f66d475fd MoonWell graphics: WoW Forever's look
Light in the air through the sun's shadow cascades (rays through canopies, the air glowing
toward a low sun), secondary lighting off the screen, FXAA and a contrast-adaptive sharpen in
the post pass, bloom from the stock FFXGlow, dense far grass through ClutterConfig (the core
re-meshes on a fade change), wind waves on water without current (city canals included), and
a "WoW Forever look" button in the options window. Everything off still draws the stock image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:05:10 +04:00
sindoring f3e35767d5 graphify 2026-10-28 18:01:22 +04:00
sindoring e12d256fd7 graphify
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 16:12:02 +04:00
sindoring 41127aa60c graphify
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 16:02:34 +04:00
sindoring aadd6ecbf2 graphify
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-27 14:05:28 +04:00
sindoring 10c7c9b7ee graphify
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-27 12:36:45 +04:00
sindoring 5842d4df93 graphify
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-27 12:10:01 +04:00
sindoring dc6b20580c graphify 2026-10-25 16:02:07 +04:00
sindoring 6976515791 Frame-cost recordings with GPU passes, CPU phases and tags; cheaper MoonWell AO
The FPS journal writes gpu-passes.log (every top-level GPU pass) and cpu-phases.csv (wall,
process and main-thread CPU per main schedule) beside fps-journal.csv, with a session marker
per recording. On Windows the phase clocks count thread cycles (QueryThreadCycleTime /
QueryProcessCycleTime at a TSC rate calibrated against Instant), since tick-sized process
times cannot split a frame. A crate on top labels recordings through FpsJournalTags; each tag
lands in all three files when recording starts and whenever it changes, and
scripts/journal-report.py summarises a recording per session and tag state side by side.

moonwell-gfx tags recordings with its settings (mwgfx) and gets cheaper at renderScale 2:
- the ambient occlusion reads a linear depth pyramid (ao_depth.wgsl, after McGuire's SAO),
  far samples off coarse levels: 2.2-2.4 ms -> ~1.1 ms at 12 MP, image unchanged (max 9/255);
- the water's scene copy is skipped while no view sees a liquid;
- shadow casters take their own visibility class, so the world camera stops listing them.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-23 18:13:00 +04:00
sindoring 4a6a16a9fc graphify
Add the graphify knowledge graph of crates/ and the CLAUDE.md rules for using it. Only the graph, report, viz and manifest are tracked; caches and scratch files are ignored.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 19:23:33 +04:00