#include <bidirectional.h>
Public Types | |
enum | LightStrategy { SAMPLE_ALL_UNIFORM, SAMPLE_ONE_UNIFORM, SAMPLE_AUTOMATIC } |
Public Member Functions | |
BidirIntegrator (int ed, int ld, float et, float lt, LightStrategy ls, bool d) | |
virtual | ~BidirIntegrator () |
virtual int | Li (const TsPack *tspack, const Scene *scene, const Sample *sample) const |
virtual void | RequestSamples (Sample *sample, const Scene *scene) |
virtual void | Preprocess (const TsPack *tspack, const Scene *scene) |
Spectrum | Li (const Scene *scene, const RayDifferential &ray, const Sample *sample, float *alpha) const |
void | RequestSamples (Sample *sample, const Scene *scene) |
virtual BidirIntegrator * | clone () const |
IntegrationSampler * | HasIntegrationSampler (IntegrationSampler *is) |
Static Public Member Functions | |
static SurfaceIntegrator * | CreateSurfaceIntegrator (const ParamSet ¶ms) |
static SurfaceIntegrator * | CreateSurfaceIntegrator (const ParamSet ¶ms) |
Public Attributes | |
int | maxEyeDepth |
int | maxLightDepth |
float | eyeThreshold |
float | lightThreshold |
int | sampleEyeOffset |
int | sampleLightOffset |
int | eyeBufferId |
int | lightBufferId |
Private Member Functions | |
int | generatePath (const Scene *scene, const Ray &r, const Sample *sample, const int *bsdfOffset, const int *bsdfCompOffset, BidirVertex *vertices, int maxVerts) const |
float | weightPath (BidirVertex *eye, int nEye, BidirVertex *light, int nLight) const |
Spectrum | evalPath (const Scene *scene, BidirVertex *eye, int nEye, BidirVertex *light, int nLight) const |
Static Private Member Functions | |
static float | G (const BidirVertex &v0, const BidirVertex &v1) |
static bool | visible (const Scene *scene, const Point &P0, const Point &P1) |
Private Attributes | |
LightStrategy | lightStrategy |
int | lightNumOffset |
int | lightComponentOffset |
int | lightPosOffset |
int | lightDirOffset |
int | sampleDirectOffset |
bool | debug |
int | eyeBSDFOffset [MAX_VERTS] |
int | eyeBSDFCompOffset [MAX_VERTS] |
int | lightBSDFOffset [MAX_VERTS] |
int | lightBSDFCompOffset [MAX_VERTS] |
int | directLightOffset [MAX_VERTS] |
int | directLightNumOffset [MAX_VERTS] |
int | directBSDFOffset [MAX_VERTS] |
int | directBSDFCompOffset [MAX_VERTS] |
Definition at line 31 of file integrators/bidirectional.h.
Definition at line 34 of file integrators/bidirectional.h.
lux::BidirIntegrator::BidirIntegrator | ( | int | ed, | |
int | ld, | |||
float | et, | |||
float | lt, | |||
LightStrategy | ls, | |||
bool | d | |||
) | [inline] |
Definition at line 39 of file integrators/bidirectional.h.
References eyeBufferId, and lightBufferId.
Referenced by clone(), and CreateSurfaceIntegrator().
virtual lux::BidirIntegrator::~BidirIntegrator | ( | ) | [inline, virtual] |
Definition at line 47 of file integrators/bidirectional.h.
BidirIntegrator * BidirIntegrator::clone | ( | ) | const [virtual] |
Definition at line 29 of file pbrtattic/integrators/bidirectional.cpp.
References BidirIntegrator().
static SurfaceIntegrator* lux::BidirIntegrator::CreateSurfaceIntegrator | ( | const ParamSet & | params | ) | [static] |
SurfaceIntegrator * BidirIntegrator::CreateSurfaceIntegrator | ( | const ParamSet & | params | ) | [static] |
Definition at line 851 of file integrators/bidirectional.cpp.
References BidirIntegrator(), debug, eyeThreshold, lux::ParamSet::FindOneBool(), lux::ParamSet::FindOneFloat(), lux::ParamSet::FindOneInt(), lux::ParamSet::FindOneString(), lightThreshold, LUX_BADTOKEN, LUX_WARNING, luxError, SAMPLE_ALL_UNIFORM, SAMPLE_AUTOMATIC, and SAMPLE_ONE_UNIFORM.
Spectrum BidirIntegrator::evalPath | ( | const Scene * | scene, | |
BidirVertex * | eye, | |||
int | nEye, | |||
BidirVertex * | light, | |||
int | nLight | |||
) | const [private] |
Definition at line 149 of file pbrtattic/integrators/bidirectional.cpp.
References lux::AbsDot(), lux::BidirVertex::bsdf, lux::BidirVertex::bsdfWeight, lux::BSDF::f(), G(), p, lux::BidirVertex::p, lux::BidirVertex::rrWeight, visible(), lux::BidirVertex::wi, and lux::BidirVertex::wo.
Referenced by Li().
float BidirIntegrator::G | ( | const BidirVertex & | v0, | |
const BidirVertex & | v1 | |||
) | [static, private] |
Definition at line 171 of file pbrtattic/integrators/bidirectional.cpp.
References lux::AbsDot(), lux::DistanceSquared(), lux::BidirVertex::ng, lux::Normalize(), and lux::BidirVertex::p.
Referenced by evalPath().
int BidirIntegrator::generatePath | ( | const Scene * | scene, | |
const Ray & | r, | |||
const Sample * | sample, | |||
const int * | bsdfOffset, | |||
const int * | bsdfCompOffset, | |||
BidirVertex * | vertices, | |||
int | maxVerts | |||
) | const [private] |
Definition at line 101 of file pbrtattic/integrators/bidirectional.cpp.
References lux::AbsDot(), lux::BidirVertex::bsdf, lux::BSDF_ALL, lux::BidirVertex::bsdfWeight, lux::Ray::d, lux::Intersection::dg, lux::BSDF::dgShading, lux::DistanceSquared(), lux::BidirVertex::flags, lux::Intersection::GetBSDF(), lux::Scene::Intersect(), lux::BidirVertex::ng, lux::DifferentialGeometry::nn, lux::BidirVertex::ns, lux::Ray::o, lux::Sample::oneD, p, lux::DifferentialGeometry::p, lux::BidirVertex::p, lux::BidirVertex::rrWeight, lux::BSDF::Sample_f(), lux::Sample::twoD, lux::BidirVertex::wi, and lux::BidirVertex::wo.
Referenced by Li().
IntegrationSampler* lux::BidirIntegrator::HasIntegrationSampler | ( | IntegrationSampler * | is | ) | [inline] |
Definition at line 40 of file pbrtattic/integrators/bidirectional.h.
Spectrum BidirIntegrator::Li | ( | const Scene * | scene, | |
const RayDifferential & | ray, | |||
const Sample * | sample, | |||
float * | alpha | |||
) | const |
Definition at line 49 of file pbrtattic/integrators/bidirectional.cpp.
References lux::AbsDot(), lux::BidirVertex::bsdf, lux::BidirVertex::bsdfWeight, directBSDFCompOffset, directBSDFOffset, directLightNumOffset, directLightOffset, evalPath(), eyeBSDFCompOffset, eyeBSDFOffset, lux::BSDF::f(), Floor2Int(), generatePath(), lightBSDFCompOffset, lightBSDFOffset, lightDirOffset, lightNumOffset, lightPosOffset, lux::Scene::lights, cimg_library::cimg::min(), lux::Sample::oneD, p, lux::BidirVertex::rrWeight, lux::Sample::twoD, lux::UniformSampleOneLight(), and weightPath().
int BidirIntegrator::Li | ( | const TsPack * | tspack, | |
const Scene * | scene, | |||
const Sample * | sample | |||
) | const [virtual] |
Implements lux::SurfaceIntegrator.
Definition at line 692 of file integrators/bidirectional.cpp.
References lux::Sample::AddContribution(), lux::BSDF_DIFFUSE, lux::BSDF_GLOSSY, lux::TsPack::camera, lux::Distance(), eyeBufferId, lux::SWCSpectrum::Filter(), Floor2Int(), generateEyePath(), generateLightPath(), getDirectLight(), getEnvironmentLight(), lux::Sampler::GetLazyValues(), getLight(), getLightHit(), lux::Camera::GetSamplePosition(), lux::Light::group, lux::Sample::imageX, lux::Sample::imageY, lux::Light::IsDeltaLight(), lux::Light::IsEnvironmental(), lux::Camera::IsLensBased(), lux::Sample::lensU, lux::Sample::lensV, lightBufferId, lightComponentOffset, lux::Scene::lightGroups, lightNumOffset, lightPosOffset, lux::Scene::lights, lightStrategy, cimg_library::cimg::max(), maxEyeDepth, maxLightDepth, cimg_library::cimg::min(), lux::Sample::oneD, p, lux::Light::Pdf(), SAMPLE_ALL_UNIFORM, lux::Light::Sample_L(), SAMPLE_ONE_UNIFORM, lux::Camera::Sample_W(), sampleDirectOffset, lux::Sample::sampler, lux::SWCSpectrum::ToXYZ(), and lux::Sample::twoD.
Reimplemented from lux::Integrator.
Definition at line 91 of file integrators/bidirectional.cpp.
References lux::BUF_FRAMEBUFFER, lux::BUF_STANDALONE, lux::BUF_TYPE_PER_PIXEL, lux::BUF_TYPE_PER_SCREEN, lux::Scene::camera, debug, eyeBufferId, lux::Camera::film, lux::Sampler::GetBufferType(), lightBufferId, lux::Film::RequestBuffer(), and lux::Scene::sampler.
Reimplemented from lux::Integrator.
Reimplemented from lux::Integrator.
Definition at line 56 of file integrators/bidirectional.cpp.
References lux::Sample::Add1D(), lux::Sample::Add2D(), lux::Sample::AddxD(), lux::Sampler::IsMutating(), lightComponentOffset, lightDirOffset, lightNumOffset, lightPosOffset, lux::Scene::lights, lightStrategy, maxEyeDepth, maxLightDepth, SAMPLE_ALL_UNIFORM, SAMPLE_AUTOMATIC, SAMPLE_ONE_UNIFORM, sampleDirectOffset, sampleEyeOffset, sampleLightOffset, and lux::Scene::sampler.
bool BidirIntegrator::visible | ( | const Scene * | scene, | |
const Point & | P0, | |||
const Point & | P1 | |||
) | [static, private] |
Definition at line 176 of file pbrtattic/integrators/bidirectional.cpp.
References lux::Scene::IntersectP().
Referenced by evalPath().
float BidirIntegrator::weightPath | ( | BidirVertex * | eye, | |
int | nEye, | |||
BidirVertex * | light, | |||
int | nLight | |||
) | const [private] |
Definition at line 145 of file pbrtattic/integrators/bidirectional.cpp.
Referenced by Li().
bool lux::BidirIntegrator::debug [private] |
Definition at line 62 of file integrators/bidirectional.h.
Referenced by CreateSurfaceIntegrator(), and Preprocess().
int lux::BidirIntegrator::directBSDFCompOffset[MAX_VERTS] [private] |
Definition at line 57 of file pbrtattic/integrators/bidirectional.h.
Referenced by Li().
int lux::BidirIntegrator::directBSDFOffset[MAX_VERTS] [private] |
Definition at line 57 of file pbrtattic/integrators/bidirectional.h.
Referenced by Li().
int lux::BidirIntegrator::directLightNumOffset[MAX_VERTS] [private] |
Definition at line 56 of file pbrtattic/integrators/bidirectional.h.
Referenced by Li().
int lux::BidirIntegrator::directLightOffset[MAX_VERTS] [private] |
Definition at line 56 of file pbrtattic/integrators/bidirectional.h.
Referenced by Li().
int lux::BidirIntegrator::eyeBSDFCompOffset[MAX_VERTS] [private] |
Definition at line 54 of file pbrtattic/integrators/bidirectional.h.
Referenced by Li().
int lux::BidirIntegrator::eyeBSDFOffset[MAX_VERTS] [private] |
Definition at line 54 of file pbrtattic/integrators/bidirectional.h.
Referenced by Li().
Definition at line 56 of file integrators/bidirectional.h.
Referenced by BidirIntegrator(), Li(), and Preprocess().
Definition at line 54 of file integrators/bidirectional.h.
Referenced by CreateSurfaceIntegrator(), evalPath(), generateEyePath(), and generateLightPath().
int lux::BidirIntegrator::lightBSDFCompOffset[MAX_VERTS] [private] |
Definition at line 55 of file pbrtattic/integrators/bidirectional.h.
Referenced by Li().
int lux::BidirIntegrator::lightBSDFOffset[MAX_VERTS] [private] |
Definition at line 55 of file pbrtattic/integrators/bidirectional.h.
Referenced by Li().
Definition at line 56 of file integrators/bidirectional.h.
Referenced by BidirIntegrator(), getDirectLight(), Li(), and Preprocess().
Definition at line 60 of file integrators/bidirectional.h.
Referenced by Li(), and RequestSamples().
int lux::BidirIntegrator::lightDirOffset [private] |
Definition at line 61 of file integrators/bidirectional.h.
Referenced by Li(), and RequestSamples().
int lux::BidirIntegrator::lightNumOffset [private] |
Definition at line 60 of file integrators/bidirectional.h.
Referenced by Li(), and RequestSamples().
int lux::BidirIntegrator::lightPosOffset [private] |
Definition at line 61 of file integrators/bidirectional.h.
Referenced by Li(), and RequestSamples().
Definition at line 59 of file integrators/bidirectional.h.
Referenced by Li(), and RequestSamples().
Definition at line 54 of file integrators/bidirectional.h.
Referenced by CreateSurfaceIntegrator(), evalPath(), generateEyePath(), and generateLightPath().
Definition at line 53 of file integrators/bidirectional.h.
Referenced by evalPath(), Li(), and RequestSamples().
Definition at line 53 of file integrators/bidirectional.h.
Referenced by evalPath(), Li(), and RequestSamples().
int lux::BidirIntegrator::sampleDirectOffset [private] |
Definition at line 61 of file integrators/bidirectional.h.
Referenced by Li(), and RequestSamples().
Definition at line 55 of file integrators/bidirectional.h.
Referenced by generateEyePath(), and RequestSamples().
Definition at line 55 of file integrators/bidirectional.h.
Referenced by generateLightPath(), and RequestSamples().