From c8f1832eaef49026b00c099dcb1f3ede99cf0212 Mon Sep 17 00:00:00 2001 From: Kenso Grimm Date: Fri, 18 Sep 2026 02:40:17 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20Messwerte=20der=20Browserpr=C3=BCfung?= =?UTF-8?q?=20im=20Entwurf=20festhalten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dateigrößen, Maßstab und Dummy-Größe, Griffwerte, Schleifennaht je Dummy, Bildzeit mit Messverfahren, Draw Calls und Dreiecke, Befund zu Maske und Normalmap sowie die geprüften Durchdringungen an Kopf und Gewehr. Co-Authored-By: Claude Opus 5 --- .../specs/2026-09-17-animationen-design.md | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/docs/superpowers/specs/2026-09-17-animationen-design.md b/docs/superpowers/specs/2026-09-17-animationen-design.md index 9040418..add7bd2 100644 --- a/docs/superpowers/specs/2026-09-17-animationen-design.md +++ b/docs/superpowers/specs/2026-09-17-animationen-design.md @@ -288,6 +288,70 @@ node tools/assets/weapons.mjs -> public/models/weapons/ - Maskenbelegung auf Sicht: Das Holz der AK47 glänzt nicht metallisch. - **Gesamt:** `npm test` grün, `npm run build` baut beide Seiten, `index.html` lädt weiter wie bisher. +## Gemessen im Browser (2026-09-18) + +Schlussprüfung (Plan-Task 10): `animationen.html` über den Dev-Server geladen, `window.__showroom` genutzt. +Die Browser-Pane lief dabei verborgen, `requestAnimationFrame` also gedrosselt — Bildtakt und Bildzeit wurden +deshalb von Hand über `loop(time)` angetrieben statt über echtes `requestAnimationFrame` (Einzelheiten im +Task-Bericht). + +- **Dateigrößen** (`fs.statSync`, dezimale MB): `weapons-mocap.glb` 1,66 MB. Waffen: Pistole 0,16 MB, AK47 + 0,23 MB, M4 0,21 MB, 870 Shotgun 0,12 MB, L96 0,14 MB. +- **Maßstab und Dummy-Größe:** `figureScale` (Weltmaßstab von `player.playerModel`, wie in Task 8) ist 0,4921. + Die Mannequin-Ruhepose ist 1,83 m hoch (Befund oben); Dummies und Spielfigur sind damit gleich groß, je + 1,83 × 0,4921 ≈ 0,90 m. +- **Hand je Clip:** An allen acht Waffen-Dummies bestätigt: `hand_r`, wie in `DUMMIES` hinterlegt + (`hand: "r"`). Keine Änderung nötig. +- **Griffwerte je Waffe** (aus `WEAPONS`, unverändert seit Task 9): Pistole, AK47, M4, 870 Shotgun + `position [0, 0.09, 0]`, `rotation [0, 0, 90]`; L96 gleiche Position, `rotation [0, 0, -90]`. +- **Schleifennaht je Dummy:** Naht (Winkel zwischen der Pose 1/30 s vor und 1/30 s nach dem Rücksprung) gegen + größten Zweibild-Schritt im Clipinneren (Abstand 2/30 s), in Grad. Bei allen 13 Dummies ist die Naht + kleiner als der größte Schritt: + + | Reihe, Platz | Clip | Waffe | Naht | Größter Schritt | + |---|---|---|---|---| + | 1, 1 | `idle_loadGun-Hand_tk01` | Pistole | 0,9° | 46,2° | + | 1, 2 | `idle_loadGun-Hand_tk02` | Pistole | 0,9° | 49,4° | + | 1, 3 | `taunt_shootSelfInHead_tk01` | Pistole | 0,7° | 39,5° | + | 1, 4 | `taunt_shootSelfInHead_tk02` | Pistole | 0,7° | 44,7° | + | 1, 5 | `idle_loadGun-Rifle_tk04` | AK47 | 0,8° | 55,0° | + | 1, 6 | `idle_loadGun-Rifle_tk05` | M4 | 0,6° | 30,4° | + | 1, 7 | `idle_loadGun-Rifle_tk04` | 870 Shotgun | 0,8° | 55,0° | + | 1, 8 | `idle_loadGun-Rifle_tk05` | L96 | 0,6° | 30,4° | + | 2, 1 | `stabTwist_Knife_tk01` | — | 0,9° | 58,5° | + | 2, 2 | `stabTwist_Knife_tk02` | — | 0,8° | 61,3° | + | 2, 3 | `leftHandThrow_grenade_tk01` | — | 1,0° | 51,3° | + | 2, 4 | `leftHandThrow_grenade_tk02` | — | 0,6° | 59,7° | + | 2, 5 | `hunter_bowArrow_tk01` | — | 1,2° | 40,7° | + + Gleiche Clips (Reihe 1, Platz 5/7 und 6/8) ergeben gleiche Werte, weil die Naht eine Eigenschaft des Clips + ist, nicht der Waffe. +- **Bildzeit:** Gemessen als Zeit eines vollständig gezeichneten Bildes (CPU- und GPU-Zeit zusammen), weil die + `requestAnimationFrame`-Kadenz aus dem Plan in der verborgenen Pane nicht läuft: je Bild `performance.now()` + vor `loop(time)`, danach `gl.finish()` (erzwingt das Warten auf die GPU), `performance.now()` danach. Über + 60 so angetriebene Bilder mit allen 13 Mixern aktiv: Median 2,9 ms, Maximum 3,5 ms — weit unter den 20 ms + Richtwert aus dem Plan. Dabei `renderer.info.render`: 45 Draw Calls, 209 145 Dreiecke (deckungsgleich mit + der Messung aus Task 8). +- **Maske und Normalmap:** Beim erneuten Betrachten der AK47 in dieser Prüfung kein Hinweis auf vertauschte + Kanäle oder eine flache Normalmap. Deckt sich mit dem in „Griff einpassen" festgehaltenen, dort rechnerisch + belegten Befund (Holz Rauheit ≈ 0,85 / Metallwert ≈ 0,22, Receiver Rauheit ≈ 0,97 / Metallwert ≈ 0,69); hier + nur gegengeprüft, nicht neu vermessen. +- **Durchdringungen:** + - **Taunt am Kopf:** Bei beiden Take von `taunt_shootSelfInHead` liegt die Pistole sichtbar an der + Kopfseite/Schläfe an, in zwei Kamerawinkeln geprüft. Kleinster gemessener Abstand zwischen + Waffenursprung und dem `Head`-Knochen: 4,3 cm (Take 2, bei t = 2,48 s im Clip). Die in „Fehlerfälle und + Risiken" vermerkte Möglichkeit „Pistole kann in den Kopf ragen" bestätigt sich als sichtbarer Kontakt. + - **Linke Hand am Gewehr:** Die AK47 liegt erkennbar im beidhändigen Griff (rechte Hand hinten am + Griffstück). Ein unverdeckter Blick auf die linke Hand gelang in dieser Prüfung nicht, die Kamera folgt + der Spielfigur und ließ sich nicht frei zur Seite stellen. Gemessen: kleinster Abstand zwischen + `hand_l` und dem Waffenursprung 3,7 cm (bei t = 2,25 s im Clip `idle_loadGun-Rifle_tk04`) — die Hand ist + damit sehr nah am Gewehrkörper; eine sichtbare Durchdringung wurde nicht geprüft. +- **Spiel:** `http://localhost:5180/` neu geladen, Welt stand nach wenigen Sekunden. Einzige Konsolenfehler: + viermal `WrongDocumentError: pointer lock` (bekanntes Artefakt der verborgenen Pane, schon in Task 8/9 + dokumentiert) und einmal `net::ERR_BLOCKED_BY_CLIENT`. Der Netzwerk-Mitschnitt zeigt für alle eigenen + Ressourcen der Seite (Skripte, Texturen, Modelle, Chunk-Daten) Status 200; das blockierte Element gehört zu + keiner davon. Kein neuer, dieser Änderung zuzuordnender Fehler. + ## Fehlerfälle und Risiken - **Maskenbelegung falsch:** Glänzt Holz metallisch oder wirkt Metall stumpf wie Kunststoff, werden Grau und Alpha getauscht und neu gebaut. Die Browserprüfung oben fängt das.