mitsuba-renderer / mitsuba2

Mitsuba 2: A Retargetable Forward and Inverse Renderer
Other
2.05k stars 266 forks source link

[🐛 bug report] Directional lights not always working #610

Closed RobinBruneau closed 2 years ago

RobinBruneau commented 2 years ago

Summary

I tried to render a scene including a sphere with a dielectric BSDF, a camera and a directional light, and the results is a black sphere.

System configuration

Description

I tried to render a scene including a sphere with a dielectric BSDF, a camera and a directional light, and the results is a black sphere. I tried the directional light is a diffuse BSDF sphere and the render is good, same for the dielectric BSDF spehre with an envMap. But this special combination is not working.

Steps to reproduce

Try to run the xml code below :

Speierers commented 2 years ago

Hi @RobinBruneau ,

What integrator are you using? And what maximum number of bounces did you set?

RobinBruneau commented 2 years ago

@Speierers I set nothing for the integrator and for the number of bounces. Even when I tried with something like :

with "high" values like 10 to be sure to render the transmission and refractive lights, it's not working.

merlinND commented 2 years ago

If I understand correctly, you are trying to render a delta material (dielectric) with a delta light source (directional) and a delta sensor (perspective). This is not supported by either path tracers or particle / light tracers (fundamental limitation of the algorithms). One simple solution, if it's acceptable in your application, would be to replace either the BSDF or light source by a non-delta alternative (e.g. rough dielectric).

RobinBruneau commented 2 years ago

I can't change for rough dielectric because I would like to render some amber. And I cant' change the camera and the light because of the application too. I assume that the point emitter is also a delta light source ? (because It doesn't work too)

When you say that it is a fundamental limitation, is it just for the moment and it might be soon in a next release, or it is something way more complex to render while staying as an inverse renderer ?

merlinND commented 2 years ago

Maybe the light source can be replaced by an emitter with a small angular spread? (Since real light sources will never be exact deltas either).

It's a fundamental limitation of plain path tracing or particle tracing in that they simply cannot purely specular paths: both BSDF sampling and emitter sampling results in zero-probability samples because there are delta functions on both sides.

This recent paper proposes an algorithm that handles this case explicitly, but we do not plan to implement it at this time:

Wang, Beibei, Miloš Hašan, and Ling-Qi Yan. "Path cuts: Efficient rendering of pure specular light transport." ACM Transactions on Graphics (TOG) 39.6 (2020): 1-12.

Excerpt from their conclusion:

While many light transport methods have been devised to sample various kinds of light paths, none of them are able to find multibounce pure specular light paths from a point light to a pinhole camera. We presented path cuts, the first method able to render this component of light transport explicitly.

I hope this helps!