Maybe I was a little bit fast and did not get what you really want.
I use the SpriteBatch Class to draw many 2D Sprites onto a texture that is attached to a 3D Plane. This 3D Plane fills the entire screen and it is a little in the background, so I can draw 3D Elements in the foreground.
This is not what you want, because you want 2D Sprites with individual z-positions and have the sprites always face the camera. My sprites are all at the same z-position. And the BatchElement Class does not have a z-position at all.
So what you want to do is draw multiple 3D Planes, one for each sprite. Maybe they use the same texture but different UVs. But nevertheless drawing this Quads without batching them is a bad idea, because every billboard NPC would be a drawcall. If this sprites stay on there positions you could merge them to one Mesh and it would be just one drawcall. But if they should move, then you can’t merge them.
But maybe it’s no problem for you because you don’t want to draw very much billboard NPCs, like 20 or 50 or 100. Then it would be ok, but still not a very efficient way.
So how can you achieve this? Maybe using Particles?
I have made 2D Billboards in the openfl away3D engine. There I can drawbatch tenthousands of Sprites with individual z-positions. But I did not try this with the heaps engine.
I hope I did not make you dissapointed now. And yesterday was a long night, so it could be that I wrote to much nonsense. But I will try to figure it out too and will come back, because it is an interesting task.