"Never test run anything that compiled successfully."
- Leif Kusoffsky

BSP Blending
Monday, February 6, 2017 | Permalink

Like my last demo, this is sort of a modern take on an old idea. Sorting rendering back-to-front with a BSP isn't exactly a new idea, but a parallel traversal in a compute shader might be. I've been pondering on this idea for a lot longer than I care to admit, it's probably been in my TODO list for over 5 years, but I finally got around to play with it and see if it was meaningful. My original idea was actually to traverse the BSP on the fly in the vertex shader, which of course is entirely possible, but ultimately decided that it makes more sense to do it in a separate compute pass.

Either way, enjoy the demo, and hope it's useful for something.

Name

Comment

Enter the code below



Jameel
Thursday, February 9, 2017

Any new cubemaps in the foreseeable future?

Humus
Thursday, March 2, 2017

Sure, I have a bunch in the pipeline.

Alundra
Wednesday, March 29, 2017

Does this technique works for all kind of static mesh and give a big boost in performance because BSP is also used mostly to clip the geometry to win lot of performance in a big static mesh which represent the static part of the scene in one geometry if i'm right. I'm not well experienced with all these kind of optimization so maybe you could give there hints about all that, is it good to use BSP tree for the full static part or have all splitted object and use one octree is better ?

agnu17
Friday, March 31, 2017

this is a clever trick to make sure that all triangles are drawn from back to front. This is required because the scene has transparent elements, so we need to paint the from back-to-front. But in this case, the whole geometry is one mesh, the trick is, that the Index Buffer gets recalculated, so that the order of the triangles in the mesh will match the required back-to-front order.

Note that the index buffer is running on the compute shader, and it only gets recalculated when a BSP plane is crossed (otherwise there will be no change in the required ordering)

Rybets
Friday, March 31, 2017

Hello, Humus.
It is very nice to see some progress in OIT. I've just found that OIT by means of atomics could be implemented very fast: see Doron Feinstein Order Independent Transparency optimization on https://sites.google.com/site/doronfeinstein/demos/rendering
It would be interesting to implement his optimized method on your data (or some another realistic data set) to compare BSP traversal with atomics performance.
There is some strong need for robust OIT implementations.
I also have some sort of OIT implementation for motion blur and depth blur cases, it does not work with alpha transparent textures. I have some plan to implement alpha - transparent textures too, (future work), and looking around for state of the art methods to do it in a right way.

Rybets
Friday, March 31, 2017

Hello, Humus.
It is very nice to see some progress in OIT. I've just found that OIT by means of atomics could be implemented very fast: see Doron Feinstein Order Independent Transparency optimization on https://sites.google.com/site/doronfeinstein/demos/rendering
It would be interesting to implement his optimized method on your data (or some another realistic data set) to compare BSP traversal with atomics performance.
There is some strong need for robust OIT implementations.
I also have some sort of OIT implementation for motion blur and depth blur cases, it does not work with alpha transparent textures. I have some plan to implement alpha - transparent textures too, (future work), and looking around for state of the art methods to do it in a right way.