Lerp node with easing for animations #246

Closed
opened 2026-09-27 14:30:24 +02:00 by meleki · 1 comment
Owner

Wunsch

Beim Gold-Drop im Projekt „Garden of Sacrifices“ (cbbf160bb7e8) ist jede Interpolation aus Subtract → Multiply → Add zusammengesetzt, pro Achse und Phase, dazu die Ease-Kurven aus weiteren Rechen-Nodes. Das waren gut 30 der 98 Nodes im Behavior Gold Pickup. Ein eigener Node macht solche Animationen kurz und lesbar.

Entwurf (vom User freigegeben, 2026-09-27: „lerp node bauen“)

  • Node Lerp (Kategorie data): Eingänge a (Standard 0), b (Standard 1), t (Standard 0), Ausgang result.
  • Einstellung Ease: Linear, Ease in, Ease out, Ease in-out. Die Kurven sind quadratisch (Ease in = t², Ease out = 1 - (1 - t)²).
  • t wird auf 0…1 begrenzt. Ein Zähler, der im letzten Frame über 1 hinausschießt, landet damit genau auf b und nicht dahinter. Wer extrapolieren will, rechnet weiter mit den Rechen-Nodes.
  • Danach wird Gold Pickup mit Lerp schlanker neu aufgebaut und nach Ablauf angeordnet (Gruppen, Notizen, Getter pro Spur). Das Verhalten bleibt gleich.
## Wunsch Beim Gold-Drop im Projekt „Garden of Sacrifices“ (`cbbf160bb7e8`) ist jede Interpolation aus `Subtract` → `Multiply` → `Add` zusammengesetzt, pro Achse und Phase, dazu die Ease-Kurven aus weiteren Rechen-Nodes. Das waren gut 30 der 98 Nodes im Behavior `Gold Pickup`. Ein eigener Node macht solche Animationen kurz und lesbar. ## Entwurf (vom User freigegeben, 2026-09-27: „lerp node bauen“) - **Node `Lerp`** (Kategorie data): Eingänge `a` (Standard 0), `b` (Standard 1), `t` (Standard 0), Ausgang `result`. - **Einstellung `Ease`:** Linear, Ease in, Ease out, Ease in-out. Die Kurven sind quadratisch (Ease in = t², Ease out = 1 - (1 - t)²). - **`t` wird auf 0…1 begrenzt.** Ein Zähler, der im letzten Frame über 1 hinausschießt, landet damit genau auf `b` und nicht dahinter. Wer extrapolieren will, rechnet weiter mit den Rechen-Nodes. - Danach wird `Gold Pickup` mit `Lerp` schlanker neu aufgebaut und nach Ablauf angeordnet (Gruppen, Notizen, Getter pro Spur). Das Verhalten bleibt gleich.
Author
Owner

Umgesetzt in 320d3e2.

Der Node

  • Eingänge a (Standard 0), b (1), t (0), Ausgang result, Kategorie data neben Clamp.
  • Einstellung Ease: Linear, In, Out, In-out, alle quadratisch. Die Zeile zeigt z. B. Ease: Out.
  • t wird auf 0…1 begrenzt. Ein Timer, der im letzten Frame über 1 hinausschießt, landet genau auf b.
  • Code: src/core/graph/nodes/data/Lerp.ts, registriert in nodes/index.ts.

Erster Einsatz: „Gold Pickup“ in Garden of Sacrifices (Revision 5179). Sprung und Flug laufen dort über 4 Lerps, das hat 12 Rechen-Nodes gespart. Alter und neuer Graph haben sich headless mit gleichem Zufall und Laufweg über 400 Frames nicht unterschieden (7 Durchläufe). Eine verbogene Ease-Kurve fällt dabei auf.

Tests

  • ./check.sh: 178 Dateien, 2583 Tests, CHECK EXIT 0.
  • 7 neue Fälle im Node-Katalog. Gegenprobe: ohne die Begrenzung von t fallen 2.
  • e2e 6z-iii (2 Checks): „lerp“ in der Palette legt einen linearen Lerp an, „Out“ im Inspector landet im Node und in der Zeile. GM_STEPS=1-6: 267 Checks grün.
  • Check-Summe 1459 in README und Wiki, nur gerechnet.

Wiki: Behaviors (Eintrag zu Lerp), Development (Summe), Commit 7c8d029.

Umgesetzt in 320d3e2. **Der Node** - Eingänge `a` (Standard 0), `b` (1), `t` (0), Ausgang `result`, Kategorie *data* neben `Clamp`. - Einstellung *Ease*: Linear, In, Out, In-out, alle quadratisch. Die Zeile zeigt z. B. `Ease: Out`. - `t` wird auf 0…1 begrenzt. Ein Timer, der im letzten Frame über 1 hinausschießt, landet genau auf `b`. - Code: `src/core/graph/nodes/data/Lerp.ts`, registriert in `nodes/index.ts`. **Erster Einsatz:** „Gold Pickup“ in *Garden of Sacrifices* (Revision 5179). Sprung und Flug laufen dort über 4 Lerps, das hat 12 Rechen-Nodes gespart. Alter und neuer Graph haben sich headless mit gleichem Zufall und Laufweg über 400 Frames nicht unterschieden (7 Durchläufe). Eine verbogene Ease-Kurve fällt dabei auf. **Tests** - `./check.sh`: 178 Dateien, 2583 Tests, `CHECK EXIT 0`. - 7 neue Fälle im Node-Katalog. Gegenprobe: ohne die Begrenzung von `t` fallen 2. - e2e 6z-iii (2 Checks): „lerp“ in der Palette legt einen linearen Lerp an, „Out“ im Inspector landet im Node und in der Zeile. `GM_STEPS=1-6`: 267 Checks grün. - Check-Summe 1459 in README und Wiki, nur gerechnet. **Wiki:** *Behaviors* (Eintrag zu `Lerp`), *Development* (Summe), Commit 7c8d029.
admin added this to the Development project 2026-09-27 22:17:06 +02:00
admin moved this to Done in Development on 2026-09-27 22:17:30 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#246