[Bf-committers] GSOC 2013 [Roman Karpov]

Brecht Van Lommel brechtvanlommel at pandora.be
Wed May 1 19:30:36 CEST 2013


Hi Roman,

On Wed, May 1, 2013 at 7:00 PM, Карпов Роман <swoo2n at gmail.com> wrote:
> My name is Roman Karpov and I'm 21 year old student from Novosibirsk,
> Russia. I'm studying programming in my last year at Siberian State
> University of Telecommunications and Computer Science.
> I want to participate in the development of the Blender during this summer.
> I want to improve Cycles performance. I would like to implement SIMD for
> BVH/triangle intersection. Also, after examining the source code, I found
> that QBVH not fully implemented and I would like to work on it, but I found
> on the Cycles wiki page
> http://wiki.blender.org/index.php/Dev:2.6/Source/Render/Cycles/BVH link to
> the paper "Faster Incoherent Rays: Multi-BVH Ray Stream
> Tracing<http://www.eng.uwaterloo.ca/%7Ejtsakok/mbvhrs.pdf>"
> (MBVH RS). Described in this paper method should be faster that QBVH (it
> uses idea from QBVH to use more than 2 children for node ). But it is more
> complex to implement.
> I wonder, this is good enough idea for GSOC project?

BVH and triangle intersection optimizations could be a good project.
They ray stream / packet tracing is interesting but I'd avoid this for
now, it adds a lot of complexity to the integrator. I'd rather see the
single ray intersection optimized as much as possible. Some ideas for
such a project:

* SIMD triangle intersection
* Finish and optimize QBVH, or a similar BVH type that can take better
advantage of SIMD
* Further optimizations for CPU's that support SIMD with 8 and 16
simultaneous operations (AVX, Xeon Phi)
* Fast triangle intersection that doesn't require the precomputed woop
triangle data (to save memory or improve accuracy)
* Multithreaded BVH build with spatial splits option enabled
* Improve triangle intersection accuracy to avoid rays slipping
through between triangles or self intersections
* Rather than using single BVH traversal function, when entering an
object that has e.g. only triangles or hair it could switched to a
specialized functions that doesn't contain the overhead from
supporting all features (hair, motion blur, instances).
* Support for a "quad grid" primitive for more memory friendly and
maybe faster rendering of subdivision surfaces.

The Embree raytracing kernels from Intel would be a great reference,
we're already using some of the code for BVH building but we could
probably benefit from their traversal and intersection code too.

You could pick a subset of those ideas as a project, how many items
depends on how experienced you are with this sort of thing.

Brecht.


More information about the Bf-committers mailing list