avoid dynamic branching or not

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’s what I thought. bummer. thanks anyway

You could draw all 1000 every time with arrowheads, and point-color them so that some arrow heads have alpha 0.

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).

even with Order-Independent Transparency turned on?

If that works and Anti-Aliasing doesn’t work with it, can one render double-res and scale down?

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.