Communitygithub.com

Waipjy/ClaudeGame

Pour Decisions 的美術方向規範:用於定義材料調色盤、落沙粒子著色與發光、URP 後處理、像素完美相機、Balatro 式計分 UI 與動畫、圖示與 Steam 膠囊圖,以及提交前的視覺品質檢測。只要工作涉及顏色、著色器、UI 外觀、圖示或商店圖,就先讀這份。

Was ist ClaudeGame?

這份技能文件為《Pour Decisions》遊戲開發者(尤其是 Claude Code、Cursor 等 AI 代理)提供了一套完整的美術方向指南。它明確了遊戲以「模擬像素」為主的視覺風格,並將美術預算集中在材料調色盤、發光/後處理、UI、圖示和 Steam 膠囊圖等關鍵領域。文件禁止使用生成式 AI 圖像,並強制使用有限調色盤(例如 Resurrect 64),以確保所有美術元素(從落沙粒子到 UI 元素)都有一致且和諧的色彩。核心設計原則是「明度優先於色相」,確保即使轉為灰階,遊戲場景中的背景、材料和 UI 仍能清晰區分,焦點總是落在最亮、最飽和的區域(如反應點和計分數字)。文件還詳細說明了如何在 Unity 6 URP 中配置後處理效果(Bloom、CRT)、實現 Balatro 風格的計分動畫(包含顏色對應、動態彈跳和震動回饋),以及如何創建符合 Steam 規範的膠囊圖。最後,它提供了一份詳盡的提交前視覺 QA 清單,確保所有修改都符合像素藝術最佳實踐(如無混雜像素、正確的抖動使用)和可讀性規則(如色盲友善、焦點唯一)。

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Waipjy/ClaudeGame/tree/HEAD/.claude/skills/art-direction

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Kunstrichtung — Pour Decisions

Das Bild besteht zu etwa 80 % aus simulierten Pixeln. Das Kunstbudget wird nur für Folgendes ausgegeben: Materialpalette, Leuchten/Nachbearbeitung, UI, Symbole, Steam-Capsule-Grafik. Harte Regel: Keine generativen KI-Bilder (würde Steam-Offenlegung auslösen); externes Material nur aus der Whitelist (docs/research/03_assets_legal.md) und in docs/art/ASSET_LICENSES.md eintragen. Unsere Stärken: Shader, prozedurales Zeichnen, Farbmathematik. Schwäche: handgezeichnete Illustrationen → alle Entscheidungen tendieren zu „mit Code berechnen“.

Erweiterte Informationen (nur bei Bedarf lesen):

  • references/material-palette.md — 14 Material-Rampen, HEX, Rauschen und Leuchtparameter (Startwerte)
  • references/urp-postfx.md — URP-Volume-Rezepte, CRT-Shader-Spezifikation, Pixel-Perfect-Einstellungen
  • references/ui-juice.md — Balatro-UI-Analyse, Score-Animation-Timing, Easing-Werte
  • references/steam-capsule.md — Capsule-Spezifikationen, Valve-Regeln, Vorgehen ohne Illustrator

1. Farbtheorie (in dieser Reihenfolge entscheiden)

1.1 Value (Helligkeit) vor Hue

  • Design mit Graustufen: Nach Umwandlung in Graustufen (luma = 0.299R + 0.587G + 0.114B, oder OKLab L) müssen Hintergrund, Materialien und UI noch Schichten bilden. Was sich in Graustufen nicht trennen lässt, kann auch durch Farbänderung nicht gerettet werden.
  • Helligkeitsschichten dieses Spiels (Ziel-L, OKLab 0–1):
    SchichtL-BereichInhalt
    Hintergrund/Becherinnenwand0.12–0.22Dunkel, geringe Sättigung, kühl-violett
    Inerte Materialien (Stein, Sand, Schießpulver, Samen)0.30–0.65Mittlere Helligkeit, mittlere bis niedrige Sättigung
    Fluide (Wasser, Öl, Säure)0.35–0.75Mittlere Helligkeit, Erkennung durch Dynamik und Transparenz
    Reaktion/Leuchten (Feuer, Lava, Funken, Score-Partikel)0.75–1.0 + HDRAm hellsten und gesättigtsten im gesamten Bild
    UI-Zahlen/Buttons0.85–1.0Auf eigenem Panel, getrennt durch Panel-Hintergrundfarbe
  • Regel: Der Fokus muss das hellste und gesättigtste Element sein. Fokus = Position der aktuellen Reaktion + Score-Zahlen. Nichts anderes darf heller sein.

1.2 Hue Shifting (Farbtonverschiebung)

  • Eine Rampe (dunkel→hell) ändert nicht nur die Helligkeit: Helle Bereiche verschieben sich zu warmen Farben (Gelb), dunkle zu kalten (Blau/Violett). 10–20° pro Schritt, 20° als Obergrenze (Slynyrd Pixelblog 1).
  • Verwende nicht „Schwarz hinzufügen“ für Schatten oder „Weiß hinzufügen“ für Lichter → wird schmutzig und grau (Pillow/Muddy).
  • Sättigungskurve: Mitte am höchsten, Enden fallen ab, aber nicht auf 0 oder 100 %; dunkle Farben können gesättigter sein als helle. Vermeide gleichzeitige hohe Sättigung + hohe Helligkeit (grell), diese Position bleibt für leuchtende Materialien reserviert.

1.3 Sättigungshierarchie

  • Sättigung ist der zweite Aufmerksamkeitsmagnet. Drei Stufen:
    1. Hoch: Leuchtende Materialien, Score-Effekte, Mult-Zahlen.
    2. Mittel: Hauptfarben allgemeiner Materialien, interaktive UI.
    3. Niedrig: Hintergrund, Becherglas, Panels, nicht-interaktiver Text.
  • Hintergrundsättigung ≤ 25 % (HSV S). Das Gesamtbild „größtenteils niedrige Sättigung, wenige hohe Sättigungen“ erzeugt erst einen Fokus.

1.4 Begrenzte Palette (Limited Palette)

  • Verwende eine einzige Hauptpalette, aus der alle Materialien, UI und Symbole ihre Farben beziehen. Vorteil: Konsistenz stellt sich automatisch her, KI-Agenten wählen nicht willkürlich Farben.
  • Startpunkt: Resurrect 64 (lospec.com/palette-list/resurrect-64), 64 Farben, Rampen mit bereits durchgeführtem Hue Shift, dunkle Bereiche tendieren zu Violett, geeignet für dunklen Hintergrund + Leuchten. Alternativen: Endesga 32, Apollo (46 Farben), AAP-64. Die Farbwerte der Palette sind nicht urheberrechtlich geschützt. Die Quelle kann auf der Lospec-Seite notiert werden, ist aber nicht zwingend erforderlich (Annahme, geringes Risiko).
  • Eigener Erstellungsprozess (falls erforderlich):
    1. Wähle eine helle Mittelfarbe (S, B am wichtigsten, H beliebig).
    2. Erweitere auf 5–9 Schritte in beide Richtungen: B von dunkel nach hell (Schritte werden kleiner, je näher an 100 %), S in der Mitte am höchsten, H +10~20° pro Schritt (in Richtung Hell-Warm).
    3. Rotiere die gesamte Rampe um H 45°, um andere Farbfamilien zu erzeugen.
    4. Kopiere den mittleren Teil und entsättige ihn → neutrale Graurampe (für UI/Hintergrund).
    5. Alle Farbwerte in Game/Assets/Art/Palette/palette.png (1px pro Farbe) + C# PaletteSO, Code referenziert nur den Index, schreibt kein HEX fest.
  • Erlaubte Ausnahme: HDR-Leuchtwerte (>1.0) dürfen nur durch Multiplikation der Palettenfarbe mit der Intensität erzeugt werden, keine neuen Farben.

2. Lesbarkeitsregeln

  1. Graustufentest: Jede Farbänderung als Screenshot in Graustufen umwandeln und prüfen (QA-Liste Punkt 1).
  2. Benachbarte Materialien müssen sich in Value oder Hue deutlich unterscheiden: ΔL (OKLab) ≥ 0,08 oder Δhue ≥ 40°. Besonders behandeln für leicht verwechselbare Kombinationen:
    • Feuer vs. Lava vs. Sand (alle warm) → Feuer am hellsten und dynamisch, Lava dunkelrot mit hellen Linien und langsam, Sand nicht leuchtend und mittlere Helligkeit.
    • Säure vs. Pflanze (beide grün) → Säure gelb-grün + leichtes Leuchten + Blasen, Pflanze dunkel-blau-grün, nicht leuchtend.
    • Dampf vs. Rauch → Dampf weiß, kühl, steigt schnell auf; Rauch grau-violett, dunkler, breitet sich langsam aus.
  3. Farbenblindheit: Darf nicht nur auf Rot/Grün-Unterscheidung basieren. Jedes Material hat ein weiteres, nicht-farbliches Merkmal (Dynamik, Texturrauschtyp, Leuchten, Transparenz). Mit Coblis oder Shader-Simulation von Deuteranopie prüfen.
  4. UI vom Spielbildschirm trennen: Der Simulationsbereich enthält nur Materialpixel; UI befindet sich auf Panels außerhalb des Bechers, die Panels haben neutrale, niedrig gesättigte Farben + 1px Rand. UI verwendet keine Materialfarbe als Hintergrund (vermeide „Ist das Sand?“). Score-Zahlen dürfen in den Simulationsbereich schweben, müssen aber einen Rand/Schatten haben und innerhalb von 0,6 Sekunden wieder verschwinden.
  5. Einzigartiger Fokus: Es gibt immer nur eine Gruppe von Elementen, die „um Aufmerksamkeit ringt“. Bei vielen Reaktionen den Glow sekundärer Partikel reduzieren (siehe §4 Glow Budget).
  6. Silhouette: Die Formen von Bechern, Buttons und Symbolen müssen in einer rein schwarzen Silhouette erkennbar sein.

3. Pixelkunst-Grundlagen

  • Feste Pixel-Skalierung: 1 Simulationszelle = 1 Spielpixel. UI-Pixel-Material mit demselben Maßstab (empfohlene Sim-Auflösung 320×180 oder 384×216, ganzzahlige Vergrößerung auf 1080p/1440p/4K). Mischen verschiedener Maßstäbe verboten.
  • Keine Mixels: Kein Pixel-Material darf nicht ganzzahlig skaliert oder gedreht werden (Drehung erzeugt Pixel unterschiedlicher Größe). Für UI, die gedreht werden muss (z. B. Kartenwackeln), eine hochauflösende UI-Ebene verwenden oder in einer niedrig aufgelösten Render-Texture drehen und dann ganzzahlig vergrößern.
  • Rampe: Jedes Material 3–5 Farben (siehe references/material-palette.md). Mehr als 5 Farben sind bei 1px-Partikeln nicht erkennbar.
  • Richtige Verwendung von Dithering: Nur für (a) großflächige Farbverläufe (Hintergrund, Becherglasreflexionen), (b) Transparenz-Illusionen (Rauch, Dampf mit Checkerboard/Bayer 4×4 Alpha). Kein Dithering bei kleinen Objekten, Symbolen, Text; kein World-Space-Dithering bei dynamischen Partikeln (würde flackern), Dither-Muster an Bildschirm- oder Zellenkoordinaten binden.
  • Manuelles Anti-Aliasing: Nur bei diagonalen/gebogenen Linien von UI-Symbolen und Logos, mit einer Mischfarbe zwischen Linien- und Hintergrundfarbe 1px einfügen. Kein AA an der Außenkontur zum transparenten Hintergrund (würde bei Hintergrundwechsel schmutzige Ränder erzeugen).
  • Banding: Parallele, gleich breite Farbbänder entlang von Konturen vermeiden (sieht aus wie Höhenlinien einer Karte).
  • Pillow Shading verboten: Lichtrichtung ist fest (oben links), Schatten sind nicht „von den Rändern zur Mitte hin heller werdend“.
  • Schriftarten: Pixel-Schriftarten nur aus der Whitelist (Cubic 11, Fusion Pixel Font, Kenney Fonts); als ganzzahliges Vielfaches der nativen Pixelgröße anzeigen; TMP mit Point-Sampled Bitmap oder hochsampled SDF.

4. Wie man Materialien in einem Falling-Sand-Spiel einfärbt

Beobachtungen aus Referenzwerken (Noita, The Powder Toy, Sandspiel, Sandustry; teilweise Beobachtungsschlussfolgerungen, mit „nicht verifiziert“ gekennzeichnet):

  1. Farbrauschen pro Partikel: Bei der Partikelerzeugung ein Zufalls-Byte speichern (Sandspiels ra), beim Rendern damit innerhalb der Materialrampe eine Farbe auswählen oder die Helligkeit anpassen → Sand, Stein erhalten eine körnige Textur. Das Rauschen wird bei der Erzeugung festgelegt, die Farbe folgt dem Partikel bei Bewegung (nicht jeden Frame neu würfeln, das flackert).
  2. Feste Körper mit Weltkoordinaten-Textur: Noita-Materialien können texture_file angeben, feste Körper sampeln die Textur basierend auf der Weltposition; wenn sie zu fallenden Partikeln werden, behalten sie die aktuelle Farbe (Schlussfolgerung aus Wiki-Eigenschaften, Details nicht verifiziert). Unser Stein/Glas/Eis kann Zellenkoordinaten-Hash verwenden, um aus der Rampe eine stabile Textur zu erzeugen.
  3. Fluide verlassen sich nicht auf Rauschen, sondern auf Bewegung: Wasser/Öl haben eine geringe Rauschamplitude (±3 % L), plus (a) eine hellere Highlight-Zelle an der Oberfläche, (b) feines Flimmern abhängig von Geschwindigkeit/Zeit.
  4. Leuchtende Materialien (Emissive): Noita hat gfx_glow (0–255) und gfx_glow_color. Unser Ansatz: Jede Zelle hat einen emission-Wert, rendert eine HDR-Farbe = Palettenfarbe × (1 + emission × k), die an URP Bloom übergeben wird. Feuer, Lava, Funken, Säure (schwach), glühendes Glas leuchten.
  5. Temperaturfarbe: The Powder Toy hat einen Hitzebildmodus; wir übernehmen nur den Geist − bei hoher Temperatur verschiebt sich die Farbe entlang der Schwarzlichtkurve (dunkelrot→orange→gelb→weiß) in Richtung hell, beim Abkühlen zurück zur ursprünglichen Rampe.
  6. Reaktionsblitz: In dem Frame, in dem eine Reaktion stattfindet, wird die Emission dieser Zelle auf Maximum gesetzt, 2–4 Frames Abklingzeit → der Spieler „sieht“ die Reaktion. Dies ist das wichtigste Feedback für die Lesbarkeit.
  7. Glow Budget: Wenn die Anzahl der gleichzeitig leuchtenden Zellen > N (Start 2.000) ist, wird die Emission jeder Zelle proportional reduziert, um die Gesamthelligkeit stabil zu halten und ein Überbelichten des Bildes zu vermeiden.

Implementierungshinweise: Simulationsdaten (Material-ID, Zufalls-Byte, Temperatur, Emission) als RGBA8-Texture verpacken und hochladen, Fragment-Shader schlägt in einer Paletten-LUT (256×1 oder materials×ramp kleine Textur) nach, um die Farbe zu bestimmen. CPU berechnet keine Farben.


5. Nachbearbeitung (Unity 6 URP) – Schwerpunkte

Detaillierte Rezepte in references/urp-postfx.md. Kernpunkte:

  • Kamera HDR aktivieren; Bloom Threshold 1.0–1.1 (nur HDR>1 leuchtende Materialien dürfen überstrahlen, normale Materialien nicht bloomen), Intensity 0.6–1.0 als Startwert, Scatter 0.6–0.75, High Quality Filtering aktivieren (reduziert Flackern).
  • Tonemapping: Neutral (ACES würde Farbtöne ändern und die Palette verdunkeln). Oder None + eigene Steuerung.
  • Color Grading LUT: Nur leichte Vereinheitlichung (storyboardartiges „Feueratmosphäre“), verändert nicht die Value-Struktur der Palette; Color Lookup Contribution ≤ 0.5.
  • CRT/Scanline standardmäßig deaktiviert, Schalter und Intensität im Einstellungsmenü; Steam-Screenshots/Trailer hauptsächlich „aus“, maximal 1 Screenshot mit aktiviertem Effekt.
  • Pixel Perfect Camera (URP integriert, nicht das alte 2D Pixel Perfect Paket installieren): Grid Snapping = Upscale Render Texture; Bloom nach der Vergrößerungsauflösung durchführen, damit keine blockigen Lichteffekte entstehen.

6. UI-Stil (Balatro-artiger Score-Attack)

Detailliertes Timing in references/ui-juice.md. Zwingend einzuhalten:

  • Farbe ist die Sprache des Punktestands: Chips = Blau, Mult = Rot, Geld = Gold, ×Mult = Roter Hintergrund mit weißer Schrift. Im gesamten Spiel festgelegt, nicht umwidmen.
  • Einzeln abwickeln: Reaktionen springen einzeln hervor (+chips / +mult), jede mit Number Pop (scale 1.0→1.3→1.0, Overshoot-Easing), Tonhöhe steigt.
  • Vibration nach Größenordnung gestaffelt: Je größer der Score, desto größer die Amplitude und desto länger die Dauer; maximal 8px / 1°. Option „Bildschirmvibration reduzieren“ anbieten (Barrierefreiheit).
  • Zahlen immer lesbar: Dicker Rand (2px dunkle Farbe) + Schatten; große Zahlen vor der wissenschaftlichen Notation mit Tausendertrennzeichen.
  • Juice darf Informationen nicht überdecken: Partikel und Lichtblitze dürfen chips×mult und Zielscore nicht verdecken.

7. Symbole (16–32px)

  • Zuerst 16px-Version erstellen, dann auf 32px vergrößern und Details hinzufügen (nicht 32px auf 16px verkleinern).
  • Ein Symbol = ein Konzept, eine Silhouette; 1px dunkler Rahmen (dunkelste Palettenfarbe), damit es auf jedem Hintergrund funktioniert.
  • Jedes Symbol maximal 4–5 Farben (Rahmen, Dunkel, Mittel, Hell, Akzent). Lichtquelle immer oben links.
  • Vial-Symbole (Materialfläschchen): Einheitliche Flaschenform, nur die Flüssigkeitsfarbe und ein kleines Symbol ändern (Flamme, Wassertropfen, Totenkopf…) → Spieler erkennt doppelt durch Farbe + Symbol (farbenblindfreundlich).
  • Catalyst-Relikte: Form nach Seltenheit unterscheiden (rund / sechseckig / sternförmiger Rahmen), Rahmenfarbe nach Seltenheit (Grau, Blau, Lila, Gold).
  • Prozedurale Erzeugung: Symbole können mit C# oder Python als „Form + Palettenindex“ gezeichnet und als PNG ausgegeben werden, reproduzierbar und batch-änderbar.
  • Test: Auf tatsächlichem UI-Hintergrund, bei 100 % Vergrößerung betrachten; bei 50 % Vergrößerung müssen sich je zwei verschiedene Symbole noch unterscheiden lassen.

8. Steam-Capsule-Grafik

Details in references/steam-capsule.md. Schwerpunkte:

  • Spezifikationen: Header 920×430, Small 462×174, Main 1232×706, Vertical 748×896, Library 600×900, Hero 3840×1240 (kein Text), Logo als transparentes PNG.
  • Valve-Regeln: Auf der Capsule dürfen nur Spielszenen/Grafik und der Spielname/Logo (und offizieller Untertitel) sein; keine Bewertungen, Auszeichnungen, Rabattangaben, sonstiger Text.
  • Unser Ansatz (auch ohne Illustrator umsetzbar): Schriftart-getriebenes großes Logo + hochauflösende Simulationsrender (explosiver Reaktionsmoment) + ein klarer Fokuspunkt. Das Logo selbst ist Falling Sand: Die Buchstaben werden durch die Simulation „ausgeschüttet“ oder bestehen aus verschiedenen Materialien.
  • Zuerst Small Capsule machen (120×45 Vorschau muss Logo noch erkennen lassen), dann zu größeren Formaten übergehen.

9. Workflow-Regeln

  1. Neue Farbe → zuerst in die Palettendatei einfügen, dann referenzieren; PR/Commit-Kommentar listet die neuen Indizes auf.
  2. Jegliches externes Material (Schriftarten, Kenney UI) → in docs/art/ASSET_LICENSES.md eintragen (Dateiname, URL, Autor, Lizenz, Datum).
  3. Alle prozeduralen Grafiken (Symbole, Logo, Capsule) mit Erstellungsskript und Parametern aufbewahren, in Game/Tools/ArtGen/ oder tools/, jederzeit wieder ausführbar.
  4. Unsichere Parameter mit „Startwert“ kennzeichnen, nach Prototyp-Tests in den Referenzen aktualisieren.

10. Pre-Commit-Visual-QA-Checkliste

  • Graustufen-Screenshot: Helligkeit von Hintergrund / Material / Leuchten / UI vierstufig unterscheidbar
  • Fokus (Reaktionspunkt, Score-Zahlen) ist das hellste und gesättigtste Element im Bild
  • Neue Farben stammen alle aus der Palette (keine fest codierten HEX)
  • Benachbarte leicht verwechselbare Materialien (Feuer/Lava/Sand, Säure/Pflanze, Dampf/Rauch) sind bei 100 % und 50 % Skalierung unterscheidbar
  • Unter Farbenblind-Simulation (Deuteranopie, Protanopie) sind Materialien und Chips/Mult noch erkennbar
  • Keine Mixels: Pixel-Material nur ganzzahlig skaliert, nicht gedreht
  • Partikel-Farbrauschen flackert nicht bei Bewegung
  • Bloom: Normale Materialien überstrahlen nicht; bei 500+ gleichzeitigen Reaktionen kein Überbelichten des Bildes (Glow Budget aktiv)
  • UI-Text hat Rand und ist auch über dem hellsten Explosionseffekt lesbar
  • Bildschirmvibration ≤ 8px, bei deaktivierter Option „Vibration reduzieren“ gar keine Vibration
  • CRT-Filter standardmäßig deaktiviert, Ein/Aus-Schalter funktioniert
  • Symbole in 16px Originalgröße erkennbar, paarweise unterscheidbar
  • 1080p, 1440p, Steam Deck 1280×800 sind entweder ganzzahlig vergrößert oder haben korrektes Letterbox
  • Keine mit generativer KI erstellten Bilder; neues Material ist lizenziert und eingetragen
  • Screenshots sind unter docs/art/qa/<Datum>_<Funktion>.png zur Nachverfolgung gespeichert

Quellen

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills