A correct implementation of combining diffuse and specular sampling
Note this implementation is more complicated and supposed to be
faster than simply calling Pdf(), but it turns out the improvement is
limited so I'll go back to simpler implementation