I found a very nice paper regarding Time Interval Ray Tracing for Motion Blur published in 2017. That was before RTX GPUs were on the market. I have a few questions about an optimal implementation and its performance.
Short introduction: I'm using the Vulkan api to raytrace outer space scenarios, like spacecraft docking scenarios. So the scenario has only one till max 10 spacecrafts, which are close enough to be visible. Each spacecraft is very detailed. It is optimized to only have the outer shell, so they have no geometry inside. The spacecraft geometries has up to 50.000 triangles each. And the scenario should be rendered in real-time (hopefully 60 fps).
Problem: So when using the Motion Blur algorithm linked above, The number of triangles will increase to factor *3 when only using two keyframes. These new triangles and their position / orientation will change from frame to frame. And each frame I have to store the new triangles to the Bottom-Level-Acceleration-Structure (BLAS). Do you guys see a performance problem here? So the idea is to use the render pipeline (from vertex- till geometry- shader) to create the 4D (3D + time) geometry on GPU. Rotations are the most problematic transformations. To have a good rotational movement, the number of keyframes need to be increased depending on the rotational speed and the exposure time. I think these keyframes need to be split into several BLAS (one BLAS for each keyframe transformation).
In case to fill the BLAS is no performance problem, I think the next problem could be to fire rays. When having fast camera movements or fast translating spacecrafts, a ray could hit a lot of primitives (triangles). Is this a performance problem? Usually the scenario is very simple. We are trying to generate the output image as realistic as possible, so the different blending functions are extremely interesting for us.
Questions:
- How performant is filling the BLAS? (I thought about refitting acceleration structures, because the number of primitives will not change)
- Is it better to use several BLAS for the same objekt in case of faster rotations and therefore several keyframes?
- How performant is firing the rays?
- Do I have enough performance to fire even more rays? Shadow rays, reflection / refraction rays, Photon mapping rays?
- Did someone even tested the algorithm with a newer RTX graphics card? (For this project we will use a NVIDIA RTX3080)
- Do you know other techniques which better fit to our scenario for real-time?
EDIT:
I added this self made image, just to show how I think this algorithm works...
When having both intersection points of a triangle, I can calculate the UV-coordinates and do texture lookup do get a very good motion blur effect. With this technology I can implement all kind of shutter for my simulated physical camera.