Commit graph

114 commits

Author SHA1 Message Date
MiTHRAL
36b5169e27 ghost multiplayer: cloth on ghosts + player nameplates
Phase 4:

- Cloth: remote ghosts now wear this player's cloth garments (tee/pants).
  The local player's rigid character.cloth_ropa items (CPU-sim deformed
  root-local VB) are cloned per ghost and drawn with the REMOTE entity world
  from the pose, so each ghost is draped in its own root frame. No mesh or
  cloth data is transmitted; the shader already applies item.world to the
  rigid cloth path (zero blend weights). Sim-inactive (skinned) garments and
  garments not near the local body are skipped.

- Nameplates: display names ride the wire. JOIN carries a display name
  (skate3_ghost_name cvar, default the OS user name); the relay stores it
  per client and echoes {session_id, name} pairs in the HELLO roster
  (RosterEntry). Clients re-JOIN every 5 s so the roster/names stay current
  as members join and leave. A GhostNameplateOverlay (always registered,
  draws only while enabled) projects each ghost's entity origin +1.75 m
  through the published camera and draws a colored name label above it.

  Uses skate3::native_scene::GetPublishedCamera (new thread-safe snapshot of
  the published view-proj/cam) so the UI thread can project world points.

- GhostDialog gains a display-name field. Protocol version bumped to 3.
2026-08-26 21:17:43 -04:00
MiTHRAL
bfb504db7d ghost multiplayer: full skater skeleton pose + character-model ghosts
Phase 2: replace the placeholder-cube ghost rendering with real character
models driven by the remote player's skeleton.

- Wire: POSE now carries the sender's skater skeleton (up to 64 bones, 3
  float4 rows each, index-ordered exactly like DrawItem::bones), padded with
  identity rows so every mesh's referenced bones stay in range. The relay
  forwards POSE payloads verbatim (re-stamping only the sender session id),
  so the protocol can grow without a relay update.
- Capture: OnFrameSceneBuilt (called from BuildFrameScene pre-publish)
  snapshots the local player's body item bone palette (highest-bone-count
  skinned non-ropa non-LivingWorld char item near the camera) as the
  broadcast pose; defaults the broadcast rate to 15 Hz.
- Render: in RenderScene, each remote ghost is drawn by cloning this
  player's own character pieces (body + nearby skinned char items) and
  substituting the remote skeleton into the bone ring - same meshes,
  textures and cached GPU decodes, no mesh transfer. Ghosts without a pose
  (older peers / capture not ready) fall back to the solid-color cube, which
  skate3_ghost_draw_local still uses for the self-check.

Known Phase-2 limitations (documented in code): ghosts render with this
player's own character model/outfit, cloth (ropa) garments are skipped (no
remote cloth sim), and hair/alpha pieces render opaque. All confined to
src/native and the hand-written scene hooks.
2026-08-26 20:16:42 -04:00
mchughalex
ebe14fcd1f render: recover streaming-revoked guest read faults on linux and macos 2026-07-24 19:03:31 +01:00
mchughalex
a16314df0c capture: place sort-list batched piece clones with their instance matrix 2026-07-24 13:38:02 +01:00
mchughalex
14acde031b render: key rigid pose rings by instance identity and make their mispair gates rotation-aware 2026-07-24 13:38:02 +01:00
mchughalex
020af8ae90 capture: serve rigid instance worlds from the guest mesh context owner matrix 2026-07-24 13:38:02 +01:00
mchughalex
89360e53fc capture: pair deferred rigid clone worlds by identity instead of submission order 2026-07-24 13:38:02 +01:00
mchughalex
186c7de6f4 render: stand the static sun shadows down in venues with no sane world lighting capture 2026-07-24 13:38:02 +01:00
mchughalex
c9e501e298 render: pin the guest auto-exposure at its zone max while luminance readbacks are unavailable 2026-07-24 13:38:01 +01:00
mchughalex
5e52ef82e4 render: never adopt a material's own surface map as streamed ad art 2026-07-24 13:38:01 +01:00
mchughalex
7b0d690cf3 render: skip rebuilding occlusion-culled statics on most frames 2026-07-24 13:38:01 +01:00
mchughalex
8f8642aec2 render: time the submit-record loop and pre-size per-frame bookkeeping 2026-07-24 13:38:01 +01:00
mchughalex
2aef1222a0 render: skip guest draw-list dispatch for occlusion-culled statics 2026-07-24 13:38:01 +01:00
mchughalex
73c19c8cd3 render: occlusion-cull statics hidden behind rendered geometry 2026-07-24 13:38:01 +01:00
mchughalex
13447a041f render: profile the per-item CPU pipeline with occlusion-grid visibility attribution 2026-07-24 13:38:01 +01:00
mchughalex
70a7c55183 app: unload stream-probe cells before map transitions tear them down 2026-07-24 13:38:01 +01:00
mchughalex
ceb98c34ec render: march sun shafts at quarter res with reach-proportional steps 2026-07-24 13:38:01 +01:00
mchughalex
0224fdf74e render: budget the content stores by GPU bytes and LRU-evict the cube cache 2026-07-21 10:21:37 +01:00
mchughalex
b1cbbc263d render: swap unfixed caster-bank publishes for the last main-view capture 2026-07-21 08:27:09 +01:00
mchughalex
c03ef926eb render: hold shadow-caster parity through short ortho-capture gaps 2026-07-21 08:11:38 +01:00
mchughalex
b6d9442b45 render: add a Vulkan-only static sun receiver bias margin for toolchain rounding differences 2026-07-21 07:57:12 +01:00
mchughalex
fbcffc1445 render: fill one-to-two frame dyn publish gaps with the previous capture 2026-07-21 06:19:40 +01:00
mchughalex
f6d0136168 render: demote per-frame capture diagnostics to debug, align example config with texture-load defaults 2026-07-21 05:24:40 +01:00
mchughalex
b8a8180475 render: drop the static sun forced-failure debug hook 2026-07-21 03:33:42 +01:00
mchughalex
77283fe3fb render: surface the sticky-failure fallback (EMULATED readout, F5 retry, forced-failure debug hook) 2026-07-21 03:31:11 +01:00
mchughalex
33b7465d2e render: showcase decals/dyn layers, blackout bookends, and hot-rebuild fixes 2026-07-21 02:40:19 +01:00
mchughalex
32eb60337a render: true ultrawide through the native renderer 2026-07-20 00:36:16 +01:00
mchughalex
035d3e22a0 app: move the showcase hotkey to Ctrl+Shift+B 2026-07-20 00:08:18 +01:00
mchughalex
cb14799e47 render: apply MSAA and shadow map resolution changes live 2026-07-19 23:50:32 +01:00
mchughalex
404cec3378 app: gate diagnostic captures and logging behind debug cvars, native renderer on by default 2026-07-19 22:45:33 +01:00
mchughalex
275fa431c3 render: character normal maps and specular lighting 2026-07-19 21:59:58 +01:00
mchughalex
ccf84fade3 render: graphics build-up showcase mode 2026-07-19 19:58:30 +01:00
mchughalex
2e03593801 render: free-fly drone camera with guest camera takeover 2026-07-19 19:46:17 +01:00
mchughalex
a5f54b4827 render: fingerprint DXT alpha blocks by their color half (stale menu art) 2026-07-19 18:51:25 +01:00
mchughalex
cbc492a407 render: exact scrollincandescent port - the LED chyron scrolls and glows 2026-07-19 18:49:29 +01:00
mchughalex
e518d0ef8f render: bias the sun-override cascade re-fit along the shadow direction 2026-07-19 17:09:38 +01:00
mchughalex
f11aa9ece4 render: cascaded static sun-shadow map with contact-hardening soft shadows 2026-07-19 16:55:36 +01:00
mchughalex
9088059ed5 render: keep character smoothing coherent at very high frame rates 2026-07-19 14:42:29 +01:00
mchughalex
ae07a1c1c1 render: calibrate the default bloom intensity down to 0.025 2026-07-19 14:07:47 +01:00
mchughalex
f2aaf4081e render: volumetric sun shafts, directional haze, and a movable-sun lighting lab 2026-07-19 14:05:10 +01:00
mchughalex
75c8487ee6 render: port the water and ocean shaders to exact native branches 2026-07-19 13:02:10 +01:00
mchughalex
e591f76f21 render: split the scene renderer into capture and GPU translation units 2026-07-19 10:19:22 +01:00
mchughalex
b97d6dcadc render: drop the retired vehicle-flick detector; quiet diagnostics by default 2026-07-19 09:39:43 +01:00
mchughalex
1f8166e21c render: rename renderer identifiers and perf labels 2026-07-19 09:35:42 +01:00
mchughalex
cb92f6aec5 render: promote the palette serve into its own module, retire the shadow observers 2026-07-19 09:32:57 +01:00
mchughalex
4ee3c458bf render: remove the shadow-mat observers and other dead diagnostics 2026-07-19 09:25:26 +01:00
mchughalex
80499b9f06 render: screen-space reflections (experimental, off by default) 2026-07-17 13:42:44 +01:00
mchughalex
3e09f33daf render: HDR scene pipeline + real bloom (SDK bump) 2026-07-17 12:07:38 +01:00
mchughalex
ae9720bf1a render: retire inert capture-inference guards superseded by the identity store 2026-07-17 12:01:40 +01:00
mchughalex
bfb3c07839 render: skater-family character fade from the entity opacity field 2026-07-17 11:19:34 +01:00