diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 652844be..e979982e 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -97,6 +97,55 @@ Copy this block when adding a new issue: --- +## #263 — Drudge Scrying Orb still occludes its particles after the composite-translucency fix + +**Status:** OPEN (deferred by user 2026-07-29) +**Severity:** LOW (single known item; "very subtle" per user) +**Component:** rendering / world translucency / particles + +**Symptom (user report):** wielded items subtly hid particle effects, "missing +some translucent texture." The general fix landed as `16ed6e7c` (authored +`Surface.Translucency` was baked into texture alpha only on the shared-atlas +path; the per-instance composite paths — palette/texture overrides, i.e. most +wielded loot — never applied it, so translucent parts painted alpha=1 and +erased particles composited behind them). User confirms other items now render +correctly; the **Drudge Scrying Orb** still shows traces of the occlusion. + +**Root cause / status:** the override-driven translucency loss is fixed and +verified on other items. The orb residual matches the remaining ranked +hypotheses from the 2026-07-29 investigation (transcript-level, not yet a +research doc): +- **H3 — ClipMap-only shell:** `IsOpaque` counts `Base1ClipMap` as opaque + (`WbDrawDispatcher.cs` `IsOpaque`, pipeline writes depth), so a + ClipMap-authored orb shell would depth-reject particles behind/inside it. + Only a divergence if retail composites that same surface blended. +- **H2 — scope-split ordering:** interior roots draw unattached scene + particles (`AttachedObjectId == 0`) BEFORE `FlushLandscapeAlpha` + (`RetailPViewRenderer.cs` ~:774-780), so an unattached emitter composites + in a strictly earlier scope than every dynamic's mesh regardless of + distance. +- Orb-specific authoring (interior particle system inside a glass sphere) is + the classic shape for both. + +**Discriminating probes (no new code needed):** `ACDREAM_WB_DIAG=1` (a +translucent-looking orb part appearing in the opaque draw count = H3), +`ACDREAM_PROBE_OUTSTAGE=1` (owner-id in the late-landscape particle set vs +dynamics set = H2), `ACDREAM_DUMP_ENTITY=`, +`ACDREAM_HIDE_PART=` to confirm the occluding part by construction. + +**Files:** `src/AcDream.App/Rendering/Wb/WbDrawDispatcher.cs` (IsOpaque / +ClassifyBatches / DeferTransparentGroups), `src/AcDream.App/Rendering/TextureCache.cs` +(`DecodeFromDats` bake), `src/AcDream.Core/Textures/SurfaceDecoder.cs` +(`ApplyAuthoredTranslucency`), `src/AcDream.App/Rendering/ParticleRenderer.cs` +(scope deferral). Related: #225 (RetailAlphaQueue, final visual gate pending), +register rows AP-34/AP-21/AD-19. + +**Acceptance:** the Drudge Scrying Orb's particle effect reads through its +shell like retail, wielded and on the ground, indoors and out, without +regressing the #225 lifestone/candle compositing. + +--- + ## #262 — Run-on-the-spot at first login: no displacement until a recall reset **Status:** OPEN