So I recently implemented Multiple Importance Sampling in my path tracer which was based on next event estimation.

The problem is without MIS I get images like,

[![enter image description here][1]][1]

This is obtained by setting 
`light_sample *= 1/light_pdf; // Note no mis_weight` 
and just returning this sample alone. No BRDF sampling.

Where as with MIS as defined above I get darker images like,
[![][2]][2]

 The reason is surely the `mis_weight` factor. From what I gathered over the internet my MIS code is ok but theoretically it doesn't seem right. For example suppose we performed Light Sampling first and obtained a `mis_weight`. After that when we tried BRDF sampling, the ray didn't intersect any light source resulting in `light_pdf = 0`. We neglected this estimate. Since we neglected this estimate isn't it wrong to weight our light sample by `mis_weight` when we didn't even use multiple estimators, plus how is the sum of weights equal to 1 when we didnt even estimate anything using the BRDF pdf?

Imo, `mis_weight` factor in `light_sample` should only be used when BRDF sampling also results in a light ray that intersects the light source.

Can anybody explain if these results are ok or there is something wrong with the code?

<strike>**EDIT**:- There is another case which is a little confusing. I am currently using a heuristic (basically power/distance) to choose 1 light out of multiple lights. What if Light sampling and BRDF sampling choose different light sources. Is MIS still valid then? Since the PDF would change resulting the weights not being able to sum to 1 anymore</strike>

**EDIT2**:- So Stefan pointed out a mistake [here][3], that I was clamping radiance. And this solved that issue and changed the results I'm getting for MIS. I have double checked PBRT's implementation and it is similar to mine. I'm still getting darker images using MIS <strike>however now I'm getting more fireflies and I think I read that MIS reduces fireflies?</strike> Updated the images. **It seems fireflies are less in MIS however, the reflection seems harder to converge.** 

I'm removing the snippet and adding a link to github for the whole kernel. The core functions are `evaluateDirectLighting`, `shading`, `sampleLights`. Link to code is "[here][4]"

--Found a mistake. I was using the direct lighting equation when calculating the brdf sample. (multiplying by $\cos(\theta^{\prime})$ and dividing by $r^2$). Removed it since we initially sampled through BSDF which is integral over solid angle not area. The image got a little brighter. Still don't know if MIS is working as intended.

Note the reflection is harder to converge. Both images are 1000 spp. Top is without MIS.


[![enter image description here][5]][5]
[![enter image description here][6]][6]


 [1]: https://i.sstatic.net/7SL0B.png
 [2]: https://i.sstatic.net/QYyJw.png
 [3]: https://computergraphics.stackexchange.com/questions/8469/naive-path-tracer-produces-much-darker-images-than-explicit-light-sampling?noredirect=1&lq=1
 [4]: https://github.com/gallickgunner/Yune/blob/master/progressive-PT.cl
 [5]: https://i.sstatic.net/WeiZN.png
 [6]: https://i.sstatic.net/PPnyh.png