float EquirectangularCamera::directionPdf(const PositionSample &/*point*/, const DirectionSample &direction) const
{
    float sinTheta;
    directionToUV(direction.d, sinTheta);

    return INV_PI*INV_TWO_PI/sinTheta;
}
Example #2
0
float CubemapCamera::directionPdf(const PositionSample &/*point*/, const DirectionSample &direction) const
{
    float pdf;
    directionToUV(direction.d, pdf);

    return pdf;
}
bool EquirectangularCamera::evalDirection(PathSampleGenerator &/*sampler*/, const PositionSample &/*point*/,
        const DirectionSample &direction, Vec3f &weight, Vec2f &pixel) const
{
    float sinTheta;
    Vec2f uv = directionToUV(direction.d, sinTheta);

    pixel = uv/_pixelSize;
    weight = Vec3f(INV_PI*INV_TWO_PI/(sinTheta*_pixelSize.x()*_pixelSize.y()));

    return true;
}
Example #4
0
bool CubemapCamera::evalDirection(PathSampleGenerator &/*sampler*/, const PositionSample &/*point*/,
        const DirectionSample &direction, Vec3f &weight, Vec2f &pixel) const
{
    float pdf;
    Vec2f uv = directionToUV(direction.d, pdf);

    pixel = uv/_pixelSize;
    weight = Vec3f(pdf*_visibleArea);

    return true;
}
bool EquirectangularCamera::sampleDirect(const Vec3f &p, PathSampleGenerator &/*sampler*/, LensSample &sample) const
{
    sample.d = _pos - p;
    float rSq = sample.d.lengthSq();
    sample.dist = std::sqrt(rSq);
    sample.d /= sample.dist;

    float sinTheta;
    Vec2f uv = directionToUV(-sample.d, sinTheta);

    sample.pixel = uv/_pixelSize;
    sample.weight = Vec3f(INV_PI*INV_TWO_PI/(sinTheta*_pixelSize.x()*_pixelSize.y()*rSq));

    return true;
}
Example #6
0
bool CubemapCamera::sampleDirect(const Vec3f &p, PathSampleGenerator &/*sampler*/, LensSample &sample) const
{
    sample.d = _pos - p;

    float pdf;
    Vec2f uv = directionToUV(-sample.d, pdf);

    sample.pixel = uv/_pixelSize;
    sample.weight = Vec3f(pdf*_visibleArea);

    float rSq = sample.d.lengthSq();
    sample.dist = std::sqrt(rSq);
    sample.d /= sample.dist;
    sample.weight /= rSq;

    return true;
}