That led to creating "Curse The League". I built it with R3F and learned a lot optimizing draw calls throughout the build. In the hallway scene I have 84 portrait frames, each with a spot for a team logo and a number. At the peak with those, the character model and hallway model I was up to 500+ draw calls. I've never worked with a texture atlas before, so I built the portrait frames into the hallway model and remapped the uvs for the logo + number slots onto a texture atlas and ended up with around 10 draw calls for the whole thing.
Check it out at: https://cursetheleague.com/