# Removing thin instances vs gpupicker

**URL:** <https://forum.babylonjs.com/t/removing-thin-instances-vs-gpupicker/57989>\
**Category:** Questions\
**Created:** [April 22, 2025, 11:34am UTC](https://forum.babylonjs.com/t/removing-thin-instances-vs-gpupicker/57989 "2025-04-22T11:34:26Z")\
**Posts on this page:** 1\
**Showing post:** 4

<div class="post-metadata">

**Author:** ![phaselock](https://avatars.discourse-cdn.com/v4/letter/p/da6949/32.png) [@phaselock](https://forum.babylonjs.com/u/phaselock)\
**Post date:** [April 23, 2025, 8:03am UTC](https://forum.babylonjs.com/t/removing-thin-instances-vs-gpupicker/57989/4 "2025-04-23T08:03:42Z")

</div>

I’ll update doc when I have a better grasp of what is going on.  
Another repro for instances this time: [Babylon.js Playground](https://playground.babylonjs.com/#NNC5Y2)

Beginning to see the pattern that

a) any instances/thin instances added/removed needs a `picker.setPickingList([...list])` update to refresh the gpu. for instances, do it after `instance.dispose();`  
b) root meshes used for normal instances must be enabled and also in the list for gpu picking to work, even if they are not meant to be seen.  
c) root meshes for thin instances need a gpu refresh for any `matrix buffer` changes.  
d) spawning the first thin instance of a mesh gives `thinInstanceIndex` of `undefined` on `pickAsync` until the gpu pick list is refreshed.  
e) `renderOverlay` or any shader/plugin with similar behaviors doesn’t work with gpu picking, this happens for stock, clones, meshes with no instances/thin instances.

Maybe I should just shut up and go read the source… 😛

---

_[View the full topic](https://forum.babylonjs.com/t/removing-thin-instances-vs-gpupicker/57989)._
