• Advertisement
Sign in to follow this  

BVH translation and rotation

This topic is 1872 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello,
I want to improve my path tracer by being able to add, remove, move and rotate meshes in real time (to add interactive physics). The geometry of the mesh will never be modified. But it would seem that every time I do any of those operations, I need to rebuild the BVH, which takes time and is annoying.

I was wondering if I could somehow avoid this by computing an intermediate BVH for every mesh (in object space, so it would be constant), and rotate the BVH (or the ray) using the mesh's object-to-world matrix for BVH traversal? And I could also then combine those multiple different BVH's into a single one somehow by translating and rotating the bounding boxes. This would cut down the cost of mesh manipulation to essentially zero, but it sounds too good to be true - can it be done?

Again, I only care about insertion, deletion, translation and rotation of meshes. I will not modify the geometry in any way, so I think this could be a sufficient condition for this optimization, since after all, each triangle in the mesh will be translated and rotated equally, so the bounding boxes will be too.

Thanks! Edited by Bacterius

Share this post


Link to post
Share on other sites
Advertisement
I have never written a path tracer, so take my response with a grain of salt. I don't see why you couldn't have a child node in your BVH be another BVH with a transform associated with it. In fact, that makes the most sense to me and I would venture to guess that production systems do exactly that. What complicates things, like you said, is if you are morphing geometry or otherwise changing/rebuilding the BVH for a dense object with millions of triangles. You should give it a shot and let us know how it goes! Edited by ZBethel

Share this post


Link to post
Share on other sites
Thanks, I will try when I get the time. I feel it is theoretically sound, though I'll need to find a way to introduce the per-mesh transform in a consistent way since I want to be using the BVH on the GPU. Perhaps using a hybrid tree with the first few levels consisting of BVH+transform nodes..

Additional input is welcome! Edited by Bacterius

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement