#include <bidirectional.h>
Public Types | |
enum | LightStrategy { SAMPLE_ALL_UNIFORM, SAMPLE_ONE_UNIFORM, SAMPLE_AUTOMATIC } |
Public Member Functions | |
BidirIntegrator (int ed, int ld, LightStrategy ls) | |
SWCSpectrum | Li (const Scene *scene, const RayDifferential &ray, const Sample *sample, float *alpha) const |
void | RequestSamples (Sample *sample, 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) |
Private Member Functions | |
int | generatePath (const Scene *scene, const Ray &r, const Sample *sample, int sampleOffset, vector< BidirVertex > &vertices) const |
float | weightPath (vector< BidirVertex > &eye, int nEye, vector< BidirVertex > &light, int nLight, float pdfLight, bool directLight) const |
SWCSpectrum | evalPath (const Scene *scene, vector< BidirVertex > &eye, int nEye, vector< BidirVertex > &light, int nLight) const |
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) |
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 | maxEyeDepth |
int | maxLightDepth |
int | lightNumOffset |
int | lightPosOffset |
int | lightDirOffset |
int | sampleEyeOffset |
int | sampleLightOffset |
int | sampleDirectOffset |
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 35 of file integrators/bidirectional.h.
Definition at line 38 of file integrators/bidirectional.h.
lux::BidirIntegrator::BidirIntegrator | ( | int | ed, | |
int | ld, | |||
LightStrategy | ls | |||
) | [inline] |
Definition at line 43 of file integrators/bidirectional.h.
Referenced by clone(), and CreateSurfaceIntegrator().
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 575 of file integrators/bidirectional.cpp.
References BidirIntegrator(), lux::ParamSet::FindOneInt(), lux::ParamSet::FindOneString(), 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::Spectrum::Black(), lux::BidirVertex::bsdf, lux::BidirVertex::bsdfWeight, lux::BSDF::f(), lux::BidirVertex::f, G(), blender::p, lux::BidirVertex::p, lux::BidirVertex::rrWeight, visible(), lux::BidirVertex::wi, and lux::BidirVertex::wo.
SWCSpectrum BidirIntegrator::evalPath | ( | const Scene * | scene, | |
vector< BidirVertex > & | eye, | |||
int | nEye, | |||
vector< BidirVertex > & | light, | |||
int | nLight | |||
) | const [private] |
Definition at line 525 of file integrators/bidirectional.cpp.
References lux::AbsDot(), lux::SWCSpectrum::Black(), G(), lux::Normalize(), blender::p, and visible().
Referenced by Li().
static float lux::BidirIntegrator::G | ( | const BidirVertex & | v0, | |
const BidirVertex & | v1 | |||
) | [static, private] |
float BidirIntegrator::G | ( | const BidirVertex & | v0, | |
const BidirVertex & | v1 | |||
) | [static, private] |
Definition at line 563 of file integrators/bidirectional.cpp.
References lux::AbsDot(), lux::DistanceSquared(), lux::Normalize(), lux::BidirVertex::ns, 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::Spectrum::Black(), lux::BidirVertex::bsdf, lux::BSDF_ALL, lux::BidirVertex::bsdfWeight, lux::Ray::d, lux::Intersection::dg, lux::BSDF::dgShading, lux::DistanceSquared(), lux::BidirVertex::flags, lux::random::floatValue(), lux::Intersection::GetBSDF(), lux::Scene::Intersect(), lux::BidirVertex::ng, lux::DifferentialGeometry::nn, lux::BidirVertex::ns, lux::Ray::o, lux::Sample::oneD, blender::p, lux::DifferentialGeometry::p, lux::BidirVertex::p, lux::BidirVertex::rrWeight, lux::BSDF::Sample_f(), lux::Sample::twoD, lux::BidirVertex::wi, and lux::BidirVertex::wo.
int BidirIntegrator::generatePath | ( | const Scene * | scene, | |
const Ray & | r, | |||
const Sample * | sample, | |||
int | sampleOffset, | |||
vector< BidirVertex > & | vertices | |||
) | const [private] |
Definition at line 297 of file integrators/bidirectional.cpp.
References lux::AbsDot(), lux::SWCSpectrum::Black(), lux::BidirVertex::bsdf, lux::BSDF_ALL, lux::BidirVertex::bsdfRWeight, lux::BidirVertex::bsdfWeight, lux::Ray::d, lux::Intersection::dg, lux::BSDF::dgShading, lux::DistanceSquared(), lux::BidirVertex::eBsdf, lux::BidirVertex::ePdf, lux::BidirVertex::ePdfDirect, lux::BidirVertex::f, lux::SWCSpectrum::filter(), lux::BidirVertex::flags, lux::Intersection::GetBSDF(), lux::Sampler::GetLazyValues(), lux::Scene::Intersect(), lux::Intersection::Le(), lux::BidirVertex::Le, lux::BidirVertex::ng, lux::DifferentialGeometry::nn, lux::BidirVertex::ns, lux::Ray::o, blender::p, lux::DifferentialGeometry::p, lux::BidirVertex::p, lux::BidirVertex::rrRWeight, lux::BidirVertex::rrWeight, lux::BSDF::Sample_f(), lux::Sample::sampler, 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 lux::BidirIntegrator::Li | ( | const Scene * | scene, | |
const RayDifferential & | ray, | |||
const Sample * | sample, | |||
float * | alpha | |||
) | const [virtual] |
Implements lux::Integrator.
Spectrum BidirIntegrator::Li | ( | const Scene * | scene, | |
const RayDifferential & | ray, | |||
const Sample * | sample, | |||
float * | alpha | |||
) | const [virtual] |
Implements lux::Integrator.
Definition at line 110 of file integrators/bidirectional.cpp.
References lux::AbsDot(), lux::Sample::AddContribution(), lux::SWCSpectrum::Black(), lux::BSDF::dgShading, lux::DistanceSquared(), evalPath(), Floor2Int(), generateLightPath(), generatePath(), lux::Sampler::GetLazyValues(), lux::Sample::imageX, lux::Sample::imageY, lux::Light::Le(), lightDirOffset, lightNumOffset, lightPosOffset, lux::Scene::lights, lightStrategy, maxEyeDepth, maxLightDepth, cimg_library::cimg::min(), lux::DifferentialGeometry::nn, lux::Normalize(), lux::Sample::oneD, lux::DifferentialGeometry::p, blender::p, lux::Light::Sample_L(), SAMPLE_ONE_UNIFORM, sampleDirectOffset, sampleEyeOffset, sampleLightOffset, lux::Sample::sampler, lux::SWCSpectrum::ToXYZ(), lux::Sample::twoD, lux::VisibilityTester::Unoccluded(), and weightPath().
Reimplemented from lux::Integrator.
Reimplemented from lux::Integrator.
Definition at line 31 of file integrators/bidirectional.cpp.
References lux::Sample::Add1D(), lux::Sample::Add2D(), lux::Sample::AddxD(), lightDirOffset, lightNumOffset, lightPosOffset, lux::Scene::lights, lightStrategy, maxEyeDepth, maxLightDepth, SAMPLE_ALL_UNIFORM, SAMPLE_AUTOMATIC, SAMPLE_ONE_UNIFORM, sampleDirectOffset, sampleEyeOffset, and sampleLightOffset.
static bool lux::BidirIntegrator::visible | ( | const Scene * | scene, | |
const Point & | P0, | |||
const Point & | P1 | |||
) | [static, private] |
bool BidirIntegrator::visible | ( | const Scene * | scene, | |
const Point & | P0, | |||
const Point & | P1 | |||
) | [static, private] |
Definition at line 569 of file integrators/bidirectional.cpp.
References lux::Scene::IntersectP(), and RAY_EPSILON.
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.
float BidirIntegrator::weightPath | ( | vector< BidirVertex > & | eye, | |
int | nEye, | |||
vector< BidirVertex > & | light, | |||
int | nLight, | |||
float | pdfLight, | |||
bool | directLight | |||
) | const [private] |
Definition at line 351 of file integrators/bidirectional.cpp.
References lux::AbsDot(), lux::BSDF_SPECULAR, lux::Dot(), cimg_library::cimg::max(), maxEyeDepth, maxLightDepth, and blender::p.
Referenced by Li().
int lux::BidirIntegrator::directBSDFCompOffset[MAX_VERTS] [private] |
Definition at line 57 of file pbrtattic/integrators/bidirectional.h.
int lux::BidirIntegrator::directBSDFOffset[MAX_VERTS] [private] |
Definition at line 57 of file pbrtattic/integrators/bidirectional.h.
int lux::BidirIntegrator::directLightNumOffset[MAX_VERTS] [private] |
Definition at line 56 of file pbrtattic/integrators/bidirectional.h.
int lux::BidirIntegrator::directLightOffset[MAX_VERTS] [private] |
Definition at line 56 of file pbrtattic/integrators/bidirectional.h.
int lux::BidirIntegrator::eyeBSDFCompOffset[MAX_VERTS] [private] |
Definition at line 54 of file pbrtattic/integrators/bidirectional.h.
int lux::BidirIntegrator::eyeBSDFOffset[MAX_VERTS] [private] |
Definition at line 54 of file pbrtattic/integrators/bidirectional.h.
int lux::BidirIntegrator::lightBSDFCompOffset[MAX_VERTS] [private] |
Definition at line 55 of file pbrtattic/integrators/bidirectional.h.
int lux::BidirIntegrator::lightBSDFOffset[MAX_VERTS] [private] |
Definition at line 55 of file pbrtattic/integrators/bidirectional.h.
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 61 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().
int lux::BidirIntegrator::maxEyeDepth [private] |
Definition at line 60 of file integrators/bidirectional.h.
Referenced by Li(), RequestSamples(), and weightPath().
int lux::BidirIntegrator::maxLightDepth [private] |
Definition at line 60 of file integrators/bidirectional.h.
Referenced by Li(), RequestSamples(), and weightPath().
int lux::BidirIntegrator::sampleDirectOffset [private] |
Definition at line 62 of file integrators/bidirectional.h.
Referenced by Li(), and RequestSamples().
int lux::BidirIntegrator::sampleEyeOffset [private] |
Definition at line 62 of file integrators/bidirectional.h.
Referenced by Li(), and RequestSamples().
int lux::BidirIntegrator::sampleLightOffset [private] |
Definition at line 62 of file integrators/bidirectional.h.
Referenced by Li(), and RequestSamples().