Entwicklung - Unity3D - Web

Online-Gedächtnis - Stichpunkte zur Erinnerungshilfe

NAVIGATION - SEARCH

Mobile GPU - Optimierung

  • Niedrige Vertex-Anzahl bei Modellen
  • "Occlusion culling" (auch automatisch durch "viewing frustrum" - Sichtweite der Kamera)
  • komplexe Shader vermeiden, "Mobile"-Versionen nutzen (vorallem keine "fragment shader", also Pro-Pixel-Shader)
  • Texturen komprimieren und Größe reduzieren
  • Mipmaps nutzen (nicht für UI!)
  • Level of Detail (LoD) anwenden
  • wenige Materialen verwenden -> besseres "batching", siehe DrawCall - Optimierungen
  • Texturen zusammenfassen in "texture atlases" (dann auch entsprechend Renderer.sharedMaterial verwenden)
  • Light Mapping ("baking") verwenden, siehe Licht - Optimierungen
  • Transparenz vermeiden (bzw. alpha cut/test Shader)
  • wenige Lichter
  • Post Processing minimieren
Läuft das Spiel schneller bei niedrigerer Auflösung? -> Füllratenproblem
  • Alpha-testing Shader gegen Alpha-blend austauchen
  • einfachere Shader verwenden (Mobile, kein pow, exp, log, sin, tan usw.)

DrawCall - Optimierungen

Static Batching

Statische Objekte sollten als "static" markiert werden, Unity fasst diese Objekte dann in einem DrawCall zusammen.
Allerdings nur Objekte, welche das selbe Material verwenden. D.h. hier sollten "Texture atlases" verwendet werden.



Dynamic Batching

Unity fasst nicht statische Objekte automatisch fürs "Dynamic Batching" zusammen.
Bedingungen:
  • Objekte welche unter 900 vertex (Ecken) haben
  • gleiche Skalierung
  • gleiches Material
  • keine Lightmaps
  • keine Multi-Pass Shader

Licht - Optimierungen

Objekte welche statischen Schatten ("baked") empfangen sollen, sollten im Modell "Generate Lightmap UVs" aktiviert haben.
Unity nutzt dann den 2. UV-Kanal zum Ablegen der Schatteninformationen.
Weiterhin sollten die Objekte in der Szene statisch sein, siehe DrawCall - Optimierungen.

In den Lighting-Einstellungen der Szene sollte dann "Baked GI" aktiviert sein. (Nicht mit "Precomputed Realtime GI" kombinieren!)


Ausführung der Berechnung bzw. "Auto"Aktivierung nicht vergessen.

Arbeitsspeicher - Optimierung

Texturen
  • wenn machbar auf Mipmaps verzichten
  • komprimieren
  • Read/Write abschalten
  • Größe anpassen

Analyse und Maßnahmen

  • Profiler.GetRuntimeMemorySize() RAM-Verbrauch durch Objekte
  • Resources.UnloadAsset (Referenz bleibt bestehen) 
  • Resources.UnloadUnusedAssets (unreferenzierte)
  • Vor und nach dem Laden eines Levels System.GC.Collect
  • structures -> Stack, classes -> Heap
  • foreach vermeiden, da Enumeratoren erschaffen werden
    • analog anonyme Methoden und Lambdas
  • AssetBundles verwenden
  • strings nicht konkatenieren, ansonsten StringBuilder nutzen
  • Asset pool verwenden bei häufigen Objekten, wie z.B. Geschosse