Texture size am Vertex output #409

Closed
opened 2026-10-11 18:22:36 +02:00 by meleki · 1 comment
Owner

Wunsch aus dem Video shader: FadeIn soll Alpha und Scale steuern (0 = Scale 1,2, 1 = Scale 1,0), und das bei jeder Bild- und Sprite-Größe.

Der Vertex output zählt seinen Versatz in Pixeln des Bildes. Für einen Scale um die Mitte braucht man also die Bildgröße an der Ecke: x = (u - 0.5) * width * (scale - 1). Bisher ist Texture size dort gesperrt ("Not available per corner"), weil der Node als "pro Pixel" gilt. Die Größe ist aber für das ganze Bild gleich.

Plan

  • Texture size darf den Vertex output speisen. An der Ecke liefert der Node dieselbe Bildgröße, in der der Vertex output zählt, also genau die Zahl, die er im Fragment hat.
  • Gefüttert mit einem Pass-Bild bleibt er an der Ecke gesperrt, wie der Pass selbst.
  • Wo keine Ecke wandert (9-Slice, Feld-Shader, Kamera-Shader), ändert sich nichts.
  • Unit-Test, e2e-Check in 28, Wiki Shaders.
Wunsch aus dem *Video shader*: `FadeIn` soll Alpha und Scale steuern (0 = Scale 1,2, 1 = Scale 1,0), und das bei jeder Bild- und Sprite-Größe. Der Vertex output zählt seinen Versatz in Pixeln des Bildes. Für einen Scale um die Mitte braucht man also die Bildgröße an der Ecke: `x = (u - 0.5) * width * (scale - 1)`. Bisher ist `Texture size` dort gesperrt ("Not available per corner"), weil der Node als "pro Pixel" gilt. Die Größe ist aber für das ganze Bild gleich. **Plan** - `Texture size` darf den Vertex output speisen. An der Ecke liefert der Node dieselbe Bildgröße, in der der Vertex output zählt, also genau die Zahl, die er im Fragment hat. - Gefüttert mit einem Pass-Bild bleibt er an der Ecke gesperrt, wie der Pass selbst. - Wo keine Ecke wandert (9-Slice, Feld-Shader, Kamera-Shader), ändert sich nichts. - Unit-Test, e2e-Check in 28, Wiki *Shaders*.
Author
Owner

Umgesetzt in 8118b80, Wiki 4c5823a (Shaders: Texture size in der Liste der Nodes am Vertex output, neuer Abschnitt „Scaling about the middle“).

Was sich ändert

  • An einer Ecke liefert Texture size die Bildgröße, in der der Vertex output seine Pixel zählt. Das ist dieselbe Zahl wie im Fragment. Weil der Versatz wieder durch diese Größe geteilt wird, stimmt ein Scale bei jeder Bild- und Sprite-Größe.
  • Gesperrt bleibt Texture size am Vertex output, wenn ein Pass-Bild hineingeht. Ein Pass hat an der Ecke kein Bild.
  • 9-Slice, Feld- und Kamera-Shader verschieben keine Ecken, dort ändert sich nichts.

Video shader im Projekt cbbf160bb7e8

Gebaut am 2026-10-11 (Revision 21158 → 21159):

  • Mix(1.2, 1.0, FadeIn) → Scale, minus 1 → Zuwachs
  • je Achse (u - 0.5) · width · Zuwachs bzw. (v - 0.5) · height · Zuwachs → Vertex output x/y, Subdivisions 1
  • Texture alpha · FadeIn → Output.alpha

Mit dem echten Compiler geprüft, ohne Meldung. Im Browser angesehen habe ich den Shader nicht. Zugewiesen ist er noch keinem Sprite.

Tests

  • Unit shader-vertex: Der Node wird an der Ecke zu uPictureSize, der Output liest weiter textureSize. shader-passes: Ein Pass-Bild in Texture size am Vertex output wird abgelehnt. Mit dem alten perPixel wird der neue Test rot.
  • e2e 28l-iv: width · 0,5 an x verschiebt das 32-px-Bild so weit wie vorher die Konstante 16, gleiche drei Farben. Mit Größe 0 auf der GPU wird der Check rot.
  • Gate auf melektaus-atx: CHECK EXIT 0, 4562 Tests. CI zu 8118b80: Gate grün, Suite ALL PASSED – 2007 checks.

Grenzen

  • Der Scale wirkt nur aufs Bild. Collider und Klickfläche bleiben gleich groß.
  • Skaliert wird immer um die Bildmitte, unabhängig vom Anker des Sprites.
Umgesetzt in `8118b80`, Wiki `4c5823a` (*Shaders*: `Texture size` in der Liste der Nodes am Vertex output, neuer Abschnitt „Scaling about the middle“). ## Was sich ändert - **An einer Ecke liefert `Texture size` die Bildgröße, in der der Vertex output seine Pixel zählt.** Das ist dieselbe Zahl wie im Fragment. Weil der Versatz wieder durch diese Größe geteilt wird, stimmt ein Scale bei jeder Bild- und Sprite-Größe. - **Gesperrt bleibt** `Texture size` am Vertex output, wenn ein Pass-Bild hineingeht. Ein Pass hat an der Ecke kein Bild. - 9-Slice, Feld- und Kamera-Shader verschieben keine Ecken, dort ändert sich nichts. ## Video shader im Projekt `cbbf160bb7e8` Gebaut am 2026-10-11 (Revision 21158 → 21159): - `Mix(1.2, 1.0, FadeIn)` → Scale, minus 1 → Zuwachs - je Achse `(u - 0.5) · width · Zuwachs` bzw. `(v - 0.5) · height · Zuwachs` → `Vertex output` x/y, Subdivisions 1 - `Texture alpha · FadeIn` → `Output.alpha` Mit dem echten Compiler geprüft, ohne Meldung. Im Browser angesehen habe ich den Shader nicht. Zugewiesen ist er noch keinem Sprite. ## Tests - Unit `shader-vertex`: Der Node wird an der Ecke zu `uPictureSize`, der Output liest weiter `textureSize`. `shader-passes`: Ein Pass-Bild in `Texture size` am Vertex output wird abgelehnt. Mit dem alten `perPixel` wird der neue Test rot. - e2e 28l-iv: `width · 0,5` an x verschiebt das 32-px-Bild so weit wie vorher die Konstante 16, gleiche drei Farben. Mit Größe 0 auf der GPU wird der Check rot. - Gate auf `melektaus-atx`: `CHECK EXIT 0`, 4562 Tests. CI zu `8118b80`: Gate grün, Suite `ALL PASSED – 2007 checks`. ## Grenzen - Der Scale wirkt nur aufs Bild. Collider und Klickfläche bleiben gleich groß. - Skaliert wird immer um die Bildmitte, unabhängig vom Anker des Sprites.
admin added this to the Development project 2026-10-11 19:44:30 +02:00
admin moved this to Next in Development on 2026-10-11 19:44:32 +02:00
admin moved this to Done in Development on 2026-10-11 19:44:37 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#409