bool EquirectangularCamera::sampleDirection(PathSampleGenerator &sampler, const PositionSample &/*point*/, Vec2u pixel, DirectionSample &sample) const { float pdf; Vec2f uv = (Vec2f(pixel) + 0.5f + _filter.sample(sampler.next2D(), pdf))*_pixelSize; float sinTheta; sample.d = uvToDirection(uv, sinTheta); sample.weight = Vec3f(1.0f); sample.pdf = INV_PI*INV_TWO_PI/sinTheta; return true; }
bool CubemapCamera::sampleDirection(PathSampleGenerator &sampler, const PositionSample &/*point*/, Vec2u pixel, DirectionSample &sample) const { Vec2f uv = (Vec2f(pixel) + 0.5f)*_pixelSize; int face; if (!uvToFace(uv, face)) return false; float filterPdf; uv += _filter.sample(sampler.next2D(CameraSample), filterPdf)*_pixelSize; sample.d = uvToDirection(face, uv, sample.pdf); sample.weight = Vec3f(1.0f); return true; }