file #131 (portal swirl gone through doorways) + #132 (candle flame vs aperture background) + the [outstage] capture probe
Two user reports from the #124 gate session, both axioms: - #131: "the portal swirl is missing, when I look out from inside a house. Appears when I walk out again." Mechanism frame: under an interior root an outdoor dynamic's particles draw ONLY via the landscape slice's Scene pass (#118 outside-stage routing; #121 excludes them from the last-pass particle callback) - if any link fails, the swirl draws nowhere exactly when indoors. Desk-exonerated already: filter key conventions uniform, the routing predicate correct, sphere from vertex bounds. - #132: "I have a candle ... when a wall is behind it it shows, but if I turn a bit and the opening through a house is behind it candle light disappears." Background-dependent => per-pixel depth/blend at the aperture region, not owner culling. Possible overlap with the #124 look-in sub-pass (new pre-clear content in those pixels) - the pre-77cef4c check is in the issue. Apparatus (env-gated, zero cost off): ACDREAM_PROBE_OUTSTAGE=1 -> [outstage] per-slice outside-stage routing + cone verdict per dynamic (print-on-change, RetailPViewRenderer) + [outstage-pt] slice Scene-particle id set + live attached-emitter match count (GameWindow). One capture standing inside looking at the portal pins which link breaks. Suites: App 259+1skip / Core 1439+2skip / UI 420 / Net 294 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
77cef4cd86
commit
eeb1c59ded
4 changed files with 127 additions and 0 deletions
|
|
@ -5094,6 +5094,9 @@ public sealed class GameWindow : IDisposable
|
|||
private static uint ParticleEntityKey(AcDream.Core.World.WorldEntity entity)
|
||||
=> entity.ServerGuid != 0 ? entity.ServerGuid : entity.Id;
|
||||
|
||||
// #131 [outstage-pt] probe state (throwaway — strip when #131 closes).
|
||||
private string? _lastOutStagePtSig;
|
||||
|
||||
private static System.Numerics.Vector3 SkyPesAnchor(
|
||||
AcDream.Core.World.SkyObjectData obj,
|
||||
System.Numerics.Vector3 cameraWorldPos)
|
||||
|
|
@ -9638,6 +9641,27 @@ public sealed class GameWindow : IDisposable
|
|||
foreach (var entity in sliceCtx.OutdoorEntities)
|
||||
_outdoorSceneParticleEntityIds.Add(ParticleEntityKey(entity));
|
||||
|
||||
// #131 [outstage-pt] probe: the slice Scene-particle id set + how many
|
||||
// live emitters the filter would actually match. Print-on-change.
|
||||
if (AcDream.Core.Rendering.RenderingDiagnostics.ProbeOutStageEnabled
|
||||
&& _particleSystem is not null)
|
||||
{
|
||||
int matched = 0, attached = 0;
|
||||
foreach (var (emitter, _) in _particleSystem.EnumerateLive())
|
||||
{
|
||||
if (emitter.AttachedObjectId == 0) continue;
|
||||
attached++;
|
||||
if (_outdoorSceneParticleEntityIds.Contains(emitter.AttachedObjectId)) matched++;
|
||||
}
|
||||
string ptSig = System.FormattableString.Invariant(
|
||||
$"ids={_outdoorSceneParticleEntityIds.Count} attachedEmitters={attached} matched={matched}");
|
||||
if (ptSig != _lastOutStagePtSig)
|
||||
{
|
||||
_lastOutStagePtSig = ptSig;
|
||||
Console.WriteLine("[outstage-pt] " + ptSig);
|
||||
}
|
||||
}
|
||||
|
||||
DisableClipDistances();
|
||||
if (_outdoorSceneParticleEntityIds.Count > 0
|
||||
&& _particleSystem is not null
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue