I'm confused by the Mitsuba bidirectional framework for quite a while now, especially by the different eval
and connect
functions, as well as the weight
and pdf
variables.
So, what is the difference between PathVertex::eval
and PathVertex::weight[]
, and PathVertex::evalPdf
and PathVertex::pdf[]
.
What are the differences between PathEdge::evalCached
, PathEdge::eval*
, PathEdge::weight[]
, PathEdge::pdf[]
, etc.
Furthermore, how do the PathVertex::connect
and PathEdge::pathConnectAndCollapse
differ?
To make the problem more concrete, let's say I have two vertices, one at the end of an emitter subpath, call it $y_{s-1}$ and one at the end of a sensor subpath, $x_{t-1}$, both surface interactions.
- What is the correct way of connecting these two?
- If I want to calculate $f(y_{s-2} \rightarrow y_{s-1} \rightarrow z_{t-1}) G(y_{s-1} \leftrightarrow x_{t-1}) f(y_{s-1} \rightarrow z_{t-1} \rightarrow z_{t-2})$, what is the correct way of going about this?
Thanks a lot in advance!