Malcolm, this is probably again one of the cases were you can’t tell which approach is better, but I’ll try my luck anyway, as I find it hard to measure the things reliably.
Imagine you want to render 1000 lines (as instances). 600 of those lines need an arrow tip on one side while the other 400 don’t.
So should I use a dynamic branch in the geometry shader to decide if I need to draw an arrow or
should I seperate this into two seperate instanced geos (1 for just the lines, another for lines with arrow heads), therefore avoiding the dynamic branch?
Its impossible to say really. If you are CPU bound then you want to avoid the extra batch required for the 2nd render, but if you are GPU bound you want to avoid the dynamic branch.
That unfortunately won’t work because the 0 alpha arrowheads will still write values to the depth buffer, causing other geometry drawn afterward to be occluded by the arrowheads (even if their alpha is 0).
Order independent transparency would work if the scene allows for it. It just depends how dense the particles are and how much overdraw there is.
The new Particle sort feature in the Sort SOP could also help with this.