You’re right, the
_unfreeze() methods are not meant to be called by the end user, but it’s still working for your use case (they are public). However,
freezeActiveMeshes is doing its work in a deferred callback (namely in
scene.executeWhenReady) so you should do the same thing else
_unFreeze will be called too early:
Frustum check can be avoided by setting
mesh.alwaysSelectAsActiveMesh = true on each mesh or simply by setting
scene.skipFrustumClipping = true at the scene level.
LOD selection does literally no time if the mesh has no LOD, there is a check at the start of the function that returns early.
Things are quite interleaved and so just making freeze + needsDepthPrePass work is not really possible.
What you can do that also work in your use case is to override the
_evaluateActiveMeshes function with en empty function: