CommunityBildgithub.com

qhenshaw/unity-model-icon-renderer

Rendert 3D-Modelle/Prefabs in einem Unity (URP)-Projekt in transparente, umrandete Sprite-Icons für Inventare, Shops, Gegenstandskarten und Rucksack-Raster – Größe angepasst an den Zellenfußabdruck des Gegenstands, automatische Positionierung, sodass lange Waffen diagonal liegen und kompakte Gegenstände den Slot füllen.

Was ist unity-model-icon-renderer?

Der Skill `qhenshaw/unity-model-icon-renderer` automatisiert die Erstellung von konsistenten Gegenstands-Icons direkt aus 3D-Prefabs eines Unity-Projekts (URP-kompatibel). Er rendert orthografische Vorschaubilder mit drei Richtungslichtquellen, 2-fachem Supersampling und einer dunklen Umrandung, die auf jedem Hintergrund lesbar sind. Die Pose wird je nach Modellform automatisch gewählt: langgestreckte Objekte (Schwerter, Stäbe) werden diagonal im Raster platziert, kompakte Modelle (Edelsteine, Tränke) erhalten eine optimierte 3/4-Ansicht. Der Skill eignet sich besonders für Projekte mit fehlenden oder veralteten Icons, die aus der 3D-Kunst des Spiels generiert werden sollen, und unterstützt einen Review-Workflow mit einer Python-Skript-Übersicht, um Ausreißer zu korrigieren. Die Implementierung erfolgt über eine `RenderBatch`-Methode, die eine Liste von Aufträgen verarbeitet, wobei die Zuordnung von Prefab zu Icon (inklusive Zellenfußabdruck) im projekteigenen Content-Code verwaltet wird.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/qhenshaw/quins-unity-skills/tree/HEAD/skills/unity-model-icon-renderer

Installed? Explore more Bild skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

In Ihrer bevorzugten KI fragen

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

Dokumentation

Item-Icons, gerendert aus 3D-Modellen

Verwandle die eigenen Prefabs des Spiels in konsistente Icon-Sprites aus dem Code: eine isolierte Vorschauszene, eine orthografische Kamera mit drei gerichteten Lichtern, eine pro Modell gewählte Pose, ein 2× Supersampling-Render, herunterskaliert mit Pre-Multiplikation und einem dunklen Umriss, damit die Icons auf jedem Hintergrund lesbar sind. Wiederholbar – generiere neu, wenn sich Kunst oder Gegenstandsformen ändern.

Arbeitsablauf

  1. Pipeline prüfen. Die Vorlage zielt auf URP (UniversalAdditionalCameraData). Für Built-in: lösche den Block; für HDRP verwende HDAdditionalCameraData und deaktiviere Post-Processing auf dieselbe Weise.
  2. Kopiere templates/Editor/ModelIconRenderer.cs in einen Nur-Editor-Ordner/asmdef (verweist auf URP-Runtime, wenn ein asmdef verwendet wird) und benenne den Namespace um.
  3. Entscheide die Zuordnung von Spieldaten zu Aufträgen: welches Prefab repräsentiert welchen Gegenstand, sein Zellenfußabdruck (1×1 für einfache Icons; die Rasterform des Gegenstands für Raster-Inventare) und der Ausgabepfad. Behalte diese Zuordnung im Content-Code des Projekts, nicht im Renderer.
  4. Rufe ModelIconRenderer.RenderBatch(jobs) von einem Menüpunkt oder dem Content-Build-Schritt auf, weise dann die resultierenden Sprites den Gegenstandsdaten zu (AssetDatabase.LoadAssetAtPath<Sprite>(path)), SetDirty, SaveAssets. PNGs werden als Sprites importiert (Alpha ist Transparenz, keine Mipmaps).
  5. Betrachte jedes Icon mit scripts/icon_sheet.py und korrigiere Ausreißer pro Gegenstand (siehe Review-Schleife), anstatt die globalen Heuristiken zu verändern.
  6. Comitte die PNGs per Git LFS. Committe keine Icons, die aus lizenzierter Kunst gerendert wurden, in öffentliche Repos.

Wie die Pose gewählt wird

  • Langgestreckte Modelle (längste Achse > 1,6× die mittlere: Schwerter, Stäbe, Pfeile, Zauberstäbe) werden entlang der Längsachse des Slots gelegt – vertikal in hohen Slots, horizontal in breiten, diagonal in quadratischen Slots – und dann um 25° um diese Achse gedreht, sodass die Seite zur Kamera zeigt.
  • Kompakte Modelle (Edelsteine, Tränke, Bücher, Truhen) beginnen mit einer aufrechten 3/4-Ansicht, dann rendert ein Durchlauf von Gier (-90…90), Nick (-50, -25, 0) und Roll (0…135) eine kleine Testprobe und behält die Ansicht mit den meisten Silhouetten-Pixeln. Pixelabdeckung statt Bounding-Boxen vermeidet, dass dünne Diagonale gewinnen; frontale Ansichten werden um 7% bestraft, da sie flach wirken; die automatische Pose erhält einen 10% Bonus, sodass sie nur durch eine klar bessere Ansicht ersetzt wird.
  • Kompaktes Modell in einem langen Slot (Abdeckung < 30%, Slot ≥ 3:1): Kopien werden entlang des Slots mit leichter Drehungs-/Skalierungsvariation (drei Splitter in einem 1×3-Slot) anstatt eines winzigen Modells nebeneinander platziert.
  • Ausrichtung: Die meisten Packs (einschließlich Synty) erstellen Props, die in +Z-Richtung zeigen; die Kamera blickt entlang +Z, daher erhalten Modelle zunächst eine 180°-Gierdrehung (Options.facingCorrection). Ändere es, wenn ein Pack eine andere Ausrichtung hat.

Review-Schleife

Vertraue keinem Batch, den du nicht angesehen hast. Ein Blatt zeigt, was hundert Log-Zeilen nicht erfassen.

  1. Blatt: python scripts/icon_sheet.py <icon_folder> sheet.png --match ^Armor_ Shield --strip-prefix, dann betrachte das Bild. Icons behalten ihr Seitenverhältnis, sodass ein 3×1-Gegenstand als Streifen erscheint – so wie er im Raster aussehen wird.
  2. Klassifiziere jedes schlechte Icon – der Fix unterscheidet sich:
    • Seitlich / liegend / Rückseite zur Kamera → pose es mit rotationOverride. Es wird als Euler(override) * facingCorrection angewendet, daher bedeuten Werte um (0,0,0) „wie erstellt, zur Kamera zeigend“: kleine Neigungen wie (-5, 15, 0) ergeben eine aufrechte 3/4-Ansicht. (0, 180, 0) zeigt die Rückseite. Null bedeutet „auto“, verwende also einen winzigen Nicht-Null-Wert, wenn du die erstellte Pose exakt haben möchtest.
    • Flaches Objekt (Schild, Platte, Münze) von der Kante gesehen → das Prefab hat normalerweise ein rotiertes Kind (Waffen-Anzeige-Prefabs drehen das Mesh oft um 90° auf X, damit es im Spiel flach liegt). Protokolliere localEulerAngles des Kindes, bevor du rätst; hebe es im Override auf und füge einen Roll hinzu, um die lange Seite entlang des Slots zu legen, z.B. (0, 90, 80) für ein flaches ovales Schild in einem 3×1-Slot.
    • Falsche Silhouette für den Slot (ein großes dünnes Modell in einem quadratischen Slot: Trainingspuppen, Rüstungsständer, Banner auf Stangen) → keine Rotation behebt das; tausche das Modell aus.
  3. Probiere Ersatzmodelle in einem einzigen Render aus: Weise vorübergehend mehrere vorhandene Gegenstände Kandidaten-Prefabs zu (item.iconModel = candidate, Override Null), rendere, erstelle ein Blatt, wähle aus. Setze dann die Gewinner in den Content-Code – wenn der Content-Build die Modelle bei jedem Durchlauf neu zuweist, werden die temporären Zuweisungen ohnehin überschrieben.
  4. Zeichne Posen im Content-Code auf, nicht nur in den Assets, damit ein Neubau mit „Daten überschreiben“ sie behält. Wende eine aufgezeichnete Pose nur an, wenn der Gegenstand keine eigene hat, sodass manuell angepasste Posen im Inspektor erhalten bleiben.
  5. Wiederhole Rendern und Blatterstellung, bis jedes Icon auf einen Blick lesbar ist.

Gute Modellquellen für Anziehbares: Statische modulare Charakterteile (z.B. Synty Modular Fantasy Hero Characters_ModularParts_Static/Chr_Torso_*_Static) ergeben weitaus bessere Brustrüstungs-Icons als Props wie Rüstungsständer oder Trainingspuppen – sie füllen einen quadratischen Slot und werden sofort als „Rüstung“ erkannt. Charakter-Anhang-Prefabs (Helme, Schulterpolster, Umhänge) eignen sich gut für die kleineren Slots. Statische Teile verwenden das normale Texturmaterial des Packs, sodass sie wie jedes andere Prop in deinen Shader konvertiert werden.

Fallstricke

  • Vorschauszenen haben keine Umgebungsbeleuchtung oder Skybox – ohne die Füll- und Randlichter wird die dem Hauptlicht abgewandte Seite schwarz gerendert.
  • Post-Processing und MSAA zerstören Alpha. Deaktiviere Post-Processing auf der Icon-Kamera (Tonemapping/Bloom schreiben Alpha = 1) und verwende Supersampling anstelle von MSAA.
  • Setze cam.scene = previewScene oder die Kamera rendert auch die geöffnete Szene.
  • Entferne Collider, deaktiviere Animators, Partikel-/Trail-/Line-Renderer an der Instanz – VFX-Kinder und Bind-Pose-Animatoren blähen sonst die Bounds auf oder erscheinen als Schlieren.
  • Verwende Pre-Multiplikation beim Herunterskalieren, sonst erhalten transparente Kanten dunkle Ränder von der Hintergrundfarbe.
  • Geskinnedte Charaktere werden in der Bind-Pose (T-Pose) gerendert; gib ihnen einen rotationOverride oder eine geposte Prefab-Variante.
  • Palette-texturierte Low-Poly-Modelle sehen grau aus, wenn ihre Palettentexturen Mipmaps haben (siehe den Skill unity-asset-pack-extraction).

Dateien

  • templates/Editor/ModelIconRenderer.cs – RenderBatch(IconJob[], Options), IconJob(model, cells, pngPath, rotationOverride), Menü Tools > Icons > Render Selected Prefabs (1×1-Icons in einen Icons/-Ordner neben jedem Prefab).
  • scripts/icon_sheet.py – beschriftetes Kontaktblatt von gerenderten Icons, filterbar nach Namen (benötigt Pillow).

Verwandte Skills