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.
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.
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
natural→ der eigene Bauer der Art, unangetastet.- Gibt es einen Bauer für (Art, Stil) → der.
- Sonst das natürliche Netz durch den Filter — und
last_routesagt 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
ArrayMeshspeichert 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 esStyleSwitch.reset().
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.
-
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.
-
Spielzeug: glatte, lackierte Formen in klaren Farben, wie Holzspielzeug.
-
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
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.
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
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
- mana
- 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.
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.
Ein Gebiet je Baustein
Die Trennung nach Fachgebiet ist der Grund, warum es fünf Repos sind und nicht eines.
- mana-godot-welt · Draussen
- mana-godot-stube · Gebäude
- mana-godot-gasse · Öffentlicher Raum
- mana-godot-figur · Figur
- mana-godot-xr · Brille
- mana-godot-spieler · Bewegung
- mana-godot-gestirn · Gestirne
- godot-mana-kit · Oberfläche
- mana-godot-materie · Oberflächen
- mana-godot-sport · Sport
- mana-godot-grund · unterbau