Skip to content

Transforms, Instancing, 8-wide KDOP BLAS

Choose a tag to compare

@BCaven BCaven released this 26 Aug 17:20
· 77 commits to master since this release

Transforms!

transform example

Transforms (location, rotation, scale) are now part of the engine.

Other new features:

  1. Instancing
  2. TLAS/BLAS separation
  3. Wide trees
  4. KDOP bounding boxes
  5. Mixed wide/binary trees
  6. Transformed primitives
  7. misc performance optimizations

Notes:

In this update, transforms are nodes with one child that manipulate the ray that hits them. Transforms are tracked using a separate stack.

Instancing is a natural byproduct of transforms. Constructors such as loadSplat and loadObj now return pointers to their instances and transforms add an instance of that mesh/splat to the scene graph.
The scene graph then looks like:

root
├── transform
|        └──Instance BLAS
└── transform 
         └──Instance BLAS

The scene graph supports more elaborate structures with nested transforms and BLAS structures with chains that might look like

root
└── transform
          └── Group BLAS
                   ├── Instance BLAS
                   └── transform 
                           └── Instance BLAS

Or any other combination of tree, transform, and primitive nodes

Performance considerations

Performance has been increased considerably from previous versions.
According to NVIDIA Nsight the primary source of warp latency and stalls is Long Scoreboard stalls when retrieving primitive, acceleration structure, and stack nodes from memory.
Gaussian splat primitives are especially taxing on the acceleration structures due to their oblong and overlapping natures. Triangle meshes do not see the same performance impact as Gaussians of the same size due to triangle meshes usually not having large amounts of overlap and triangles are usually uniform in size.
Work is being done to reduce the latency. At the moment, wide KDOP acceleration structures provide 10x performance improvement compared to traditional binary AABBs, reducing the number of traversals (caused by fewer bounding box misses) and increasing ray throughput. The acceleration structure still struggles with large (5+ million primitive) BLAS.
That being said, this release can support moderate numbers of primitives at interactive framerates (30+ fps, 19ms per frame with spikes of 30-40 ms).