# Number of meshes significantly drop fps

**URL:** <https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234>\
**Category:** Questions\
**Tags:** performance\
**Created:** [August 25, 2025, 5:39pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234 "2025-08-25T17:39:59Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![TooCalm](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/toocalm/32/3301_2.png) [@TooCalm](https://forum.babylonjs.com/u/TooCalm)\
**Post date:** [August 25, 2025, 5:39pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/1 "2025-08-25T17:39:59Z")

</div>

Hey guys,

I’m trying to improve fps in my scene.

i simplified scene to have only few types of meshes. all of them are instances.

when i have 4000 meshes total i have ~105 fps

when i have 9000 meshes( but in camera view i see the same picture all of other meshes are outside of camera view) i have 23-30 fps

all other parameters almost the same

Looks like babylon have some calculations for meshes ( i checked different culling strategies but no performance improve)

 ![image](https://us1.discourse-cdn.com/flex024/uploads/babylonjs/original/3X/3/4/347ca3aa3af3a2f2c2f7308b33dd1c87090ba158.png)

Any thoughts? Thanks!

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [August 25, 2025, 5:48pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/2 "2025-08-25T17:48:09Z")

</div>

you can try multiple things:

- Mark all meshes as always selected so there is no more culling
- Try to freeze your scene

But mostly do a profiler and see which functions are the slower

Nice read for you: [Optimizing Your Scene | Babylon.js Documentation](https://doc.babylonjs.com/features/featuresDeepDive/scene/optimize_your_scene/)

---

<div class="post-metadata">

**Author:** ![TooCalm](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/toocalm/32/3301_2.png) [@TooCalm](https://forum.babylonjs.com/u/TooCalm)\
**Post date:** [August 25, 2025, 5:50pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/3 "2025-08-25T17:50:57Z")

</div>

Hey @Deltakosh ,

already did everything(which suitable for me) from link.

what you mean freeze scene? i already froze everything i could( materials, worldmatrixes)

Thanks!

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [August 25, 2025, 5:53pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/4 "2025-08-25T17:53:26Z")

</div>

I meant this one: [Optimizing Your Scene | Babylon.js Documentation](https://doc.babylonjs.com/features/featuresDeepDive/scene/optimize_your_scene/#freezing-the-active-meshes)

How is your profiler? Who are the main contenders?

---

<div class="post-metadata">

**Author:** ![TooCalm](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/toocalm/32/3301_2.png) [@TooCalm](https://forum.babylonjs.com/u/TooCalm)\
**Post date:** [August 25, 2025, 5:58pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/5 "2025-08-25T17:58:32Z")

</div>

![image](https://us1.discourse-cdn.com/flex024/uploads/babylonjs/original/3X/6/d/6dea0d21f0c64f8655995e55c0ff8377189f0019.png)

 ![image](https://us1.discourse-cdn.com/flex024/uploads/babylonjs/original/3X/2/a/2a278ccc841400527a14580455cea01c68a2e6dd.png)

24068 line from babylon.js file. it takes 54.38 ms

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [August 25, 2025, 6:06pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/6 "2025-08-25T18:06:39Z")

</div>

does not help:) We need to see what is inside the ignore list in your case

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [August 25, 2025, 6:07pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/7 "2025-08-25T18:07:33Z")

</div>

You should be able to see more details with map files (that are part of the package).

---

<div class="post-metadata">

**Author:** ![TooCalm](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/toocalm/32/3301_2.png) [@TooCalm](https://forum.babylonjs.com/u/TooCalm)\
**Post date:** [August 25, 2025, 6:34pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/8 "2025-08-25T18:34:57Z")

</div>

![image](https://us1.discourse-cdn.com/flex024/uploads/babylonjs/original/3X/8/f/8fe34a5a55b50000f640a38a6478768030f5693b.png)

like that?

---

<div class="post-metadata">

**Author:** ![TooCalm](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/toocalm/32/3301_2.png) [@TooCalm](https://forum.babylonjs.com/u/TooCalm)\
**Post date:** [August 25, 2025, 6:58pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/9 "2025-08-25T18:58:28Z")

</div>

this is profile for case when 4000 meshes(high performance)

 ![image](https://us1.discourse-cdn.com/flex024/uploads/babylonjs/original/3X/b/1/b187f5471cd205495c026bbf4413500f0a34e672.png)

i noticed that there is sometimes no animate call and it’s shorter than in 9000 meshes case

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [August 25, 2025, 7:13pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/10 "2025-08-25T19:13:29Z")

</div>

You have a lot on the RTT. Do you have mirrors or shadows? This may be the opportunity to optimize what is render inside the RTT

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [August 25, 2025, 7:13pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/11 "2025-08-25T19:13:59Z")

</div>

evaluate active mesh should be far smaller if you are freezing the scene.

We will need a repro in the PG to help further

---

<div class="post-metadata">

**Author:** ![TooCalm](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/toocalm/32/3301_2.png) [@TooCalm](https://forum.babylonjs.com/u/TooCalm)\
**Post date:** [August 25, 2025, 7:20pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/12 "2025-08-25T19:20:14Z")

</div>

i disabled shadows for this test. what is RTT?

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [August 25, 2025, 7:30pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/13 "2025-08-25T19:30:49Z")

</div>

RenderTargetTextures

---

<div class="post-metadata">

**Author:** ![roland](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/roland/32/38940_2.png) [@roland](https://forum.babylonjs.com/u/roland)\
**Post date:** [August 30, 2025, 6:47pm UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/14 "2025-08-30T18:47:32Z")

</div>

As @Deltakosh said, freezing and selecting all as active should skip the mesh selection loop, this is your main concern.

#38 from here:

> [@Best Practices for Optimizing Babylon.js Scenes (not just) on Lower-End Devices](https://forum.babylonjs.com/t/best-practices-for-optimizing-babylon-js-scenes-not-just-on-lower-end-devices/58688):
>
> Hey! When creating the engine (use WebGPU is available) ask for a high-performance device. Drains more battery power but who cares if it’s a game?! smileynew WebGPUEngine(canvas, { powerPreference: "high-performance" }) or new Engine(canvas, true, { powerPreference: "high-performance", }); WebGPU: [GPU/requestAdapter](https://developer.mozilla.org/en-US/docs/Web/API/GPU/requestAdapter) WebGL: [WebGLRenderingContext/getContextAttributes](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/getContextAttributes) If this fails, fall back to powerPreference: "default" or just omit it. [Use instances of even better go with …](https://doc.babylonjs.com/features/featuresDeepDive/mesh/copies/instances)

It’s tested and it works.

Your draw calls are pretty low in both cases so this should really help.

---

<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:** [October 17, 2025, 8:53am UTC](https://forum.babylonjs.com/t/number-of-meshes-significantly-drop-fps/60234/15 "2025-10-17T08:53:35Z")

</div>

Seems most CPU time taken by MorphTargetManager.\_syncActiveTargets, which updates the influence of each morph target. It seems there is a lot of meshes animated morph targets, or a mesh with a lot of animated morph targets.  
To optimize for fps, consider reducing the count of morph target per mesh, removing static morph targets, and replacing morph targets with bones if possible.

Oh, wait, seems for mesh with multiple animated morph targets, \_syncActiveTargets would be called multiple time for the same mesh, this could be something needed to be fixed.
