[Bf-committers] [GSoC 2019] Embree BVH for GPU Questions

Sergey Sharybin sergey.vfx at gmail.com
Fri Apr 5 09:50:03 CEST 2019


The answers are inlined.

On Fri, Apr 5, 2019 at 6:53 AM Alex Ozer <thealexozer at gmail.com> wrote:

> > Implement converter from Embree BVH to Cycles BVH data structures.
> > Adjust Cycles kernel BVH traversal for faster motion blur.
> I'm not sure whether this means to convert Embree's BVH to Cycles' BVH
> with or without modifying Cycles' BVH. At first I thought it was
> "without", but I'm not sure what adjusting Cycles kernel BVH traversal
> would specifically entail unless maybe it would be for taking
> advantage of the special properties of the "Spacial-Temporal" type of
> BVH which Embree constructs [3]. Essentially, would this task involve
> implementing features of Embree's BVH (such as its time bounds) in
> Cycles' BVH, and modifying the Cycles kernel to leverage this for
> faster motion blur?

Those are two incremental steps.

Cycles uses bare-arrays-alike data structures, which are easy to put and
use on GPU. So first step of the project is to put Embrees data structures
to Cycles with minimal changes on Cycles side. This eases testing and
verification process before going more advanced.

Then, since Embree has better builder for motion blur support (i.e. as
you've pointed, STBVH), we can benefit from this as well by replacing
multi-step BVH with more boundbox-interpolation alike approach. This would
require changes in both data structures and travsersal code.

> > Verify if Embree can export oriented bounding boxes and motion steps,
> and if needed improve Embree API.
> I'm not sure what the purpose of this is; it seems to me that Cycles'
> BVH uses axis-aligned bounding boxes. Also, I'm not sure on the
> terminology "motion steps".

Cycles uses both AABB and OBB (oriented bounding box). Those are essential
for fast hair rendering. Embree supports OBB but in the past it was only
available for the Embree's traversal. This needs to be verified, and,
possibly, implemented on Embree side.

Motion step is basically bounding box of a node at a specific time step.
Those are then interpolated to get bounding box for the ray's time during

With best regards, Sergey Sharybin

More information about the Bf-committers mailing list