Migration notes: godot-performance-optimization
Incremental upgrade for topics this skill covers. Apply one hop, stabilize/test, then next. Never skip hops.
If the project is < 4.0, follow godot-version-migration era bridges (legacy → 3→4) until 4.0, then these hops. Official 3→4: Upgrading from Godot 3 to Godot 4.
3.x → 4.0
Official: Upgrading from Godot 3 to Godot 4
- 4.x baseline memory/binary size higher — re-measure budgets.
- 2D HDR off by default — overbright modulate; enable HDR 2D if needed (later 4.2+ setting).
- Servers renamed (
VisualServer→RenderingServer, physics 2D/3D servers). - Multithreading API changes — rewrite workers before claiming perf wins.
4.0 → 4.1
Official: Upgrading to Godot 4.1
Object.get_meta_listreturn type isArray[StringName](was PackedStringArray).WorkerThreadPool.wait_for_task_completionnow returnsError.RenderingServer.global_shader_parameter_get_list/ RD shader version lists returnArray[StringName].RenderingDevice.draw_list_beginstorage_textures typed asArray[RID].
4.1 → 4.2
Official: Upgrading to Godot 4.2
NOTIFICATION_NODE_RECACHE_REQUESTEDremoved from Node.- Mesh format upgrade — use Project → Tools → Upgrade Mesh Surfaces; Restart & Upgrade prevents downgrade.
- ImporterMesh/MeshDataTool/SurfaceTool compression flag widths →
uint64. - RenderingDevice BarrierMask enum values changed.
4.2 → 4.3
Official: Upgrading to Godot 4.3
- Binary serialization of scripted Objects/typed Arrays changed — re-test save/load of custom Resources.
PackedByteArraymay use compact base64 storage; older editors may not open 4.3 resources with large byte arrays.- Reverse Z depth — update custom shaders (depth compare,
POSITION.zassumptions). - Decal modulate converted sRGB→linear — visuals change.
- RenderingDevice barrier/draw_list API simplified (post_barrier params removed).
4.3 → 4.4
Official: Upgrading to Godot 4.4
@export_filestoresuid://paths from the Inspector (breaking vsres://expectations).FileAccess.store_*methods returnboolsuccess.Curveenforcesmin_value/max_value— adjust curves that used points outside[0, 1].RenderingDevice.draw_list_beginsignature overhauled (params removed + breadcrumb).Shaderdefault texture parameter types useTexture/TextureLayered.VisualShaderNodeVec4Constantinput type → Vector4 — recreate constants.
4.4 → 4.5
Official: Upgrading to Godot 4.5
Resource.duplicate(true)deep-duplicates only internal resources; useduplicate_deep(DEEP_DUPLICATE_ALL)for old behavior.Node.get_rpc_configrenamed toget_node_rpc_config.ProjectSettings.add_property_infowarns on invalid/usagekeys.RenderingServer.instance_reset_physics_interpolation/instance_set_interpolatedremoved.
4.5 → 4.6
Official: Upgrading to Godot 4.6
- TSCN gains unique node IDs (large VCS diffs on first 4.6 save — expected).
Performance.add_custom_monitorgains optionaltype.- Glow default blend Screen (brighter) — retune Environment glow; Mobile glow rewrite looks different.
- Volumetric fog blending brighter — reduce density/energy.
- New project defaults: D3D12 on Windows; Jolt for 3D physics — document for templates/benchmark baselines.
MeshInstance3D.skeletondefault is empty NodePath — enable compatibility setting if old parent-skeleton behavior needed.
4.6 → 4.7
Official: Upgrading to Godot 4.7
- New projects default stretch
canvas_items+ aspectexpand(wasdisabled/keep) — note vs legacy viewport stretch in UI perf sections. Object.is_classtakesStringName.- Setting an element of a packed array property no longer calls the property setter for the whole array.
- Overrides of methods with typed returns must actually
return(addreturn nullif needed). Texture2D.get_format()unified on base class — use when teaching format-specific import/shader pipelines.- Prefer AreaLight3D for rectangular soft lights; HDR output available on major platforms.