Optimization

Introduction

Godot follows a balanced performance philosophy. In the performance world, there are always trade-offs, which consist of trading speed for usability and flexibility. Some practical examples of this are:

  • Rendering large amounts of objects efficiently is easy, but when a large scene must be rendered, it can become inefficient. To solve this, visibility computation must be added to the rendering. This makes rendering less efficient, but at the same time, fewer objects are rendered. Therefore, the overall rendering efficiency is improved.
  • Configuring the properties of every material for every object that needs to be rendered is also slow. To solve this, objects are sorted by material to reduce the costs. At the same time, sorting has a cost.
  • In 3D physics, a similar situation happens. The best algorithms to handle large amounts of physics objects (such as SAP) are slow at insertion/removal of objects and raycasting. Algorithms that allow faster insertion and removal, as well as raycasting, will not be able to handle as many active objects. And there are many more examples of this! Game engines strive to be general-purpose in nature. Balanced algorithms are always favored over algorithms that might be fast in some situations and slow in others, or algorithms that are fast but are more difficult to use. Godot is not an exception to this. While it is designed to have backends swappable for different algorithms, the default backends prioritize balance and flexibility over performance. General optimization tips.

    Common

  • General optimization tips
  • Measuring performance
  • Profilers
  • Principles
  • Appendix
  • Optimization using Servers

    CPU

  • CPU optimization
  • Measuring performance
  • CPU profilers
  • Manually timing functions
  • Caches
  • Languages
  • Threads
  • SceneTree
  • Physics

    GPU

  • GPU optimization
  • Draw calls, state changes, and APIs
  • Pixel cost versus vertex cost
  • Pixel/fragment shaders and fill rate
  • Transparency and blending
  • Multi-platform advice
  • Mobile/tiled renderers
  • Optimization using MultiMeshes

    2D

  • Optimization using batching

    3D

  • Optimizing 3D performance
  • Culling
  • Level of detail (LOD)
  • Bake lighting
  • Animation and skinning
  • Large worlds
  • Animating thousands of objects

    Multi-threading

  • Thread-safe APIs
  • Using multiple threads