Optimisation

UE4

Android

Astuces générales

  • Limiter les BP qui Tick
    • timeline
    • timer
    • event
    • tick interval
    • activer/désactiver tick
  • Limiter l'utilisation de fonctions "chères"
    • get All Actors From Class
    • For Loop - mais si nécessaire, penser au break!
    • spawnActor
  • Utiliser le C++ pour des calculs complexes dans le tick

Astuces générales (2)

  • Limiter le nombre de triangles
  • Création de sprites animés 2D à partir de modèle 3D
  • Imitation lumière simple avec textures
  • Combiner plusieurs objets 3D en 1
    • un modèle complexe > plein de modèles simples ...en général ...mais pas toujours
  • Utiliser LOD (si objets visibles à != distances)
  • Détruire (ou recycler) les objets qui ne seront plus affichés

Astuces générales (3)

  • Limiter le nombre de Shader dans une scène
  • Simplifier les shaders :
    • pas trop de math
    • pas trop de fonctions procédurales
    • pas trop de if ..
    • placer les calculs complexes au niveau vertex plutôt que pixel
    • éviter transparence
  • Eviter les lumières dynamiques
  • Limiter les ombres dynamiques
  • Pas d'overlap des lumières "stationary"

Support Android

  • Le plus répandu : OpenGL ES3.1
  • Le plus rapide : Vulkan
  • Les mobiles doivent supporter:
    • GL_EXT_texture_buffer
    • GL_EXT_color_buffer_half_float

 

Documentation UE4 mobile

Mobile Rendering

le + rapide mais peu d'effets

  • Project settings - Rendering - Mobile
    • mobile HDR : décoché = pas de lumières, pas de post-process
    • Disable vertex fogging in mobile shaders : coché = pas de brouillard
    • maximum number of CSM cascades to render : 2 (utilisé pour lumières directionnelles dynamiques)
    • mobile MSAA : No-MSAA (multi-sample anti aliasing)

Mobile Material

le + rapide mais peu d'effets

  • Documentation UE4 Material

  • Eviter la transparence !

  • Node material principal - Details panel

    • use full precision : décoché

    • use lightmap directionality : décoché

    • fully rough : coché (pas d'effets de réflexion!)

       

  • Project settings - Android Material Quality - ES31

    • possibilité de forcer certains paramètres en fonction des profils de mobile Low/medium/high

Mobile Lighting

 

 

  • Documentation UE4 Lighting

  • Objets dynamiques ne projettent pas d'ombres
  • Tous les types de lumières ne sont pas supportés

  • Lumières statiques recommandées

Mobile Texture

 

 

 

  • Dimension max : 2048
  • Dimension = 2^n
  • Pas forcément carré (mais recommandé)
  • Compression Settings : TC_Default ou TC_NormalMap
  • Propriété sRGB cochée pour toute les texture map (mais pas normal maps ou mask)
  • ...

     

Mobile Mesh

 

 

 

  • Skeletal mesh, static mesh, landscape, CPU particle sprites, particle mesh
  • Pour chaque mesh : Nombre de vertices < 65535
  • Pour chaque skeletal mesh : Nombre de bones < 75
  • LOD

     

Mobile Scale, Frame Pacing

 

  • Scale Factor
    • joue avec la résolution de sortie du projet
    • créer le fichier DefaultDeviceProfiles.ini dans le répertoire config du projet
      0.0 = résolution native du mobile
      1.0 = 1280 / 720
      1.4 = 1280 x 1.4 / 720 x 1.4
  • Frame Pacing
    • permet de limiter le nombre de fps

Réduction taille APK

 

 

  • Commencer le projet avec un template vide (no starter content)
  • Suppression de tous les assets inutiles
  • Désactiver les plugins inutilisés
  • Project settings - Packaging - Packaging - advanced - Create compressed cooked package : coché

Mobile Test Rendu

 

 

  • Voir le rendu dans l'editeur principal
    Settings - Preview Rendering Level - Android ES3.1

  • Voir le coût des material/lumières

    • View Modes list

    • Optimization Viewmodes

    • Shader Complexity

       

Mobile Test

  • Video Profiling Optimization

  • Ouvrir la console

    • appuyer sur la touche ²

    • tap avec 4 doigts sur mobile

  • stat fps

  • Pour tester dans des conditions correctes:

    • Play in Standalone

    • Minimizer l'éditeur

    • Désactiver Frame Rate Smoothing (project settings)

    • Désactiver VSync (console : r.vsync 0)

Mobile Command Stat

  • stat unit / stat unitgraph / stat rhi

    • frame : temps total pour finir une frame

    • game : temps de calcul du code C++ ou Blueprint

    • draw : temps de rendu côté CPU

    • gpu : temps de rendu côté GPU

    • draws / DrawPrimitive calls : < 700 (mobile)

    • prims / Triangles drawn : < 500k (mobile)

  • StartFPSChart / StopFPSChart
    • enregistre ces valeurs dans un fichier CSV

Mobile Command Stat (2)

  • stat scenerendering

    • détails des draw call

  • ProfileGPU

  • showFlag.XXX 0 / showFlag.XXX 1

    • désactiver / activer des fonctionnalités

    • showFlag.StaticMeshes, SkeletalMeshes, Particles, Lighting, Translucency, ReflectionEnvironment, InstancedStaticMeshes, QuadOverdraw, ShaderComplexity, LightComplexity ...

  • Window - Developer Tools - Session Frontend - profiler tab

A rendre !

  • Tester les outils de stat/profiling

    • Créer/ouvrir un projet

    • évaluer les performances de base

    • ajouter/modifier 1 fonctionnalité/élément

    • réévaluer les performances

    • recommencer...

  • Documenter tout ça dans un fichier word

    • texte explicatif

    • captures d'écran des changements

    • captures d'écran des modifs de performances

    • indiquer comment trouver le problème à partir des outils de stat/profiling

Optimisation UE4 - Mobile

By tetorea

Optimisation UE4 - Mobile

Quelques trucs pour optimiser les jeux UE4, surtout pour des jeux mobiles Android

  • 741