Page MenuHome

Fix Overlapping emissive volumes generat unexpected bright hotspots around the intersection
ClosedPublic

Authored by Sergey Sharybin (sergey) on Sep 8 2016, 5:16 PM.

Details

Summary

Discard the whole volume stack on the last bounce (but keep
world volume if present).

Volumes are expected to be closed manifol meshes, meaning if
ray entered the volume there should be an intersection event
of ray exisintg the volume. Case when ray hit nothing and
there are still non-world volumes in the stack can happen in
either of cases.

  1. Mesh is not closed manifold.

Such configurations are not really supported anyway and should
not be used.

Previous code would have consider the infinite length of the
ray to sample across, so render result wasn't really correct
anyway.

  1. Exit intersection is more far away than the camera far clip distance.

Thi case also will behave differently now, but previously it
wassn't really correct either, so it's not like we're breaking
something which was workign as expected.

  1. We missed exit event due to intersection precision issues.

This is exact the case which this patch fixes and avoid
fireflies.

  1. VOlume has Camera only visibility (all the rest visibility

is set to off)

This is what coudl be considered a regression but could be
solved quite easily by checking volume stack's objects flags
and keep entries which doesnt' have Volume Scatter visibility.

Diff Detail

Repository
rB Blender
Branch
fix_T46108
Build Status
Buildable 148
Build 148: arc lint + arc unit

Event Timeline

Sergey Sharybin (sergey) retitled this revision from to Fix Overlapping emissive volumes generat unexpected bright hotspots around the intersection.
Sergey Sharybin (sergey) updated this object.

Some extra notes.

Ideally on CPU we will record all transparent intersections across the camera ray for branched path tracing, but it has following limitations:

  • Regular path tracing will not be affected by that change.
  • Indirect rays will still be problem.
  • On GPU we don't use intersect_all because of performance impacts.

So propose to iterate over this patch by probably considering some behavior changes unacceptable (like volumes with Volume Scatter visibility disabled?) and use this a solution for until branched path tracing becomes the only one we use or something like that.

Brecht Van Lommel (brecht) accepted this revision.EditedSep 11 2016, 1:46 AM
Brecht Van Lommel (brecht) edited edge metadata.

Looks like a net improvement to me, even with the ray visibility issue.

This revision is now accepted and ready to land.Sep 11 2016, 1:46 AM
This revision was automatically updated to reflect the committed changes.