Bausteine · Stil · MIT

mana-godot-style

Jeder Generator in jedem Stil, umschaltbar im laufenden Spiel. Ein Stil ist ein DATENBLATT, kein Neubau — ein sechster Stil ist ein sechstes Blatt, und Probe, Katalog und das Menü im Spiel kennen ihn sofort.

5
Projekte benutzen ihn
1
Module
6
Bilder
Mitnehmen

Kopie mit Wächter

Kopiert statt verlinkt, damit das Projekt nach einem frischen Klon aufgeht. Ein Wächter im Prüflauf meldet, wenn die Kopie hinter der Quelle zurückbleibt.

./tools/kit-abgleich.sh holen

Landet unter modules/style/ im Projekt.

Was es tut

Die Idee in einem Satz

Ein Stil ist ein Datenblatt, kein Neubau. Ein sechster Stil ist ein sechstes Blatt — und jede Art, die Probe, der Katalog und das Menü im Spiel kennen ihn im selben Augenblick.

Wie ein Stück zu seinem Stil kommt

  1. natural → der eigene Bauer der Art, unangetastet.
  2. Gibt es einen Bauer für (Art, Stil) → der.
  3. Sonst das natürliche Netz durch den Filter — und last_route sagt das.

Ein Stil, der eine eigene Form will (shape = builder), aber für eine Art keinen Bauer hat, steht sichtbar ein, nie still.

Der Katalog, und was er beim ersten Lauf zeigte

🛑 Das erste Blatt war vollständig grau. Ein Netz ohne Material bekommt Godots Vorgabe, und die liest Scheitelfarben nicht — jede Farbe, die ein Stil gerechnet hatte, wurde still weggeworfen, und das Blatt sah aus, als könnten die Stile keine Farbe. Derselbe Fehler sass bis zum 4. September in mana-godot-stube und hat dort jede Farbe des Kits verschluckt; er ist hier zum zweiten Mal aufgetreten, weil ein Katalog seine Materialien selbst stellt.

🛑 Und der Katalog bringt seine Formen selbst mit. Einer, der mana-godot-welt holt, um etwas zum Anziehen zu haben, bindet dieses Kit an ein zweites und zeigt im Bild dessen Bäume statt dieser Stile. Die vier Formen decken ab, was ein Stil überhaupt anfassen kann: eine runde Fläche (Schattierung), eine kantige (Facetten), zwei Materialien (Farbregel) und eine sichtbare Silhouette (Form).

Drei Dinge, die beim Bauen gemessen wurden

  • Scheitelfarben liegen in manchen Generatoren in sRGB, in anderen linear. register_kind(…, {colour_space = &"linear"}) sagt, welche — und die Probe hält eine Gegenprobe: linear als sRGB gelesen landet sichtbar daneben (0,87 statt 0,96).
  • Ein ArrayMesh speichert Scheitelfarben mit 8 Bit und Normalen komprimiert. Ein exakter Vergleich in einer Probe fällt, ohne dass etwas falsch ist.
  • Statische Zwischenspeicher, die beim Beenden des Szenenbaums noch Netze halten, stürzen Godots Abbau ab (recursive_mutex lock failed, exit 134). Dafür gibt es StyleSwitch.reset().
Ansehen

6 Bilder aus dem Katalog

  • Alle fünf Stile über vier Formen, von oben nach unten: `natural`, `model`, `lowpoly`, `toy`, `cutout`. 🛑 Dieses Blatt ist der Grund, warum es den Katalog gibt — und es beantwortet die Frage, die es stellt, unbequem: `lowpoly` (dritte Reihe) ist deutlich anders, facettiert und flach schattiert. Die anderen vier unterscheiden sich auf diesen Formen nur schwach. Das war vorher nicht zu wissen; der Prüflauf misst Normalen und Farbräume, aber nicht, ob zwei Stile wie zwei Stile aussehen.

    Alle fünf Stile über vier Formen, von oben nach unten: `natural`, `model`, `lowpoly`, `toy`, `cutout`. 🛑 Dieses Blatt ist der Grund, warum es den Katalog gibt — und es beantwortet die Frage, die es stellt, unbequem: `lowpoly` (dritte Reihe) ist deutlich anders, facettiert und flach schattiert. Die anderen vier unterscheiden sich auf diesen Formen nur schwach. Das war vorher nicht zu wissen; der Prüflauf misst Normalen und Farbräume, aber nicht, ob zwei Stile wie zwei Stile aussehen.

  • Der Grundzustand: der Generator, wie er ist. Bei `natural` geht die Auflösung gar nicht erst durch den Filter — das Kit gibt den Bauer unverändert zurück, und `last_route` sagt `natural`.

    Der Grundzustand: der Generator, wie er ist. Bei `natural` geht die Auflösung gar nicht erst durch den Filter — das Kit gibt den Bauer unverändert zurück, und `last_route` sagt `natural`.

  • Low-Poly: kantige Flächen, flach schattiert, ein Ton je Fläche. Die Kugel zeigt es am deutlichsten. 🛑 Was der Filter NICHT kann, ist Form: ein gefiltertes Low-Poly-Haus ist ein flach schattiertes Haus mit allen Sprossen. Wo die Form den Stil trägt, meldet eine Art einen eigenen Bauer an — und wer einen Stil mit Formwunsch ohne Bauer verlangt, sieht das, statt dass es still danebensteht.

    Low-Poly: kantige Flächen, flach schattiert, ein Ton je Fläche. Die Kugel zeigt es am deutlichsten. 🛑 Was der Filter NICHT kann, ist Form: ein gefiltertes Low-Poly-Haus ist ein flach schattiertes Haus mit allen Sprossen. Wo die Form den Stil trägt, meldet eine Art einen eigenen Bauer an — und wer einen Stil mit Formwunsch ohne Bauer verlangt, sieht das, statt dass es still danebensteht.

  • Spielzeug: glatte, lackierte Formen in klaren Farben, wie Holzspielzeug.

    Spielzeug: glatte, lackierte Formen in klaren Farben, wie Holzspielzeug.

  • Scherenschnitt: flache Papierformen mit gezeichneter Kontur, wie ein Bilderbuch.

    Scherenschnitt: flache Papierformen mit gezeichneter Kontur, wie ein Bilderbuch.

Und der Rest des Katalogs

1 Bild, so benannt, wie der Katalog es rendert. Ohne Legende — geschrieben wird eine erst, wenn jemand am Bild etwas gesehen hat.

  • stil model stil model
Inhalt

Woraus er besteht

style_def
Das Blatt: Farbregel, Schattierung, Finish, Karten, Wind, Detailstufe, Formwunsch, LOD-Enden, Weltlook. Eine Resource — ein neuer Stil ist eine `.tres`, kein Code.
builtin_styles
Die fünf mitgelieferten: `natural`, `model` (Modellbahn), `lowpoly`, `toy` (Holzspielzeug), `cutout` (Scherenschnitt).
style_registry
Meldet Arten und Bauer an und LÖST auf: eigener Bauer, sonst der Filter — und `last_route` sagt, welcher Weg genommen wurde.
style_filter
Der allgemeine Weg: umfärben (sRGB oder linear), flach oder weich schattieren, Finish setzen, Karten abschalten.
style_tint
Der Notausgang für einen fertigen Teilbaum, dessen Materialien aus keinem Kit kommen. Jedes Material merkt sich seine EIGENE Ursprungsfarbe, sonst rechnet der zweite Stil auf dem ersten weiter.
styled_piece
Ein Stück, das sein REZEPT behält und sich selbst neu baut, wenn der Stil wechselt.
style_switch
Der Umschalter zur Laufzeit, mit Zwischenspeicher und `env_style` als Shader-Globale.
Abnehmer

5 Projekte benutzen ihn

Gezählt, nicht behauptet: pnpm bausteine durchsucht jede App im Baum nach Klassennamen des Bausteins und nach vendorierten Kopien. Ein Baustein ohne Abnehmer wäre keiner, sondern eine Bibliothek auf Vorrat. Stand: 2026-09-29.

  • flockstill
  • gleisgarten
  • heimband
  • setzblei
  • tresenwurf
Herkunft

Wem er gehört, was ihn prüft

Lizenz
MIT — Bausteine sind permissiv lizenziert, Anwendungen AGPL-3.0. Ein Baustein, der ansteckt, wäre keiner.
Träger
Der Verein
Gebiet
Stil — Jeder Generator in jedem Stil, umschaltbar im Spiel. Ein Stil ist ein Datenblatt, kein Neubau.
Wache
probe/lauf.sh — prüft ihn headless.
Katalog
kit_katalog.gd — rendert seine Bauteile als Bilder.

🛑 Kein Link ins Repository: die Kit-Repos liegen auf der eigenen Forge und sind noch nicht öffentlich. Ein Link, der 404 antwortet, wäre schlechter als keiner.

Stand

Was offen ist

  • Vier der fünf Stile unterscheiden sich auf einfachen Formen nur schwach. Gemessen wird das erst, seit es den Katalog gibt (2026-09-21) — vorher war es nicht zu sehen.
  • Der Filter fasst keine FORM an und keine `ShaderMaterial`. Viele Shader dieses Hauses benutzen COLOR als Daten (Laub, Efeu, Wasser); deren Farben bleiben, und Arten aus dieser Gruppe brauchen einen eigenen Bauer oder einen Shader, der `env_style` liest.
  • Bis zum 2026-09-20 stand dieser Baustein in KEINEM Register. Damit lief für ihn kein Wächter, kein Kopien-Abgleich und keine Nutzerzählung — `pnpm bausteine` zeigte neun Bausteine, es waren zehn.