re: the splashes have NO post-process -- one pass, source-over, alpha in the vertex stream
Play-test finding 4 asked, in order: is there a pass, what is it, where do its parameters come from, only then what curve. All four, from GPU state. 1. NO post-process pass. Over all 1 048 draws of frames 4..226 (both boot splashes): rt0=[tile=0 fmt=0 exp=0] on 1048/1048, pitch=1280 msaa=0 on 1048/1048, edram_mode only ever kColorDepth or kCopy, resolve dests only the two alternating front buffers, and NO texture base anywhere in the capture equals a resolve destination. The only texture bound in the whole splash region is the sprite page 0x11A50000. No blur, no bloom, no fade quad over a resolved image, no tone curve, no resolve-and-resample. 2. What it is: per frame, a full-screen replace triangle (the clear), a full-screen black quad through the ordinary blend, ONE batched sprite draw carrying every visible element (indices 4/8/12/24), and the two presentation resolves. 3. Where the parameters come from: NOT the constant banks -- the splash pixel shaders read zero float constants, ps_c[n=0] on 1048/1048, taken off each shader's own float_bitmap. NOT immediates. The fade is the per-vertex k_8_8_8_8 colour in a vertex buffer the guest rewrites every frame. 4. The curve falls out of 3 and is the corpus's existing 34/frame law, reproduced on an independent capture. Not claimed as new. And the composite is ORDINARY SOURCE-OVER, confirmed from the shader ucode rather than inferred from the blend register: the register reads ONE/ONE_MINUS_SRC_ALPHA, which looks premultiplied, and is -- because the shader premultiplies. The two together are src*A + dst*(1-A). So the 'more pronounced' fade is neither a blend difference nor a pass. The likely mechanism instead: the developer splash submits SIX quads, three logos plus three slightly-larger companions that lead them by 8 frames and are gone 79 frames early. Two over-blended copies of the same art at different scale is a halo, on screen only during the entry. Refutation attempt, recorded: REFUTED.md's re-opened rest() pair states its settling condition as 'a draw capture of the developer splash naming which of the three glows is submitted at rest'. This is that capture. All three companions ARE submitted in all 21 frames -- so no rule that hides one describes this stream -- but they are NOT interchangeable: Q6 leaves the plateau on its own -5.6/frame decay while Q4 and Q5 hold 255. The one-byte sibling difference is drawn. Trap recorded with the evidence: censusing the whole 600-frame log finds six 640x360 textures sampled ~330 times each, which reads exactly like a half-resolution blur chain. They are the attract movie's chroma planes and first appear at frame 234, after both splashes. Restricting the window is what separates them. Evidence: docs/re/data/splash-draw-pass-census.txt, docs/re/data/splash-quad-timeline.txt, docs/re/data/shaders/*.ucode.frag. Logger: canary sylpheed-re d90d14e02.
This commit is contained in:
@@ -46,6 +46,101 @@ silent. A blank output is a failure, not an empty ask list.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## ✅✅ 2026-09-01 — **THE SPLASHES HAVE NO POST-PROCESS.** One pass, source-over, alpha in the vertex stream
|
||||||
|
|
||||||
|
Play-test finding 4 — *"the splash fade/blur is more pronounced in the game"* —
|
||||||
|
asked, in the human's order: is there a pass, what is it, where do its parameters
|
||||||
|
come from, only then what curve. All four are now answered **from GPU state**, and
|
||||||
|
none of it rests on a renderer of ours.
|
||||||
|
[`../re/ui-splash-draw-pass.md`](../re/ui-splash-draw-pass.md)
|
||||||
|
|
||||||
|
**1. There is no post-process pass. Not one.** Over all **1 048 draws of frames
|
||||||
|
4…226**, which is both boot splashes end to end:
|
||||||
|
|
||||||
|
* `rt0=[tile=0 fmt=0 exp=0]` on **1 048/1 048** — one render target, throughout.
|
||||||
|
* `pitch=1280 msaa=0` on **1 048/1 048** — no reduced-resolution pass.
|
||||||
|
* `mode=` is only ever kColorDepth or kCopy. There is no third kind of draw.
|
||||||
|
* Resolve destinations are **only** the two alternating front buffers, and **no
|
||||||
|
texture bound anywhere in the capture is a resolve destination**. Nothing is
|
||||||
|
resolved and re-sampled.
|
||||||
|
* The **only** texture bound in the whole splash region is the sprite page
|
||||||
|
`0x11A50000 1280×768`.
|
||||||
|
|
||||||
|
**2. So there is nothing for you to add, and nothing to remove.** No blur, no
|
||||||
|
bloom, no fade quad over a resolved image, no tone curve. Per splash frame the
|
||||||
|
game submits: a full-screen replace triangle (clear), a full-screen black quad
|
||||||
|
through the ordinary blend, **one batched sprite draw** carrying every visible
|
||||||
|
element, and the two presentation resolves. Five draws.
|
||||||
|
|
||||||
|
**3. Your straight alpha-over is the RIGHT equation — confirmed from the shader,
|
||||||
|
not assumed.** The blend register reads `ONE / ONE_MINUS_SRC_ALPHA`, which looks
|
||||||
|
like a premultiplied pipeline. It is, because the pixel shader premultiplies:
|
||||||
|
|
||||||
|
```
|
||||||
|
tfetch2D r2, r1.xy, tf0 ; texture, straight alpha
|
||||||
|
mul r1.w = r2.w * r0.w ; A = tex.a * vcol.a
|
||||||
|
mul r0.xyz = r2.xyz * r0.xyz ; rgb = tex.rgb * vcol.rgb
|
||||||
|
mul r1.xyz = r0.xyz * r1.w ; rgb = rgb * A
|
||||||
|
max oC0 = r1 ; (rgb·A, A)
|
||||||
|
```
|
||||||
|
|
||||||
|
`src·ONE + dst·(1−A)` with a premultiplied source **is** source-over. Do not
|
||||||
|
"fix" this. The full listing is committed at
|
||||||
|
[`../re/data/shaders/`](../re/data/shaders/).
|
||||||
|
|
||||||
|
**4. The fade parameter is PER-VERTEX COLOUR, not a constant.** The splash pixel
|
||||||
|
shaders read **zero** float constants — `ps_c[n=0]` on 1 048/1 048, taken off each
|
||||||
|
shader's own `float_bitmap`. The only thing that differs between two consecutive
|
||||||
|
splash draws is the vertex buffer, at a fresh address every frame. The guest
|
||||||
|
computes the alpha on the CPU and writes it into a `k_8_8_8_8` vertex colour,
|
||||||
|
uniform across all four vertices of a quad.
|
||||||
|
|
||||||
|
**5. The curve is the one you already have** — `ui-keyframe-time-unit.md`'s ✅
|
||||||
|
law, reproduced here on an independent capture: alpha steps by **exactly 34 per
|
||||||
|
presented frame**, clamped at 255, i.e. 2 time units/frame at 255/15 per unit.
|
||||||
|
No easing on the way in.
|
||||||
|
|
||||||
|
### 🔴 The part that most likely explains "more pronounced": the quad COUNT
|
||||||
|
|
||||||
|
The developer splash submits **six** quads, not three.
|
||||||
|
|
||||||
|
| | quads | frames |
|
||||||
|
|---|---|---|
|
||||||
|
| logos | Q1 `y +0.350…+0.550`, Q2 `y −0.120…+0.120`, Q3 `y −0.620…−0.250` | 135…226 |
|
||||||
|
| companions | Q4/Q5/Q6 — the **same three rects, scaled slightly larger** | 127…147 |
|
||||||
|
|
||||||
|
The companions **lead the logos by 8 frames** and are gone 79 frames before the
|
||||||
|
logos are. Two over-blended copies of the same art at slightly different scale is
|
||||||
|
a soft halo, and it is on screen only during the entry. **If your export drops
|
||||||
|
those three, the game will look softer than the port at exactly the moment the
|
||||||
|
play-test describes** — and that is a mechanism, not a curve to tune.
|
||||||
|
|
||||||
|
Per-quad, per-frame alpha for all eight quads of both splashes, straight off the
|
||||||
|
vertex stream:
|
||||||
|
[`../re/data/splash-quad-timeline.txt`](../re/data/splash-quad-timeline.txt).
|
||||||
|
The pass census: [`../re/data/splash-draw-pass-census.txt`](../re/data/splash-draw-pass-census.txt).
|
||||||
|
|
||||||
|
### And a correction you should take before building on `rest()`
|
||||||
|
|
||||||
|
The R1 pass re-opened four `REFUTED.md` entries whose stated settling condition
|
||||||
|
was *"a draw capture of the developer splash naming which of the three glows is
|
||||||
|
submitted at rest."* This is that capture, and it splits the answer:
|
||||||
|
|
||||||
|
* ✅ **All three companions are submitted, in all 21 frames they exist.** No rule
|
||||||
|
that renders one of the three invisible describes this draw stream.
|
||||||
|
* ❌ **But they are NOT interchangeable.** Q6 leaves the plateau on its own decay
|
||||||
|
(`254 249 243 237 232 226 220 214`, about −5.6/frame) while Q4 and Q5 hold 255.
|
||||||
|
The one-byte sibling difference the corpus treated as noise **is drawn**.
|
||||||
|
|
||||||
|
### What this does NOT answer
|
||||||
|
|
||||||
|
* **The plate-late finding (play-test 3).** Untouched. Next iteration.
|
||||||
|
* **Splash A's step size** — its rising run straddles dropped frames in this
|
||||||
|
capture, so it is not claimed.
|
||||||
|
* **Whether one presented frame is one guest animation tick.** Q1's seconds
|
||||||
|
conversion is unchanged and still 🟡.
|
||||||
|
|
||||||
|
---
|
||||||
## ✅✅ 2026-08-31 — **STOP TRANSCRIBING THE TABLE. The blend is a BIT on the disc.**
|
## ✅✅ 2026-08-31 — **STOP TRANSCRIBING THE TABLE. The blend is a BIT on the disc.**
|
||||||
|
|
||||||
> **`T8aD +0x04` bit `0x02` set ⇒ ADDITIVE. Clear ⇒ premultiplied alpha-over.**
|
> **`T8aD +0x04` bit `0x02` set ⇒ ADDITIVE. Clear ⇒ premultiplied alpha-over.**
|
||||||
|
|||||||
@@ -137,6 +137,7 @@ files, which is how the same ground got covered twice.
|
|||||||
| [`structures/stage-mission-tables.md`](structures/stage-mission-tables.md) | The stage table set — phases, routes, sub-objectives and AI parameters | ✅ the table set and how the stage record reaches it, validated across; **`AIParams` disc-wide: 23 objects, one shared 34-profile roster (782 records), loader `sub_8233C368`; `Type`→field-count holds except the two `_Test` templates** |
|
| [`structures/stage-mission-tables.md`](structures/stage-mission-tables.md) | The stage table set — phases, routes, sub-objectives and AI parameters | ✅ the table set and how the stage record reaches it, validated across; **`AIParams` disc-wide: 23 objects, one shared 34-profile roster (782 records), loader `sub_8233C368`; `Type`→field-count holds except the two `_Test` templates** |
|
||||||
| [`structures/texture-color-k8888.md`](structures/texture-color-k8888.md) | Texture colour interpretation — `k_8_8_8_8` (32bpp UI/HUD textures) | — |
|
| [`structures/texture-color-k8888.md`](structures/texture-color-k8888.md) | Texture colour interpretation — `k_8_8_8_8` (32bpp UI/HUD textures) | — |
|
||||||
| [`ui-keyframe-time-unit.md`](ui-keyframe-time-unit.md) | What a keyframe time is worth, and what shape the ramp has | ✅ CONFIRMED from the running game's own draw stream — the ramp is **linear** (a declared 15-unit fade lands on `round(255·k/15)` for all seven samples) and the animation clock advances **2 time units per submitted frame**. 🟡 the seconds conversion (`1 unit = 1/60 s`) rests on a measured 27.6 present-frames/second |
|
| [`ui-keyframe-time-unit.md`](ui-keyframe-time-unit.md) | What a keyframe time is worth, and what shape the ramp has | ✅ CONFIRMED from the running game's own draw stream — the ramp is **linear** (a declared 15-unit fade lands on `round(255·k/15)` for all seven samples) and the animation clock advances **2 time units per submitted frame**. 🟡 the seconds conversion (`1 unit = 1/60 s`) rests on a measured 27.6 present-frames/second |
|
||||||
|
| [`ui-splash-draw-pass.md`](ui-splash-draw-pass.md) | The splash draw pass — is there a post-process, and where does the fade come from | ✅ **decoded from GPU state, 2026-09-01.** **No post-process pass exists**: over all 1 048 draws of both splashes, one render target (`rt0=[tile=0…]` 1 048/1 048), one pitch, no MSAA, only kColorDepth/kCopy modes, resolve destinations only the two front buffers, and **no texture base anywhere equals a resolve destination**. The only texture bound is the sprite page. Three trivial pixel shaders; the sprite shader **premultiplies**, so `ONE/ONE_MINUS_SRC_ALPHA` is algebraically **source-over**. Parameters come from **per-vertex `k_8_8_8_8` colour** in a per-frame vertex buffer — the shaders read **zero** float constants (`ps_c[n=0]` 1 048/1 048). Ramp reproduces the ✅ 34/frame law. ⚠️ Censusing the whole 600-frame log instead finds the attract movie's 640×360 chroma planes and reads as a half-res blur chain — the frame window is what avoids that. |
|
||||||
| [`ui-keyframe-record-layout.md`](ui-keyframe-record-layout.md) | A keyframe's time word comes **before** its pose — the placement record, decoded | ✅ CONFIRMED, **decoded**. A group is an 8-byte header then `frames` records of `{u32 time; 36-byte pose}`, so the time precedes the pose; the group's lead-in word at `header+8` is pose 0's time and **every** pose is timed. Disc-wide over 13 991 groups in 33 archives, each test with a control: lead-in prepended is non-decreasing **13 991/13 991**; a non-zero lead-in is strictly below the next time **5 058/5 058** (control 70.9 %); a multi-segment alpha ramp runs at a constant `dα/dt` **857/1 540** against **0/1 042** under the old reading. 🔴 Retires two long-standing corpus claims — *"a group's data stops 4 bytes short of its final block's time slot"* and *"the last keyframe carries no time"* — both of which were this off-by-one. Adoption is free: all 12 `GP_TITLE` builds render byte-identically, and over 217 builds only two elements pick a different `rest()` pose, both between equally invisible ones. ❔ the executable's own parser was **not** found (the 40/60 stride query is weak, not negative) |
|
| [`ui-keyframe-record-layout.md`](ui-keyframe-record-layout.md) | A keyframe's time word comes **before** its pose — the placement record, decoded | ✅ CONFIRMED, **decoded**. A group is an 8-byte header then `frames` records of `{u32 time; 36-byte pose}`, so the time precedes the pose; the group's lead-in word at `header+8` is pose 0's time and **every** pose is timed. Disc-wide over 13 991 groups in 33 archives, each test with a control: lead-in prepended is non-decreasing **13 991/13 991**; a non-zero lead-in is strictly below the next time **5 058/5 058** (control 70.9 %); a multi-segment alpha ramp runs at a constant `dα/dt` **857/1 540** against **0/1 042** under the old reading. 🔴 Retires two long-standing corpus claims — *"a group's data stops 4 bytes short of its final block's time slot"* and *"the last keyframe carries no time"* — both of which were this off-by-one. Adoption is free: all 12 `GP_TITLE` builds render byte-identically, and over 217 builds only two elements pick a different `rest()` pose, both between equally invisible ones. ❔ the executable's own parser was **not** found (the 40/60 stride query is weak, not negative) |
|
||||||
| [`structures/ui-composable-bundles.md`](structures/ui-composable-bundles.md) | A screen build is not the only thing `compose` can draw | ✅ CONFIRMED by measurement over the disc, with the artifact to |
|
| [`structures/ui-composable-bundles.md`](structures/ui-composable-bundles.md) | A screen build is not the only thing `compose` can draw | ✅ CONFIRMED by measurement over the disc, with the artifact to |
|
||||||
| [`structures/ui-focus-and-effect-elements.md`](structures/ui-focus-and-effect-elements.md) | `_eff` glow layers are not focused-state records | ✅ CONFIRMED by measurement over all 965 screen builds on the disc, |
|
| [`structures/ui-focus-and-effect-elements.md`](structures/ui-focus-and-effect-elements.md) | `_eff` glow layers are not focused-state records | ✅ CONFIRMED by measurement over all 965 screen builds on the disc, |
|
||||||
|
|||||||
3
docs/re/data/shaders/shader_2E372EA28CC404B7.ucode.frag
Normal file
3
docs/re/data/shaders/shader_2E372EA28CC404B7.ucode.frag
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
/* 0.0 */ alloc colors
|
||||||
|
/* 0.1 */ exece
|
||||||
|
/* 1 */ max oC0, r0, r0
|
||||||
4
docs/re/data/shaders/shader_5773DC18083C4C20.ucode.frag
Normal file
4
docs/re/data/shaders/shader_5773DC18083C4C20.ucode.frag
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
/* 0.0 */ alloc colors
|
||||||
|
/* 0.1 */ exece
|
||||||
|
/* 1 */ mul oC0.xyz_, r0.xyzz, r0.wwww
|
||||||
|
+ maxs oC0.___w, r0.ww
|
||||||
9
docs/re/data/shaders/shader_E59B2B3DA4AA9008.ucode.frag
Normal file
9
docs/re/data/shaders/shader_E59B2B3DA4AA9008.ucode.frag
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/* 0.0 */ exec
|
||||||
|
/* 2 */ tfetch2D r2, r1.xy, tf0
|
||||||
|
/* 0.1 */ alloc colors
|
||||||
|
/* 1.0 */ exece
|
||||||
|
/* 3 */ mul r1.___w, r2.wwww, r0.wwww
|
||||||
|
/* 4 */ mul r0.xyz_, r2.xyzz, r0.xyzz
|
||||||
|
/* 5 */ mul r1.xyz_, r0.xyzz, r1.wwww
|
||||||
|
/* 6 */ max oC0, r1, r1
|
||||||
|
/* 1.1 */ cnop
|
||||||
35
docs/re/data/splash-draw-pass-census.txt
Normal file
35
docs/re/data/splash-draw-pass-census.txt
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Every GPU state that could carry a post-process pass, over BOTH boot splashes.
|
||||||
|
# Source: xenia_re_ui_draws_01.log, Canary with the augmented UI draw logger
|
||||||
|
# (canary sylpheed-re d90d14e02). Capture recipe:
|
||||||
|
# GRACE=1 NOTAP=1 ARM=early FRAMES=600 MAXDRAWS=400000 tools/re-capture/ui_draw_capture.sh
|
||||||
|
# Frames 4..226 are the two splashes; frames >=234 are the attract movie and are
|
||||||
|
# EXCLUDED here -- the movie's 640x360 chroma planes look like a half-res blur
|
||||||
|
# chain if you census the whole log at once, and that is the trap this file avoids.
|
||||||
|
|
||||||
|
draws in frames 4..226: 1048
|
||||||
|
|
||||||
|
## 1. RENDER TARGETS -- one, throughout
|
||||||
|
[('rt0=[tile=0 fmt=0 exp=0]', 1048)]
|
||||||
|
## 2. SURFACE -- one pitch, no MSAA, throughout
|
||||||
|
[('pitch=1280 msaa=0', 1048)]
|
||||||
|
## 3. EDRAM MODE -- kColorDepth(4) draws and kCopy(6) resolves only
|
||||||
|
[('4', 628), ('6', 420)]
|
||||||
|
## 4. RESOLVE DESTINATIONS -- two, alternating front buffers, every frame
|
||||||
|
[('14570000', 210), ('14910000', 210)]
|
||||||
|
## 5. TEXTURES BOUND -- and whether any is a resolve destination
|
||||||
|
416 ('10000000', '1x1', '26')
|
||||||
|
208 ('11A50000', '1280x768', '6')
|
||||||
|
any texture base == a resolve dest? False
|
||||||
|
## 6. PIXEL-SHADER FLOAT CONSTANTS -- the parameter-source question
|
||||||
|
[('ps_c[n=0]:', 1048)]
|
||||||
|
## 7. SHADERS, and the blend each is submitted with
|
||||||
|
416 ps=0xE59B2B3DA4AA9008 blend=0x07010701 mode=6
|
||||||
|
210 ps=0x2E372EA28CC404B7 blend=0x00010001 mode=4
|
||||||
|
210 ps=0x5773DC18083C4C20 blend=0x07010701 mode=4
|
||||||
|
208 ps=0xE59B2B3DA4AA9008 blend=0x07010701 mode=4
|
||||||
|
4 ps=0x5773DC18083C4C20 blend=0x07010701 mode=6
|
||||||
|
|
||||||
|
# blend 0x07010701 = colour and alpha both src*ONE + dst*(1-SRC_ALPHA)
|
||||||
|
# blend 0x00010001 = colour and alpha both src*ONE + dst*ZERO (a replace/clear)
|
||||||
|
# BlendFactor: 0=ZERO 1=ONE 7=ONE_MINUS_SRC_ALPHA (xenos.h:751)
|
||||||
|
# EdramMode: 4=kColorDepth 6=kCopy (xenos.h:929)
|
||||||
457
docs/re/data/splash-quad-timeline.txt
Normal file
457
docs/re/data/splash-quad-timeline.txt
Normal file
@@ -0,0 +1,457 @@
|
|||||||
|
# Splash sprite quads, straight off the guest's vertex stream.
|
||||||
|
# Capture: ui_draw_capture.sh GRACE=1 NOTAP=1 ARM=early FRAMES=600, 2026-09-01,
|
||||||
|
# augmented draw logger (RT state + PS constants + resolve). Frames 1..232 = both splashes.
|
||||||
|
# NDC rect -> quad name, by how many frames it is submitted in:
|
||||||
|
# Q0 x[-0.520,+0.520] y[-0.100,+0.080] submitted in 111 draws
|
||||||
|
# Q1 x[-0.390,+0.390] y[+0.350,+0.550] submitted in 87 draws
|
||||||
|
# Q2 x[-0.190,+0.190] y[-0.120,+0.120] submitted in 87 draws
|
||||||
|
# Q3 x[-0.300,+0.300] y[-0.620,-0.250] submitted in 87 draws
|
||||||
|
# Q4 x[-0.410,+0.410] y[+0.320,+0.570] submitted in 21 draws
|
||||||
|
# Q5 x[-0.200,+0.210] y[-0.150,+0.150] submitted in 21 draws
|
||||||
|
# Q6 x[-0.320,+0.310] y[-0.650,-0.220] submitted in 21 draws
|
||||||
|
# Q7 x[-0.530,+0.540] y[-0.130,+0.120] submitted in 8 draws
|
||||||
|
#
|
||||||
|
frame slot quad x0 y0 x1 y1 alpha rgb uniform_colour
|
||||||
|
4 0 Q7 -0.53 -0.13 0.54 0.12 85 FFFFFF True
|
||||||
|
6 0 Q7 -0.53 -0.13 0.54 0.12 204 FFFFFF True
|
||||||
|
7 0 Q7 -0.53 -0.13 0.54 0.12 240 FFFFFF True
|
||||||
|
7 1 Q0 -0.52 -0.1 0.52 0.08 85 FFFFFF True
|
||||||
|
9 0 Q7 -0.53 -0.13 0.54 0.12 217 FFFFFF True
|
||||||
|
9 1 Q0 -0.52 -0.1 0.52 0.08 221 FFFFFF True
|
||||||
|
10 0 Q7 -0.53 -0.13 0.54 0.12 211 FFFFFF True
|
||||||
|
10 1 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
11 0 Q7 -0.53 -0.13 0.54 0.12 183 FFFFFF True
|
||||||
|
11 1 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
13 0 Q7 -0.53 -0.13 0.54 0.12 98 FFFFFF True
|
||||||
|
13 1 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
14 0 Q7 -0.53 -0.13 0.54 0.12 70 FFFFFF True
|
||||||
|
14 1 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
16 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
17 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
18 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
19 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
20 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
21 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
22 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
23 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
24 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
25 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
26 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
27 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
28 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
29 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
30 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
31 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
32 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
33 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
34 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
35 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
36 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
37 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
38 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
39 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
40 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
41 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
42 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
43 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
44 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
45 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
46 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
47 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
48 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
49 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
50 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
51 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
52 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
53 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
55 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
56 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
57 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
58 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
59 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
60 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
61 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
62 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
63 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
64 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
65 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
66 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
67 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
68 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
69 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
70 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
71 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
72 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
73 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
74 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
75 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
76 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
77 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
78 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
80 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
81 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
82 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
84 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
85 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
86 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
87 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
88 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
89 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
90 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
91 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
92 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
93 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
94 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
95 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
96 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
97 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
98 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
99 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
100 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
101 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
102 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
103 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
104 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
105 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
106 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
107 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
108 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
109 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
110 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
111 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
112 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
113 0 Q0 -0.52 -0.1 0.52 0.08 255 FFFFFF True
|
||||||
|
114 0 Q0 -0.52 -0.1 0.52 0.08 254 FFFFFF True
|
||||||
|
115 0 Q0 -0.52 -0.1 0.52 0.08 249 FFFFFF True
|
||||||
|
116 0 Q0 -0.52 -0.1 0.52 0.08 237 FFFFFF True
|
||||||
|
117 0 Q0 -0.52 -0.1 0.52 0.08 215 FFFFFF True
|
||||||
|
118 0 Q0 -0.52 -0.1 0.52 0.08 181 FFFFFF True
|
||||||
|
119 0 Q0 -0.52 -0.1 0.52 0.08 148 FFFFFF True
|
||||||
|
120 0 Q0 -0.52 -0.1 0.52 0.08 115 FFFFFF True
|
||||||
|
121 0 Q0 -0.52 -0.1 0.52 0.08 81 FFFFFF True
|
||||||
|
122 0 Q0 -0.52 -0.1 0.52 0.08 48 FFFFFF True
|
||||||
|
123 0 Q0 -0.52 -0.1 0.52 0.08 15 FFFFFF True
|
||||||
|
127 0 Q4 -0.41 0.32 0.41 0.57 17 FFFFFF True
|
||||||
|
127 1 Q5 -0.2 -0.15 0.21 0.15 17 FFFFFF True
|
||||||
|
127 2 Q6 -0.32 -0.65 0.31 -0.22 17 FFFFFF True
|
||||||
|
128 0 Q4 -0.41 0.32 0.41 0.57 51 FFFFFF True
|
||||||
|
128 1 Q5 -0.2 -0.15 0.21 0.15 51 FFFFFF True
|
||||||
|
128 2 Q6 -0.32 -0.65 0.31 -0.22 51 FFFFFF True
|
||||||
|
129 0 Q4 -0.41 0.32 0.41 0.57 85 FFFFFF True
|
||||||
|
129 1 Q5 -0.2 -0.15 0.21 0.15 85 FFFFFF True
|
||||||
|
129 2 Q6 -0.32 -0.65 0.31 -0.22 85 FFFFFF True
|
||||||
|
130 0 Q4 -0.41 0.32 0.41 0.57 119 FFFFFF True
|
||||||
|
130 1 Q5 -0.2 -0.15 0.21 0.15 119 FFFFFF True
|
||||||
|
130 2 Q6 -0.32 -0.65 0.31 -0.22 119 FFFFFF True
|
||||||
|
131 0 Q4 -0.41 0.32 0.41 0.57 153 FFFFFF True
|
||||||
|
131 1 Q5 -0.2 -0.15 0.21 0.15 153 FFFFFF True
|
||||||
|
131 2 Q6 -0.32 -0.65 0.31 -0.22 153 FFFFFF True
|
||||||
|
132 0 Q4 -0.41 0.32 0.41 0.57 187 FFFFFF True
|
||||||
|
132 1 Q5 -0.2 -0.15 0.21 0.15 187 FFFFFF True
|
||||||
|
132 2 Q6 -0.32 -0.65 0.31 -0.22 187 FFFFFF True
|
||||||
|
133 0 Q4 -0.41 0.32 0.41 0.57 221 FFFFFF True
|
||||||
|
133 1 Q5 -0.2 -0.15 0.21 0.15 221 FFFFFF True
|
||||||
|
133 2 Q6 -0.32 -0.65 0.31 -0.22 221 FFFFFF True
|
||||||
|
134 0 Q4 -0.41 0.32 0.41 0.57 255 FFFFFF True
|
||||||
|
134 1 Q5 -0.2 -0.15 0.21 0.15 255 FFFFFF True
|
||||||
|
134 2 Q6 -0.32 -0.65 0.31 -0.22 254 FFFFFF True
|
||||||
|
135 0 Q4 -0.41 0.32 0.41 0.57 255 FFFFFF True
|
||||||
|
135 1 Q5 -0.2 -0.15 0.21 0.15 255 FFFFFF True
|
||||||
|
135 2 Q6 -0.32 -0.65 0.31 -0.22 249 FFFFFF True
|
||||||
|
135 3 Q1 -0.39 0.35 0.39 0.55 34 FFFFFF True
|
||||||
|
135 4 Q2 -0.19 -0.12 0.19 0.12 34 FFFFFF True
|
||||||
|
135 5 Q3 -0.3 -0.62 0.3 -0.25 34 FFFFFF True
|
||||||
|
136 0 Q4 -0.41 0.32 0.41 0.57 255 FFFFFF True
|
||||||
|
136 1 Q5 -0.2 -0.15 0.21 0.15 255 FFFFFF True
|
||||||
|
136 2 Q6 -0.32 -0.65 0.31 -0.22 243 FFFFFF True
|
||||||
|
136 3 Q1 -0.39 0.35 0.39 0.55 68 FFFFFF True
|
||||||
|
136 4 Q2 -0.19 -0.12 0.19 0.12 68 FFFFFF True
|
||||||
|
136 5 Q3 -0.3 -0.62 0.3 -0.25 68 FFFFFF True
|
||||||
|
137 0 Q4 -0.41 0.32 0.41 0.57 255 FFFFFF True
|
||||||
|
137 1 Q5 -0.2 -0.15 0.21 0.15 255 FFFFFF True
|
||||||
|
137 2 Q6 -0.32 -0.65 0.31 -0.22 237 FFFFFF True
|
||||||
|
137 3 Q1 -0.39 0.35 0.39 0.55 102 FFFFFF True
|
||||||
|
137 4 Q2 -0.19 -0.12 0.19 0.12 102 FFFFFF True
|
||||||
|
137 5 Q3 -0.3 -0.62 0.3 -0.25 102 FFFFFF True
|
||||||
|
138 0 Q4 -0.41 0.32 0.41 0.57 255 FFFFFF True
|
||||||
|
138 1 Q5 -0.2 -0.15 0.21 0.15 255 FFFFFF True
|
||||||
|
138 2 Q6 -0.32 -0.65 0.31 -0.22 232 FFFFFF True
|
||||||
|
138 3 Q1 -0.39 0.35 0.39 0.55 136 FFFFFF True
|
||||||
|
138 4 Q2 -0.19 -0.12 0.19 0.12 136 FFFFFF True
|
||||||
|
138 5 Q3 -0.3 -0.62 0.3 -0.25 136 FFFFFF True
|
||||||
|
139 0 Q4 -0.41 0.32 0.41 0.57 255 FFFFFF True
|
||||||
|
139 1 Q5 -0.2 -0.15 0.21 0.15 255 FFFFFF True
|
||||||
|
139 2 Q6 -0.32 -0.65 0.31 -0.22 226 FFFFFF True
|
||||||
|
139 3 Q1 -0.39 0.35 0.39 0.55 170 FFFFFF True
|
||||||
|
139 4 Q2 -0.19 -0.12 0.19 0.12 170 FFFFFF True
|
||||||
|
139 5 Q3 -0.3 -0.62 0.3 -0.25 170 FFFFFF True
|
||||||
|
140 0 Q4 -0.41 0.32 0.41 0.57 255 FFFFFF True
|
||||||
|
140 1 Q5 -0.2 -0.15 0.21 0.15 255 FFFFFF True
|
||||||
|
140 2 Q6 -0.32 -0.65 0.31 -0.22 220 FFFFFF True
|
||||||
|
140 3 Q1 -0.39 0.35 0.39 0.55 204 FFFFFF True
|
||||||
|
140 4 Q2 -0.19 -0.12 0.19 0.12 204 FFFFFF True
|
||||||
|
140 5 Q3 -0.3 -0.62 0.3 -0.25 204 FFFFFF True
|
||||||
|
141 0 Q4 -0.41 0.32 0.41 0.57 255 FFFFFF True
|
||||||
|
141 1 Q5 -0.2 -0.15 0.21 0.15 255 FFFFFF True
|
||||||
|
141 2 Q6 -0.32 -0.65 0.31 -0.22 214 FFFFFF True
|
||||||
|
141 3 Q1 -0.39 0.35 0.39 0.55 238 FFFFFF True
|
||||||
|
141 4 Q2 -0.19 -0.12 0.19 0.12 238 FFFFFF True
|
||||||
|
141 5 Q3 -0.3 -0.62 0.3 -0.25 238 FFFFFF True
|
||||||
|
142 0 Q4 -0.41 0.32 0.41 0.57 237 FFFFFF True
|
||||||
|
142 1 Q5 -0.2 -0.15 0.21 0.15 237 FFFFFF True
|
||||||
|
142 2 Q6 -0.32 -0.65 0.31 -0.22 197 FFFFFF True
|
||||||
|
142 3 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
142 4 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
142 5 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
143 0 Q4 -0.41 0.32 0.41 0.57 203 FFFFFF True
|
||||||
|
143 1 Q5 -0.2 -0.15 0.21 0.15 203 FFFFFF True
|
||||||
|
143 2 Q6 -0.32 -0.65 0.31 -0.22 169 FFFFFF True
|
||||||
|
143 3 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
143 4 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
143 5 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
144 0 Q4 -0.41 0.32 0.41 0.57 169 FFFFFF True
|
||||||
|
144 1 Q5 -0.2 -0.15 0.21 0.15 169 FFFFFF True
|
||||||
|
144 2 Q6 -0.32 -0.65 0.31 -0.22 141 FFFFFF True
|
||||||
|
144 3 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
144 4 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
144 5 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
145 0 Q4 -0.41 0.32 0.41 0.57 135 FFFFFF True
|
||||||
|
145 1 Q5 -0.2 -0.15 0.21 0.15 135 FFFFFF True
|
||||||
|
145 2 Q6 -0.32 -0.65 0.31 -0.22 113 FFFFFF True
|
||||||
|
145 3 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
145 4 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
145 5 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
146 0 Q4 -0.41 0.32 0.41 0.57 67 FFFFFF True
|
||||||
|
146 1 Q5 -0.2 -0.15 0.21 0.15 67 FFFFFF True
|
||||||
|
146 2 Q6 -0.32 -0.65 0.31 -0.22 56 FFFFFF True
|
||||||
|
146 3 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
146 4 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
146 5 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
147 0 Q4 -0.41 0.32 0.41 0.57 33 FFFFFF True
|
||||||
|
147 1 Q5 -0.2 -0.15 0.21 0.15 33 FFFFFF True
|
||||||
|
147 2 Q6 -0.32 -0.65 0.31 -0.22 28 FFFFFF True
|
||||||
|
147 3 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
147 4 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
147 5 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
149 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
149 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
149 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
150 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
150 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
150 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
151 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
151 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
151 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
152 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
152 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
152 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
154 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
154 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
154 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
155 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
155 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
155 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
156 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
156 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
156 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
157 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
157 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
157 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
158 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
158 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
158 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
159 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
159 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
159 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
160 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
160 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
160 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
161 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
161 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
161 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
162 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
162 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
162 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
163 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
163 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
163 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
164 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
164 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
164 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
165 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
165 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
165 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
166 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
166 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
166 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
167 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
167 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
167 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
168 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
168 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
168 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
169 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
169 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
169 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
170 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
170 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
170 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
171 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
171 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
171 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
172 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
172 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
172 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
173 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
173 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
173 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
174 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
174 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
174 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
175 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
175 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
175 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
176 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
176 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
176 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
177 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
177 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
177 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
178 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
178 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
178 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
179 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
179 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
179 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
180 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
180 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
180 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
181 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
181 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
181 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
182 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
182 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
182 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
183 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
183 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
183 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
184 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
184 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
184 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
185 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
185 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
185 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
186 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
186 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
186 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
187 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
187 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
187 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
188 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
188 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
188 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
189 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
189 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
189 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
190 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
190 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
190 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
191 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
191 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
191 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
192 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
192 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
192 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
193 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
193 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
193 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
195 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
195 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
195 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
196 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
196 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
196 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
197 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
197 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
197 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
198 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
198 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
198 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
199 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
199 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
199 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
200 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
200 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
200 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
201 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
201 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
201 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
202 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
202 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
202 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
203 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
203 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
203 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
204 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
204 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
204 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
205 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
205 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
205 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
206 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
206 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
206 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
207 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
207 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
207 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
208 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
208 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
208 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
209 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
209 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
209 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
210 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
210 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
210 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
211 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
211 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
211 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
212 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
212 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
212 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
213 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
213 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
213 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
214 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
214 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
214 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
215 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
215 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
215 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
216 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
216 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
216 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
217 0 Q1 -0.39 0.35 0.39 0.55 255 FFFFFF True
|
||||||
|
217 1 Q2 -0.19 -0.12 0.19 0.12 255 FFFFFF True
|
||||||
|
217 2 Q3 -0.3 -0.62 0.3 -0.25 255 FFFFFF True
|
||||||
|
219 0 Q1 -0.39 0.35 0.39 0.55 243 FFFFFF True
|
||||||
|
219 1 Q2 -0.19 -0.12 0.19 0.12 243 FFFFFF True
|
||||||
|
219 2 Q3 -0.3 -0.62 0.3 -0.25 243 FFFFFF True
|
||||||
|
220 0 Q1 -0.39 0.35 0.39 0.55 231 FFFFFF True
|
||||||
|
220 1 Q2 -0.19 -0.12 0.19 0.12 231 FFFFFF True
|
||||||
|
220 2 Q3 -0.3 -0.62 0.3 -0.25 231 FFFFFF True
|
||||||
|
221 0 Q1 -0.39 0.35 0.39 0.55 215 FFFFFF True
|
||||||
|
221 1 Q2 -0.19 -0.12 0.19 0.12 215 FFFFFF True
|
||||||
|
221 2 Q3 -0.3 -0.62 0.3 -0.25 215 FFFFFF True
|
||||||
|
223 0 Q1 -0.39 0.35 0.39 0.55 81 FFFFFF True
|
||||||
|
223 1 Q2 -0.19 -0.12 0.19 0.12 81 FFFFFF True
|
||||||
|
223 2 Q3 -0.3 -0.62 0.3 -0.25 81 FFFFFF True
|
||||||
|
224 0 Q1 -0.39 0.35 0.39 0.55 48 FFFFFF True
|
||||||
|
224 1 Q2 -0.19 -0.12 0.19 0.12 48 FFFFFF True
|
||||||
|
224 2 Q3 -0.3 -0.62 0.3 -0.25 48 FFFFFF True
|
||||||
|
225 0 Q1 -0.39 0.35 0.39 0.55 31 FFFFFF True
|
||||||
|
225 1 Q2 -0.19 -0.12 0.19 0.12 31 FFFFFF True
|
||||||
|
225 2 Q3 -0.3 -0.62 0.3 -0.25 31 FFFFFF True
|
||||||
|
226 0 Q1 -0.39 0.35 0.39 0.55 7 FFFFFF True
|
||||||
|
226 1 Q2 -0.19 -0.12 0.19 0.12 7 FFFFFF True
|
||||||
|
226 2 Q3 -0.3 -0.62 0.3 -0.25 7 FFFFFF True
|
||||||
252
docs/re/ui-splash-draw-pass.md
Normal file
252
docs/re/ui-splash-draw-pass.md
Normal file
@@ -0,0 +1,252 @@
|
|||||||
|
# The splash draw pass — there is no post-process, and the fade is in the vertex stream
|
||||||
|
|
||||||
|
**Status: ✅ decoded (GPU state) for the pass structure; ✅ measured for the ramp.**
|
||||||
|
2026-09-01. Instrument: ⟨capture⟩ — the real game in Xenia Canary, per-draw, with
|
||||||
|
the render-target/resolve/constant fields added to the draw logger for this
|
||||||
|
question. Nothing here rests on a renderer of ours.
|
||||||
|
|
||||||
|
Asked by [`../agents/PLAYTEST-2026-09-01.md`](../agents/PLAYTEST-2026-09-01.md)
|
||||||
|
finding 4, in the order the human set: *is there a pass, what is it, where do its
|
||||||
|
parameters come from, and only then what curve.*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## The four answers, shortest first
|
||||||
|
|
||||||
|
1. **Is there a post-process pass at all? NO.** Not a blur, not a bloom, not a
|
||||||
|
fade quad over a resolved image, not a tone curve, not a resolve-and-resample.
|
||||||
|
One pass, one render target, one texture.
|
||||||
|
2. **What is it, then?** Per splash frame: a full-screen **replace** triangle
|
||||||
|
(the clear), a full-screen **black quad** through the normal blend, **one
|
||||||
|
batched sprite draw** carrying every visible splash element, and the two
|
||||||
|
presentation resolves. Three pixel shaders in total, all trivial.
|
||||||
|
3. **Where do the parameters come from?** **Not** the constant banks — the splash
|
||||||
|
pixel shaders read **zero** float constants, on all 1 048 draws. **Not**
|
||||||
|
immediates. The fade is the **per-vertex `k_8_8_8_8` colour**, in a vertex
|
||||||
|
buffer the guest rewrites every frame.
|
||||||
|
4. **The curve** falls out of 3 and is not fitted: alpha rises in integer steps
|
||||||
|
of **exactly 34/255 per presented frame**, clamped at 255.
|
||||||
|
|
||||||
|
**And the composite the game performs is ordinary source-over.** Read the shader
|
||||||
|
below before concluding otherwise from the blend register: the blend is
|
||||||
|
`ONE / ONE_MINUS_SRC_ALPHA`, which *looks* like a premultiplied pipeline, and it
|
||||||
|
is — because the **shader premultiplies**. The two together are algebraically
|
||||||
|
`src·α + dst·(1−α)`. A renderer compositing these sprites with straight
|
||||||
|
alpha-over is using the right equation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1 — the evidence that there is no second pass
|
||||||
|
|
||||||
|
[`data/splash-draw-pass-census.txt`](data/splash-draw-pass-census.txt), over all
|
||||||
|
**1 048 draws of frames 4…226**, which is both splashes end to end.
|
||||||
|
|
||||||
|
| what a post-process would show | what the census shows |
|
||||||
|
|---|---|
|
||||||
|
| a second render target | `rt0=[tile=0 fmt=0 exp=0]` on **1 048 / 1 048** draws — one EDRAM tile, one format, throughout |
|
||||||
|
| a reduced-resolution pass | `pitch=1280 msaa=0` on **1 048 / 1 048** |
|
||||||
|
| an extra pass' draws | `mode=` is only ever `4` (kColorDepth, 628) or `6` (kCopy, 420). Nothing else |
|
||||||
|
| resolve-and-resample | resolve destinations are only `0x14570000` and `0x14910000`, **210 each** — one pair per frame, the alternating front buffers. **No texture base anywhere in the capture equals a resolve destination** |
|
||||||
|
| a blur kernel sampling a target | the **only** texture bound in the whole splash region is `0x11A50000 1280×768 fmt=6`, the sprite page |
|
||||||
|
|
||||||
|
⚠️ **The trap this census is written to avoid.** Censusing the *whole* 600-frame
|
||||||
|
log finds six `640×360` textures and three `1280×720` ones, sampled ~330 times
|
||||||
|
each — which reads exactly like a half-resolution blur chain. They are the
|
||||||
|
attract **movie's** chroma and luma planes, triple-buffered, and they first
|
||||||
|
appear at frame 234, after both splashes are gone. Restricting to frames 4…226 is
|
||||||
|
what separates them; a census that did not would have "found" a post-process that
|
||||||
|
is not there.
|
||||||
|
|
||||||
|
The `tex[base=0x10000000 1×1 fmt=26]` on the resolve records is the previous
|
||||||
|
draw's binding still in the register file. A resolve does not sample it.
|
||||||
|
|
||||||
|
## 2 — what the pass actually is
|
||||||
|
|
||||||
|
Three pixel shaders, dumped from the running game with `--dump_shaders` and
|
||||||
|
committed at [`data/shaders/`](data/shaders/):
|
||||||
|
|
||||||
|
| ps hash | draws | blend | what it is |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `0x2E372EA28CC404B7` | 210 (mode 4) | `0x00010001` = `ONE / ZERO` | the clear. A `prim=8 indices=3` triangle at **pixel** coordinates `(-0.5,-0.5)…(1279.5,719.5)` — the whole screen, written unconditionally |
|
||||||
|
| `0x5773DC18083C4C20` | 210 (mode 4) | `0x07010701` = `ONE / ONE_MINUS_SRC_ALPHA` | the backdrop. A four-vertex NDC quad `(-1,-1)…(1,1)`, vertex colour `FF000000` — opaque black, laid down through the blend rather than as a clear |
|
||||||
|
| `0xE59B2B3DA4AA9008` | 208 (mode 4) | `0x07010701` | **the splash sprites.** One draw per frame, batched: `indices=` 4, 8, 12 or 24, i.e. one to six quads in a single submission |
|
||||||
|
|
||||||
|
```
|
||||||
|
; shader_E59B2B3DA4AA9008.ucode.frag — the splash sprite shader, in full
|
||||||
|
tfetch2D r2, r1.xy, tf0 ; r2 = texture sample (straight alpha)
|
||||||
|
mul r1.___w, r2.wwww, r0.wwww ; A = tex.a * vcol.a
|
||||||
|
mul r0.xyz_, r2.xyzz, r0.xyzz ; rgb = tex.rgb * vcol.rgb
|
||||||
|
mul r1.xyz_, r0.xyzz, r1.wwww ; rgb = rgb * A <-- PREMULTIPLY
|
||||||
|
max oC0, r1, r1 ; oC0 = (rgb*A, A)
|
||||||
|
```
|
||||||
|
|
||||||
|
With `src=ONE, dst=ONE_MINUS_SRC_ALPHA` that composites to
|
||||||
|
|
||||||
|
```
|
||||||
|
dst' = tex.rgb·vcol.rgb·A + dst·(1 − A), A = tex.a · vcol.a
|
||||||
|
```
|
||||||
|
|
||||||
|
which **is** source-over. The backdrop shader is the same premultiply with no
|
||||||
|
texture (`oC0 = (vcol.rgb·vcol.a, vcol.a)`).
|
||||||
|
|
||||||
|
📌 **So the "more pronounced fade/blur" the play-test reports is not a blend-mode
|
||||||
|
difference and not a post-process.** Both are now excluded by measurement. What
|
||||||
|
is left is the alpha values themselves and the set of quads submitted — and the
|
||||||
|
capture gives both, below.
|
||||||
|
|
||||||
|
## 3 — where the parameters come from
|
||||||
|
|
||||||
|
`ps_c[n=0]` on **1 048 / 1 048** splash draws. The pixel shaders declare **no
|
||||||
|
float constants at all** — this is read off each shader's own `float_bitmap`, the
|
||||||
|
same one the backend uploads from, so it is the shader's dependency set and not a
|
||||||
|
window that might have missed one.
|
||||||
|
|
||||||
|
That eliminates the constant banks. It also eliminates immediates in the command
|
||||||
|
stream: the only thing that differs between two consecutive splash draws is the
|
||||||
|
**vertex buffer**, and `vb=` is a different address every frame (`0x14D50550`,
|
||||||
|
`0x14D90790`, `0x14DB0950`, …) — a per-frame ring the guest writes into.
|
||||||
|
|
||||||
|
**The fade parameter is per-vertex colour, format `k_8_8_8_8` at attribute offset
|
||||||
|
16, in a vertex buffer rebuilt by guest code every frame.** Every vertex of a
|
||||||
|
given quad carries the same colour in every frame observed (the
|
||||||
|
`uniform_colour` column of the timeline is `True` throughout), so it is a
|
||||||
|
per-element scalar, not a gradient.
|
||||||
|
|
||||||
|
## 4 — the curve, which falls out of 3
|
||||||
|
|
||||||
|
[`data/splash-quad-timeline.txt`](data/splash-quad-timeline.txt) — every quad of
|
||||||
|
both splashes, per frame, straight off the vertex stream: NDC rect, alpha, rgb.
|
||||||
|
|
||||||
|
Eight distinct quads. Splash **A** (frames 4…123) is one logo plus one companion;
|
||||||
|
splash **B** (frames 127…226) is three logos plus three companions, the
|
||||||
|
companions being the same three rects scaled slightly larger.
|
||||||
|
|
||||||
|
| quad | NDC rect | frames | n |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Q7 | x −0.530…+0.540, y −0.130…+0.120 | 4…14 | 8 |
|
||||||
|
| Q0 | x −0.520…+0.520, y −0.100…+0.080 | 7…123 | 111 |
|
||||||
|
| Q4 | x −0.410…+0.410, y +0.320…+0.570 | 127…147 | 21 |
|
||||||
|
| Q5 | x −0.200…+0.210, y −0.150…+0.150 | 127…147 | 21 |
|
||||||
|
| Q6 | x −0.320…+0.310, y −0.650…−0.220 | 127…147 | 21 |
|
||||||
|
| Q1 | x −0.390…+0.390, y +0.350…+0.550 | 135…226 | 87 |
|
||||||
|
| Q2 | x −0.190…+0.190, y −0.120…+0.120 | 135…226 | 87 |
|
||||||
|
| Q3 | x −0.300…+0.300, y −0.620…−0.250 | 135…226 | 87 |
|
||||||
|
|
||||||
|
**The ramp, splash B, on consecutive frames with no gaps in the run:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Q4, Q5 17 51 85 119 153 187 221 255 steps: 34 34 34 34 34 34 34
|
||||||
|
Q6 17 51 85 119 153 187 221 254 steps: 34 34 34 34 34 34 33
|
||||||
|
Q1,Q2,Q3 34 68 102 136 170 204 238 255 steps: 34 34 34 34 34 34 17*
|
||||||
|
(*238+34 = 272, clamped to 255)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Alpha steps by exactly 34 per presented frame**, on every one of the six quads,
|
||||||
|
until it clamps. 34 = 255/7.5, so a fade-in is **8 frames**, and it is an integer
|
||||||
|
recurrence, not a sampled continuous curve.
|
||||||
|
|
||||||
|
📌 **This number is not new and is not claimed as a finding.** It is exactly the
|
||||||
|
already-✅ law in [`ui-keyframe-time-unit.md`](ui-keyframe-time-unit.md) — *the
|
||||||
|
ramp is linear, the clock advances **2 time units per submitted frame**, and a
|
||||||
|
declared 15-unit fade lands on `round(255·k/15)`* — since 2 units/frame ×
|
||||||
|
(255/15 per unit) = **34 per frame**. What this capture adds is the **route**: the
|
||||||
|
34 is not applied by a shader, a constant or a tint register. The guest computes
|
||||||
|
it on the CPU and writes it into the vertex colour, and that is the only place it
|
||||||
|
exists on the GPU side. The two families' first samples differ (17 = one time
|
||||||
|
unit for Q4–Q6, 34 = two for Q1–Q3), so their clocks are offset by one unit.
|
||||||
|
|
||||||
|
⚠️ **This is stated in frames and quoted as counts and differences, deliberately.**
|
||||||
|
[`../agents/TEMPORAL-VERIFICATION.md`](../agents/TEMPORAL-VERIFICATION.md) — and
|
||||||
|
four withdrawn claims — say not to put a wall clock on this. I am **not**
|
||||||
|
converting 34/frame into 34/(1/60 s): whether a guest animation tick is a
|
||||||
|
presented frame is exactly the open Q1, and it is not settled by this capture.
|
||||||
|
What is settled is the **step size and the step count**, which have no phase.
|
||||||
|
|
||||||
|
The frame counter has gaps where the swap count advanced twice between two draw
|
||||||
|
batches — `(147,149) (152,154) (193,195) (217,219) (221,223)` for Q1–Q3, and six
|
||||||
|
for Q0/Q7. **None of them falls inside a rising run**, which is why the step is
|
||||||
|
quotable at all; Q0's and Q7's rises *do* straddle gaps, so **splash A's step is
|
||||||
|
NOT established by this capture** and is not claimed here.
|
||||||
|
|
||||||
|
### Two things in the timeline that a fitted curve would never produce
|
||||||
|
|
||||||
|
* **Q6 leaves the plateau while Q4 and Q5 sit on it.** Q4/Q5 hold 255 for seven
|
||||||
|
frames; Q6 runs `254 249 243 237 232 226 220 214` over the same frames — its
|
||||||
|
own decay, about −5.6/frame, an order of magnitude gentler than the ±34 ramp.
|
||||||
|
Three structurally identical siblings are **not** interchangeable.
|
||||||
|
* **Q0's fade-out is the same anomaly this corpus already has open.** Its drops
|
||||||
|
are `1 5 12 22 34 33 33 34 33 33` — a −34/frame tail with an eased shoulder,
|
||||||
|
which is the shape `ui-keyframe-time-unit.md` records as `1, 11, 6, 22, 34, 33,
|
||||||
|
17, 33, 33, 17, 25, 8, 8` and cannot explain. Reproduced here on an independent
|
||||||
|
capture, so it is a property of the game and not of that run.
|
||||||
|
* **The companions lead the logos by eight frames and leave 79 frames early.**
|
||||||
|
Q4/Q5/Q6 run 127…147; Q1/Q2/Q3 run 135…226. They overlap for 13 frames and then
|
||||||
|
the companions are gone for the whole of the logos' hold.
|
||||||
|
|
||||||
|
## What this changes for the port
|
||||||
|
|
||||||
|
* Composite the splash sprites with **source-over**. The equation is confirmed
|
||||||
|
from the shader, not assumed.
|
||||||
|
* There is **no blur to add** and none to remove. If a screenshot comparison
|
||||||
|
wants more softness, that softness is in the **texture** or in **which quads are
|
||||||
|
drawn**, not in a pass.
|
||||||
|
* The alpha ramp is **integer, +34 per frame, clamped at 255** — not an eased
|
||||||
|
curve, and not the declared 80-unit fade-in (see the refutation below).
|
||||||
|
* Splash B draws **six** quads, not three. If an export drops the three
|
||||||
|
companions, the game will look softer than the port at exactly the moment the
|
||||||
|
play-test describes.
|
||||||
|
|
||||||
|
## Refutation attempt on another agent's claim — recorded per the adversarial duty
|
||||||
|
|
||||||
|
**Target:** `REFUTED.md`'s re-opened pair, *"`rest()` for a plateau-less element
|
||||||
|
should be the last keyframe"*, whose sibling argument says a rule which *"makes
|
||||||
|
`palogo_anima_eff` alone invisible while `gamearts_eff` and `seta_eff` stay lit"*
|
||||||
|
is wrong because the three are structurally identical. Both legs of that pair ran
|
||||||
|
through our renderer, which is why the register re-opened it, and its stated
|
||||||
|
settling condition is *"a draw capture of the developer splash naming which of the
|
||||||
|
three glows is submitted at rest."* This capture is that.
|
||||||
|
|
||||||
|
**Result: the premise SURVIVES in part and FAILS in part, and the failure is the
|
||||||
|
interesting half.**
|
||||||
|
|
||||||
|
* ✅ **All three companions are submitted, in every frame they exist.** Q4, Q5 and
|
||||||
|
Q6 appear together in all 21 frames, 127…147. None is ever suppressed. A rule
|
||||||
|
that renders one of the three invisible does not describe this draw stream.
|
||||||
|
* ❌ **But "structurally identical, therefore identical alpha" is false.** Q6
|
||||||
|
departs the plateau on its own decay while Q4 and Q5 hold 255. The one-byte
|
||||||
|
difference (`a=212` vs `a=255` at `t=45`) that the sibling argument treated as
|
||||||
|
noise **is drawn**. So the symmetry premise the argument rests on is refuted by
|
||||||
|
the oracle even though its conclusion about suppression happens to hold.
|
||||||
|
|
||||||
|
⚠️ **Reach.** This is one capture of the boot splashes, so it is `⟨capture⟩` and
|
||||||
|
generalises to *this* boot. The pass structure (§1, §2, §3) is a property of the
|
||||||
|
shaders and the register state and I would expect it to hold for every screen
|
||||||
|
that uses the same three shaders — but that is a prediction, not a measurement,
|
||||||
|
and the way to test it is the same census on the title and the menu.
|
||||||
|
|
||||||
|
## What is NOT settled here
|
||||||
|
|
||||||
|
* **Splash A's step size** — its rising run straddles dropped frames.
|
||||||
|
* **Whether one presented frame is one guest animation tick.** Q1 is untouched.
|
||||||
|
* **Which disc field produces 34.** The ramp is measured in the vertex stream;
|
||||||
|
where the guest computes it is not decoded, and the +34 recurrence is not the
|
||||||
|
declared 80-unit fade-in — see `ui-keyframe-time-unit.md`, whose *"the declared
|
||||||
|
timeline reproduces the captured splash"* entry is 🟡 and is not re-derived by
|
||||||
|
this page.
|
||||||
|
* **The plate-late finding (play-test 3).** Not touched this iteration.
|
||||||
|
|
||||||
|
## How to reproduce
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. the logger (canary sylpheed-re d90d14e02, already built)
|
||||||
|
ln -sfn /canary /work/xenia-canary
|
||||||
|
cmake --build /sylph-home/re/canary-build --config Release --parallel 4 --target xenia_canary
|
||||||
|
rm /work/xenia-canary
|
||||||
|
|
||||||
|
# 2. the capture — GRACE=1 is what makes it catch the splashes at all
|
||||||
|
GRACE=1 NOTAP=1 ARM=early FRAMES=600 MAXDRAWS=400000 \
|
||||||
|
tools/re-capture/ui_draw_capture.sh 420 /sylph-home/re/splashdraw
|
||||||
|
|
||||||
|
# 3. the shaders
|
||||||
|
run-canary --dump_shaders=/some/dir # 60 s of boot is enough
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user