Results

The experiments have been conducted, the conclusions have been drawn, and the report has been written and submitted.

The binary tree part of the BSP algorithm was indeed a more efficient way to process triangles in the scene than brute force. Simple scenes saw a speedup of about 1.10-1.15x in rendering.

However, since my BSP implementation was such that it split some triangles into smaller ones (in order to place them on either side of the splitting planes that partition the space), the scene complexity as represented by the BSP tree increased from the original scene. In the more complex scenes, where there were more triangles to split and to split based upon, the complexity of the BSP tree increased dramatically. This counteracted the increased performance, to the point that rendering with BSP took longer.

One particular scene, though being the most complex of the test scenes, worked around this by only having axis-aligned faces and having all vertices aligned to a 3D grid. However, adapting the scene to the renderer, rather than vice versa, is not a real solution. I suppose this is the reason why most BSP ray tracers use other approaches.

Based on the results, I suspect that a BSP algorithm that partitions the space with geometry-independent axis-aligned splitting planes would perform better. I think that my implementation, while it does work in some sense, would not be beneficial in a real-world application.