}
private Color joinAt(PathNode lightNode, PathNode eyeNode, double lightImageWeight) {
int l = lightNode != null ? lightNode.getDepth() : -1;
int e = eyeNode != null ? eyeNode.getDepth() : -1;
Color c = null;
if (e == 0 && l == 0) {
c = joinLightToEye((LightNode) lightNode, (EyeNode) eyeNode,
lightImageWeight);
} else if (e <= 0 && l <= 0) {
c = null;
} else if (e < 0) {
c = lightPathOnCamera((ScatteringNode) lightNode,
lightImageWeight);
} else if (l < 0) {
c = eyePathOnLight((ScatteringNode) eyeNode);
} else if (e == 0) {
c = joinInnerToEye(lightNode, (EyeNode) eyeNode,
lightImageWeight);
} else if (l == 0) {
c = joinLightToInner((LightNode) lightNode, eyeNode);
} else {
c = joinInnerToInner((ScatteringNode) lightNode, eyeNode);
}
if (c != null) {
// synchronized (contribList) {
// contribList.add((float) c.luminance());
// }
if (c.luminance() < 0.0) {
bp();
}
}
return c;