docs: Messwerte der Browserprüfung im Entwurf festhalten

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 <noreply@anthropic.com>
This commit is contained in:
knsoandClaude Opus 5 committed 2026-09-18 02:40:17 +02:00
1 parent 01cb63e7f1
commit c8f1832eae
1 file changed
+64
@@ -288,6 +288,70 @@ node tools/assets/weapons.mjs <Ordner WeaponsPack> -> 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.