# Mesh.\_isWorldMatrixFrozen not serialized

**URL:** <https://forum.babylonjs.com/t/mesh-isworldmatrixfrozen-not-serialized/63255>\
**Category:** Questions\
**Tags:** serialization, mesh, matrix\
**Created:** [April 23, 2026, 7:45am UTC](https://forum.babylonjs.com/t/mesh-isworldmatrixfrozen-not-serialized/63255 "2026-04-23T07:45:32Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![kzhsw](https://avatars.discourse-cdn.com/v4/letter/k/848f3c/32.png) [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Post date:** [April 23, 2026, 7:45am UTC](https://forum.babylonjs.com/t/mesh-isworldmatrixfrozen-not-serialized/63255/1 "2026-04-23T07:45:32Z")

</div>

Version: git HEAD

TransformNode.\_isWorldMatrixFrozen is currently not serialized nor parsed for TransformNode, but it’s parsed for mesh:

> <https://github.com/BabylonJS/Babylon.js/blob/ea46c8fa304d66826163982df855fb883748d90c/packages/dev/core/src/Meshes/mesh.ts#L4593-L4597>

But in curr codebase there is nowhere `parsedMesh.freezeWorldMatrix` get serialized after a quick search, so serialization will lost this config.

Also, ever considered extending this to TransformNodes?

---

<div class="post-metadata">

**Author:** ![Evgeni\_Popov](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/evgeni_popov/32/4432_2.png) [@Evgeni\_Popov](https://forum.babylonjs.com/u/Evgeni_Popov)\
**Post date:** [April 23, 2026, 1:21pm UTC](https://forum.babylonjs.com/t/mesh-isworldmatrixfrozen-not-serialized/63255/2 "2026-04-23T13:21:22Z")

</div>

Good catch, thanks for the report (and for digging into the source)!

You’re right on both counts:

1. `Mesh.Parse` was reading `freezeWorldMatrix` but nothing on the producer side ever wrote it, so the value was always lost on a `.babylon` round-trip.
2. `TransformNode` had no support at all even though `_isWorldMatrixFrozen` lives there.

Fixed in [PR #18373](https://github.com/BabylonJS/Babylon.js/pull/18373):

- `Mesh.serialize()` and `TransformNode.serialize()` now emit `freezeWorldMatrix: true` when the node is frozen.
- `TransformNode.Parse()` defers the freeze via an internal waiting flag (declared, not initialized, to avoid pushing every instance past V8’s dictionary-mode threshold).
- `babylonFileLoader` runs a freeze pass for transform nodes after parent wiring, before the existing mesh freeze pass.

Round-trip unit test added.
