RenderKit / ospray

An Open, Scalable, Portable, Ray Tracing Based Rendering Engine for High-Fidelity Visualization
http://ospray.org
Apache License 2.0
982 stars 178 forks source link

OSPRay 2.5.0: Artifacts when rendering glass material with large # of samples-per-pixel #481

Closed ghost closed 3 years ago

ghost commented 3 years ago

When using the path tracer in ospray 2.5.0, I saw rendering artifacts in rendering a model in glass material, as shown in the image below. There are several white/red spots in the image, which cannot be removed by the image denoising plugin. Initially, to reduce the artifacts in Monte Carlo simulation, I specified a high sampling rate of 256 samples per pixel.

image.

However, these noisy spots seems to be caused by the high sampling rate. When using a lower value, it is actually getting better:

image

This problem seems to be related to transparent object only. When rendering opaque ones, I don't see the same artifact, even though the same rendering parameters are specified. I've done some debugging. It looks like the function evaluateVirtualLights() in VirtualLight.ispc has a problem.

carsonbrownlee commented 3 years ago

hello, if you set the "maxContribution" on the renderer to a reasonable value, do these fireflies disappear?

ghost commented 3 years ago

Yes, if I set maxContribution=1, the artifact disappears. Setting maxContribution=10, there are still several pixels with artifacts. In the document, the default value is +inf. So my question is: to override the default value, what value should I use? Is this value scale invariant?

johguenther commented 3 years ago

Those are very likely "Fireflies", caused by paths with low probability that connect to the light source (and whose contribution consequently get amplified). A typical example are scenes with diffuse and highly specular objects (like glass), like in your example, where the fireflies are actually caustics that are undersampled (because vanilla path tracing cannot deal well with caustics). The recommendation, as @carsonbrownlee said, is to set maxContribution as a workaround, which dampens the caustics and thus the Fireflies. A good value for maxContribution is above (with some margin) the brightest pixel value you see (before tonemapping / exposure), e.g., for typical scenes between 1 and 10. Lower values will filter those artifacts more aggressively, but you risk to loose brilliance (e.g., highlights) as well (which is why the default is inf).

We are working on improving the path tracer with more advanced sampling techniques to attack the root cause, to make the workaround with maxContribution obsolete / much less needed.

ghost commented 3 years ago

Thanks very much for the reply. At this time, I think it might be better to set the default value of maxContribution" to something other than inf, such as 5?. Anyway, generating an image with less highlights is better than an image with visual simulation artifacts.

On Tue, May 11, 2021 at 3:44 AM Johannes Günther @.***> wrote:

Those are very likely "Fireflies", caused by paths with low probability that connect to the light source (and whose contribution consequently get amplified). A typical example are scenes with diffuse and highly specular objects (like glass), like in your example, where the fireflies are actually caustics that are undersampled (because vanilla path tracing cannot deal well with caustics). The recommendation, as @carsonbrownlee https://github.com/carsonbrownlee said, is to set maxContribution as a workaround, which dampens the caustics and thus the Fireflies. A good value for maxContribution is above (with some margin) the brightest pixel value you see (before tonemapping / exposure), e.g., for typical scenes between 1 and 10. Lower values will filter those artifacts more aggressively, but you risk to loose brilliance (e.g., highlights) as well (which is why the default is inf).

We are working on improving the path tracer with more advanced sampling techniques to attack the root cause, to make the workaround with maxContribution obsolete / much less needed.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/ospray/ospray/issues/481#issuecomment-838006440, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAIL6OGEA2QEVUV3SXJDDETTNDN5DANCNFSM44SRTTVQ .