Files
pirate-dice/assets.md
2026-09-10 18:00:57 +02:00

3.1 KiB

Asset-Plan

Status: Konzept. Noch nicht umgesetzt.

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.

  1. Holz - Maserung, Astloecher, abgegriffene Kanten. Fuer Tisch, Beine, Fass, Becher.
  2. Messing - Anlauf, Politur an Griffflaechen. Fuer Laterne, Beschlaege, Muenzen.
  3. Filz / Stoff - Fuzz, Flecken, abgewetzte Stellen. Fuer Tischtuch, Beutel, Kleidung.
  4. 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

  1. Meshes als .glb exportieren, ohne Material.
  2. Holz-Shader bauen. An Tisch und Becher testen.
  3. Uniforms per Hand setzen. Schauen, ob der Look traegt.
  4. Erst dann die Regel-Datei bauen.
  5. 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.