3.9 KiB
Asset-Plan
Status: umgesetzt in scripts/stoffe.gd (Materialregeln) und
scripts/formen.gd (Bauregeln). Unten der Plan, darunter, was davon wie
gebaut ist.
Stand
- Stoffe: Filz, Holz, dunkles Holz, Messing, Knochen. Je Regel drei
Laufzeit-Texturen aus
NoiseTexture2D: Farbe (Rauschen durch Farbverlauf), Relief (as_normal_map), Rauheit. Kein Shadercode. - Formen: Becher, Fass, Laterne aus Primitiven. Kanten als Torus-Ringe.
- Gelernt: Rauschen nur als Farbe bleibt flach - das Relief macht den Unterschied. Grobes, glänzendes Relief auf Filz sieht nach nassem Moos aus: fein, matt, kaum Höhe. Maserung entsteht durch gestreckte UV (1:9).
- Verworfen: Dielen auf dem Boden (aus Kamerahöhe nur Rauschen), Lampe über der Mitte (hängt der Kamera vor der Linse), Fass am Boden (ein Fleck).
Grundidee
Basis-Mesh ohne Textur. Aussehen kommt aus Shader plus Regeln. Ein Mesh, ein Material, viele Varianten uber Instanz-Uniforms.
Vorteile:
- Weniger Draw Calls, weniger VRAM.
- Varianten kosten nichts. Nur ein anderer Uniform-Wert.
- Parameter jederzeit anpassbar. Keine Textur muss neu gebaut werden.
Grenze:
- Nachbarschafts-Regeln kosten Laufzeit. Nur eine Ebene, Ergebnis cachen.
Stil
Stilisiert, nicht realistisch. Taverne bei Nacht.
- Chiaroscuro: warmes Lampenlicht gegen kalten Schatten. Sonst nichts.
- Enge Palette. Holz, Messing, Wachs, Leder, Filz.
- Kanten leicht angeschraegt. Faengt Licht, wirkt handgemacht.
- Abnutzung ueberall. Kratzer, Wachsflecken, Salzraender. Nichts ist neu.
- Kein Cartoon-Outline. Bricht mit dem Licht.
Die Szene in scripts/table.gd setzt das schon an:
dunkler Hintergrund, Nebel, warme Lampe, gruener Filz.
Vier Basis-Shader
Mehr braucht es nicht.
- Holz - Maserung, Astloecher, abgegriffene Kanten. Fuer Tisch, Beine, Fass, Becher.
- Messing - Anlauf, Politur an Griffflaechen. Fuer Laterne, Beschlaege, Muenzen.
- Filz / Stoff - Fuzz, Flecken, abgewetzte Stellen. Fuer Tischtuch, Beutel, Kleidung.
- Wachs / Knochen - subsurface-artig, warm durchscheinend. Fuer Kerzen, Wuerfel.
Jeder Shader hat dieselben Kern-Uniforms:
base_color : Color
wear : float 0..1 Abnutzung
tint : Color Faerbung obendrauf
pattern_mask : float 0..1 Musterstaerke
emission : float 0..1
Muster
Als Masken-Textur, nicht als fertige Textur. RGBA = vier Muster in einer Datei. Der Shader waehlt den Kanal.
Beispiel: R = Streifen, G = Wappen, B = Kratzer, A = Salzkruste.
Regeln als Daten
Flache Liste. Keine Vererbung, keine Klassen. Jedes Objekt bekommt Tags. Regeln mappen Tags auf Uniform-Werte.
# rules.tres oder JSON
{
"holz": { "base_color": "#8B5A2B", "grain": 0.8 },
"alt": { "wear": 0.7, "roughness": 0.9 },
"salzwasser": { "wear": "+0.2", "tint": "#5A7A6B" }
}
Nachbarschaft genauso flach:
{ "wenn_nahe": "lampe", "dann": { "emission_boost": 0.4, "radius": 2.0 } }
Drei Regeln fuer die Regeln
- Regeln addieren nur. Kein Ueberschreiben, keine Reihenfolge-Abhaengigkeit.
- Hoechstens eine Nachbarschafts-Ebene. Keine Kettenreaktion.
- Jeder Uniform-Wert hat einen Default. Fehlende Regel heisst nie Absturz.
Meshes
Aktuell liegt nur art/pirate_assets.blend1 da. Das ist ein Blender-Backup.
Die frueheren .glb (Becher, Fass, Laterne, Matte) sind nicht mehr im Repo.
Nur Cache-Reste in .godot/.
Vor dem Start: Meshes neu exportieren. Ohne Material, ohne Textur. UVs muessen sauber sein. Der Shader braucht sie fuer Maserung und Muster.
Reihenfolge beim Umsetzen
- Meshes als
.glbexportieren, ohne Material. - Holz-Shader bauen. An Tisch und Becher testen.
- Uniforms per Hand setzen. Schauen, ob der Look traegt.
- Erst dann die Regel-Datei bauen.
- Nachbarschaft ganz am Ende. Nur wenn es dann noch fehlt.
Schritt 3 ist der Entscheidungspunkt. Sieht es nach Plastik aus, lieber zurueck zu handgemachten Texturen.