This is extremely unlikely to be a good technique (and it isn't new) but here are two alternatives. Even in the demo video, beneath the lens flares and other excess, the particles are aliasing like crazy.<p>First of all, particles like this are usually only a few pixels in size, so the shape doesn't really matter as much as the area. Because of this, I don't think there is much gained, but there is a lot lost since it aliases so badly.<p>Renderman actually creates particles as two bilinear patches that make up the same shape as the intersection given by these two triangles. You could do the same thing with a quad strip, which would still also take only 6 vertices. The gpu will deal with the quads itself, possibly by creating two triangles for each quad. This is very unlikely to be a performance hit since it does not affect shading.<p>A second way of creating a semi-transparent particle would be make a triangle strip that rotates around one center point. The center point has an alpha of 1, the outer points have an alpha of 0. The interpolation takes care of gradient transparency to the edges, and even with 5 outer vertices the shape + gradient should easily look good enough to hold up while taking up around 16 pixels.<p>Shadows - the best way in these situations to control shadows is usually to scale down the particle (or hair). Remember that the shape or look on a micro scale doesn't matter as much as the integral of the area * integral of the transparency.
Seems like a very simple expansion on this technique would be to keep a rolling framebuffer, and blend the last particle draw with the current one. This would remove the flickering, display the fake alpha properly for still screenshots, and work for variable framerate.<p>Assuming your GPU will let you hold onto a previous frame's draw result (of just the particles) and blend it relatively cheaply with the new one, it wouldn't cost very much to implement. One full framebuffer blend should be much, much cheaper than blending the individual dots.
This is really cool. I'm curious how this will look on a Gear VR, since those run at 60fps and require every optimization they can get to maintain that on a cell phone.
I really like this. It would be nice to see some benchmarks versus a quad based solution where the quad is tessellated in a geometry shader with a fragment shader drawing the particle or using a texture. My guess would be that the bottleneck might be pcie but my knowledge of the gpu performance is a little outdated.