Page MenuHome

Cycles: Enable quaterion motion blur in Embree.
AcceptedPublic

Authored by Stefan Werner (swerner) on Mon, Jan 13, 9:55 PM.

Details

Summary

This enables the new quaternion interpolation
in Embree 3.7.0 and makes motion blur results
match 1:1 with Cycles' own BVH.

Diff Detail

Repository
rB Blender
Branch
embree_370
Build Status
Buildable 6254
Build 6254: arc lint + arc unit

Event Timeline

Stefan Werner (swerner) edited the summary of this revision. (Show Details)
Stefan Werner (swerner) added a subscriber: Cycles.

Note that this patch will require that platform maintainers update the Embree library to 3.7.0.

fine with me, since we do not ship with embree given current master can build against 3.7.0 i can even update it before this diff lands if you want.

idiff says cycles and embree are almost identical and the faults it does find i cannot rule out are jpeg artifacts

(abs differences * 2000)

Nice! Great that Embree added support for it.

I assume some Linux distros might be unhappy about going straight to the latest version as a minimum, but meh, Embree isn't on by default anyways.

Code seems fine generally, just one question.

intern/cycles/util/util_transform.h
347

I assume that Embree does the proper slerp, so we can't take this shortcut anymore?
If so, does this change non-Embree render results or render times in a noticeable way?

intern/cycles/util/util_transform.h
347

Embree does proper slerp, and Mixing Embree’s slerp for intersections and nlerp for intersection refinement was causing self-shadowing.

Switching Cycles from nlerp to slerp i was unable to measure a performance difference. I will do some more testing though.

  • build_env: Raised minimum Embree version to 3.7.0.
  • Cycles: Use lerp for Optix motion blur.
This revision is now accepted and ready to land.Tue, Jan 21, 6:39 PM
Patrick Mours (pmoursnv) added inline comments.
intern/cycles/bvh/bvh_embree.cpp
552

Since rB26687dda5ab7de1e2a00cb6252a6eb919c3f570c this can/should now also add skew via rtcQuaternionDecompositionSetSkew(decomp[step].z.x, decomp[step].z.y, decomp[step].w.x). There is a Blender scene shared in T71344 that can be used to test.