in forward ray tracing, we find the reflected ray using snell law and trace the ray until it intersects the facet, then find the intersection point and intersected triangle using intersection test and search algorithm, but in backward ray tracing there aren't search algorithm, so how can I trace the reflected ray and determine the intersected triangle ??
Hi, I'm not sure I follow. From the physics standpoint the propagation of light follows reciprocity, which means that you can just reverse the direction of propagation. This of course applies to ray tracing, so if you can find a path from point A to B, even via multiple reflections, they you also have an equivalent path from B to A by definition.
Maybe be a more specific in your problem description, I don't quite understand your setting. There's also some terminology clash in what people usually mean by 'forward' and 'backward' ray tracing, so you should try to clarify this.
IMO, probalbly the question is not corerct. What is "backward ray tracing"? I mean it is Whitted-like light backward recursive ray tracing algorithm. Another question: what's "multiple reflection". I would understand this as : a light ray incident on a triangle generates several reflected rays. The Whitted-like is not used for such problems.
I am not entirely sure if I understand your question properly, but maybe the documentation of the Mitsuba renderer could be helpful to answer your question.
I would think that pure backward tracing could be problematic, so usually combined forward (from the camera) and backward (from the light source) tracing for specular transport is used. Finding paths that connect both the camera and the light source can be a tough task, so several methods were developed to tackle the problem.
Mitsuba is a testbed for state-of-the-art rendering algorithms and contains algorithms like Primary Sample Space Metropolis Light Transport, Path Space Metropolis Light Transport, Energy redistribution path tracing, Bidirectional Path Tracing (by Veach et al.) and many more. The manual explains the algorithms in good detail, and the source code is available, too.
http://www.mitsuba-renderer.org/docs.html
And here is Wenzel Jacob’s talk on manifold exploration, which he also implemented in his renderer. I can imagine that this talk could give you an answer to your question.
“"Manifold Exploration: A Markov Chain Monte Carlo technique for rendering scenes with difficult specular transport" by Wenzel Jakob and Steve Marschner.”