Devblog: Neue Pumpjack-Implementierung & Performance-Optimierung

In den letzten Tagen habe ich intensiv an einem neuen Modell für das Spiel gearbeitet – eine Ölpumpe (Pumpjack). Diese wird im späteren Mindgame wichtig sein, um Öl automatisch zu fördern und den Tank des Spielers zu befüllen.
Das Modell wurde komplett in Blender erstellt und besteht aus mehreren Gruppen:

  • Bohrkopf & Rohranschluss mit Absperrventil
  • Pumpmechanik mit Balancierbalken und Gegengewicht
  • Gerüstkonstruktion mit Leitet und Wartungsplattform
  • Seile & Antriebseinheiten für die realistische Bewegungsanimation

Ich habe mich beim Design an industriellen Pumpjacks orientiert, um einen glaubwürdigen Look zu schaffen, der auch ins spätere Spielumfeld passt.
Die Texturen habe leichte Abnutzungsspuren und Rost, um dem Modell einen realistischen, gebrauchten Look zu geben.

Das Performance-Problem

Nach der ersten Implementierung in Unity trat jedoch ein massives Problem auf:
Das Modell hatte viel zu viele Edges und Polygone, was für eine Einzelansicht zwar schön, aber im Spielbetrieb extrem ineffizient war.

  • Ursprüngliche Polygonanzahl: sehr hoch (Detailgrad für Nahaufnahmen optimiert)
  • Test mit 20 Pumpen im Spiel: nur ~ 40 FPS
  • Ziel: Mehr Pumpen gleichzeitig darstellen können, ohne die Performance zu zerstören

Die Lösung: Remesh & Polygon-Reduktion

Um das Problem zu lösen, habe ich in Blender gezielt Optimierungen durchgeführt:

  1. Modifier „Remesh“ eingesetzt, um überflüssige Geometrie zu reduzieren
  2. Manuelle Vereinfachung einzelner Bauteile
  3. Zusammenfassung von Bauteilen mit ähnlicher Geometrie
  4. Entfernen von nicht sichtbaren Flächen (Hidden Faces)

Das Ergebnis:

  • Polygonanzahl drastisch reduziert
  • Test mit 50 Pumpen gleichzeitig: ~ 700 FPS (in meiner Testumgebung)
  • Optik bleibt auf mittlere Distanz nahezu unverändert

Textur-Workflow & Troubleshooting

Bei der Aufbereitung der Pumpjack-Assets gab’s neben der Geometrie-Optimierung noch einige Stolperkanten im Textur-Bereich. Hier die wichtigsten Punkte – inklusive Lösungen und „Lessons learned“.

1.) Baking nicht gespeichert -> neu prüfen

  • Problem: Nach dem Baking wurden die Texturen versehentlich nicht final gespeichert. Beim nächsten Start waren Slots leer bzw. auf alte Dateien verlinkt.
  • Folge: Inkonsistente Materialien; manche Meshes wirkten untertexturiert
  • Lösung:
    • In Blender nach jedem Baken Image Editor -> Image -> Save (oder „Save All Images“) ausführen.
    • Mini-Checkliste vor Export: Sind alle gebackenen Images gespeichert?

2.) Doppelte Faces warfen Schatten

  • Problem: Überlappende/gedoppelte Polygone erzeugten dunkle Artefakte im Render (z-Fighting/Shadow-Acne).
  • Ursache: Merge-Operationen beim Umbauen + importierte Bauteile mit deckungsgleichen Flächen.
  • Lösung:
    • In Edit Mode: Mesh -> Clean Up -> Merge by Distance (ehem. „Remove Doubles“)
    • Mesh -> Clean Up -> Delete Loose für schwebende Fragmente
    • Kanten neu verbinden (F / Bridge Edge Loop), wo nötig
    • Kontrolle in Face Orientation (Blender: Overlays) -> alle Normals nach außen (Shift + N)

3.) Mehrfaches Remeshing für ideale Polyanzahl

  • Problem: Ein einmaliger Remesh-Pass lieferte entweder zu grobe Silhouetten oder noch zu hohe Polycounts.
  • Lösung:
    • Iteratives Vorgehen: Remesh (Block/Sharp) in Stufen + gezieltes Decimate auf Kleinteilen
    • Kritische Silhouette-Teile manuell nachbearbeiten (Bevel -> Apply -> Decimate)
    • Ergebnis: Von ~ 40 FPS bei 20 Pumpen auf ~ 700 FPS bei 50 Pumpen in der Testszene

4.) Texturen luden in Unity falsch

  • Problem: In Unity fehlten Maps oder zeigten falschen Inhalte.
  • Ursache: Falsche Pfade/Dateinamen; zwischenzeitlich verschobene Ordner; Autosave-Bakes ohne eindeutigen Namen.
  • Lösung:
    • Einheitliche Ordnerstruktur
    • Re-Link in Blender vor dem Export (File -> External Data -> Find Missing Files)
    • In Unity Material-Inspector alle Maps prüfen (Base, Normal, Rough/Metal/AO je nach Workflow)
    • Import-Settings kontrollieren: sRGB für BaseColor an, Normal Map als „Normal Map“ markieren

5.) 4K -> 2K Downscale für Performance

  • Problem: 4K-Texturen lieferten kaum sichtbaren Mehrwert auf Spiel-Distanz, belasteten aber VRAM und Streaming.
  • Lösungen:
    • Master-Bakes bleiben in 4k archiviert; In-Game-Build in 2K exportiert.
    • Unity Import Settings: Max Size 2048, Kompression aktiv (Basis; BC-Format je Plattform)
    • Ergebnis: Sichtbare geringere Memory-Last bei identischer Wahrnehmung im Gameplay-Abstand.

Quick-Checklist vor dem Export

  • [] Alle gebackene Images gespeichert & eindeutig benannt
  • [] Doppelte Faces entfernt, Normal geprüft
  • [] Remesh/Decimate iterativ abgestimmt (Silhouette ok, Polybudget passt)
  • [] Textur-Pfade konsistent; in Unity alle Maps korrekt zugewiesen
  • [] 2K-Variante für Build; 4K-Master extern archivieren

Fazit & Nächste Schritte

Mit der optimierten Version kann die Pumpe nun ohne große Performanceeinbußen in großer Zahl eingesetzt werden.
Als Nächstes plane ich:

  • Die Animationslogik für den Pumpkopf zu implementieren
  • Ölfluss-Simulation für das Förderrohr
  • Platzierungs- und Upgrade-Mechanik im Spiel

Hier sind einige Renderbilder des Modells aus verschiedenen Perspektiven (High-Poly):

Begriffe & Tools – kurz erklärt


Entdecke mehr von DaonWare

Melde dich für ein Abonnement an, um die neuesten Beiträge per E-Mail zu erhalten.

Kommentar verfassen

Nach oben scrollen