#include "bidirectional.h"
#include "reflection/bxdf.h"
#include "light.h"
#include "camera.h"
#include "sampling.h"
#include "scene.h"
#include "paramset.h"
#include "dynload.h"
Go to the source code of this file.
Classes | |
struct | BidirVertex |
Functions | |
static int | generateEyePath (const TsPack *tspack, const Scene *scene, BSDF *bsdf, const Sample *sample, const BidirIntegrator &bidir, vector< BidirVertex > &vertices, float directWeight) |
static int | generateLightPath (const TsPack *tspack, const Scene *scene, BSDF *bsdf, const Sample *sample, const BidirIntegrator &bidir, vector< BidirVertex > &vertices) |
static float | G (float cosins, float coso, float d2) |
static bool | visible (const TsPack *tspack, const Scene *scene, const Point &P0, const Point &P1, float *pdf, float *pdfR, SWCSpectrum *f) |
static float | weightPath (const vector< BidirVertex > &eye, int nEye, int eyeDepth, const vector< BidirVertex > &light, int nLight, int lightDepth, float pdfLightDirect, bool isLightDirect) |
static bool | evalPath (const TsPack *tspack, const Scene *scene, const BidirIntegrator &bidir, vector< BidirVertex > &eye, int nEye, vector< BidirVertex > &light, int nLight, float pdfLightDirect, bool isLightDirect, float *weight, SWCSpectrum *L) |
static bool | getLightHit (const TsPack *tspack, const Scene *scene, const BidirIntegrator &bidir, vector< BidirVertex > &eyePath, int length, vector< SWCSpectrum > &Le, vector< float > &weight) |
static bool | getEnvironmentLight (const TsPack *tspack, const Scene *scene, const BidirIntegrator &bidir, vector< BidirVertex > &eyePath, int length, float directWeight, vector< SWCSpectrum > &Le, vector< float > &weight, int &nrContribs) |
static bool | getDirectLight (const TsPack *tspack, const Scene *scene, const BidirIntegrator &bidir, vector< BidirVertex > &eyePath, int length, const Light *light, float u0, float u1, float portal, float directWeight, const SWCSpectrum &We, const Sample *sample, vector< SWCSpectrum > &Ld, vector< float > &weight) |
static bool | getLight (const TsPack *tspack, const Scene *scene, const BidirIntegrator &bidir, vector< BidirVertex > &eyePath, int nEye, vector< BidirVertex > &lightPath, int nLight, float lightDirectPdf, SWCSpectrum *Ll, float *weight) |
Variables | |
static const u_int | passThroughLimit = 10000 |
static DynamicLoader::RegisterSurfaceIntegrator < BidirIntegrator > | r ("bidirectional") |
static bool evalPath | ( | const TsPack * | tspack, | |
const Scene * | scene, | |||
const BidirIntegrator & | bidir, | |||
vector< BidirVertex > & | eye, | |||
int | nEye, | |||
vector< BidirVertex > & | light, | |||
int | nLight, | |||
float | pdfLightDirect, | |||
bool | isLightDirect, | |||
float * | weight, | |||
SWCSpectrum * | L | |||
) | [static] |
Definition at line 412 of file integrators/bidirectional.cpp.
References lux::AbsDot(), lux::SWCSpectrum::Black(), lux::BidirVertex::bsdf, lux::BSDF_SPECULAR, lux::BidirVertex::dAWeight, lux::DistanceSquared(), lux::MachineEpsilon::E(), lux::BidirIntegrator::eyeThreshold, lux::BSDF::f(), lux::BidirVertex::flags, G(), lux::BidirIntegrator::lightThreshold, cimg_library::cimg::max(), lux::BidirIntegrator::maxEyeDepth, lux::BidirIntegrator::maxLightDepth, cimg_library::cimg::min(), lux::BidirVertex::ng, lux::Normalize(), lux::BidirVertex::ns, lux::BidirVertex::p, lux::BSDF::Pdf(), visible(), weightPath(), lux::BidirVertex::wi, and lux::BidirVertex::wo.
Referenced by getDirectLight(), getEnvironmentLight(), getLight(), and getLightHit().
static float G | ( | float | cosins, | |
float | coso, | |||
float | d2 | |||
) | [static] |
Definition at line 305 of file integrators/bidirectional.cpp.
Referenced by cimg_library::CImg< T >::blur_anisotropic(), evalPath(), lux::Torus::Intersect(), lux::Sphere::Intersect(), lux::Paraboloid::Intersect(), lux::Hyperboloid::Intersect(), lux::Cylinder::Intersect(), lux::Cone::Intersect(), lux::IGIIntegrator::Li(), and cimg_library::CImg< T >::sharpen().
static int generateEyePath | ( | const TsPack * | tspack, | |
const Scene * | scene, | |||
BSDF * | bsdf, | |||
const Sample * | sample, | |||
const BidirIntegrator & | bidir, | |||
vector< BidirVertex > & | vertices, | |||
float | directWeight | |||
) | [static] |
Definition at line 104 of file integrators/bidirectional.cpp.
References lux::AbsDot(), lux::Intersection::arealight, lux::BidirVertex::bsdf, lux::BSDF_ALL, lux::BSDF_SPECULAR, lux::BSDF_TRANSMISSION, lux::TsPack::camera, lux::Camera::ClampRay(), lux::Ray::d, lux::Intersection::dg, lux::BSDF::dgShading, lux::DistanceSquared(), lux::BidirIntegrator::eyeThreshold, lux::BidirVertex::flags, lux::Intersection::GetBSDF(), lux::Sampler::GetLazyValues(), lux::Light::group, lux::Sample::imageX, lux::Sample::imageY, lux::Scene::Intersect(), lux::Camera::IsLensBased(), lux::Intersection::Le(), lux::Sample::lensU, lux::Sample::lensV, lux::Scene::lights, lux::BidirIntegrator::lightThreshold, cimg_library::cimg::max(), cimg_library::cimg::min(), lux::BidirVertex::ng, lux::DifferentialGeometry::nn, lux::BidirVertex::ns, lux::BidirVertex::p, p, lux::DifferentialGeometry::p, passThroughLimit, lux::BSDF::Pdf(), lux::r, lux::BSDF::Sample_f(), lux::BidirIntegrator::sampleEyeOffset, lux::Sample::sampler, lux::TsPack::time, lux::Ray::time, lux::BidirVertex::wi, and lux::BidirVertex::wo.
Referenced by lux::BidirIntegrator::Li().
static int generateLightPath | ( | const TsPack * | tspack, | |
const Scene * | scene, | |||
BSDF * | bsdf, | |||
const Sample * | sample, | |||
const BidirIntegrator & | bidir, | |||
vector< BidirVertex > & | vertices | |||
) | [static] |
Definition at line 214 of file integrators/bidirectional.cpp.
References lux::AbsDot(), lux::BidirVertex::bsdf, lux::BSDF_ALL, lux::BSDF_SPECULAR, lux::BSDF_TRANSMISSION, lux::Ray::d, lux::Intersection::dg, lux::BSDF::dgShading, lux::DistanceSquared(), lux::BidirIntegrator::eyeThreshold, lux::BidirVertex::flags, lux::Intersection::GetBSDF(), lux::Sampler::GetLazyValues(), lux::Scene::Intersect(), lux::BidirIntegrator::lightThreshold, cimg_library::cimg::max(), cimg_library::cimg::min(), lux::BidirVertex::ng, lux::DifferentialGeometry::nn, lux::BidirVertex::ns, p, lux::BidirVertex::p, lux::DifferentialGeometry::p, passThroughLimit, lux::BSDF::Pdf(), lux::BSDF::Sample_f(), lux::BidirIntegrator::sampleLightOffset, lux::Sample::sampler, lux::TsPack::time, lux::Ray::time, lux::BidirVertex::wi, and lux::BidirVertex::wo.
Referenced by lux::BidirIntegrator::Li().
static bool getDirectLight | ( | const TsPack * | tspack, | |
const Scene * | scene, | |||
const BidirIntegrator & | bidir, | |||
vector< BidirVertex > & | eyePath, | |||
int | length, | |||
const Light * | light, | |||
float | u0, | |||
float | u1, | |||
float | portal, | |||
float | directWeight, | |||
const SWCSpectrum & | We, | |||
const Sample * | sample, | |||
vector< SWCSpectrum > & | Ld, | |||
vector< float > & | weight | |||
) | [static] |
Definition at line 626 of file integrators/bidirectional.cpp.
References lux::AbsDot(), lux::Sample::AddContribution(), lux::BidirVertex::bsdf, lux::TsPack::camera, lux::BidirVertex::dAWeight, lux::BSDF::dgShading, evalPath(), lux::SWCSpectrum::Filter(), lux::Camera::GetSamplePosition(), lux::Light::group, lux::Light::IsDeltaLight(), lux::Light::IsEnvironmental(), lux::BidirIntegrator::lightBufferId, lux::Scene::lights, lux::BidirVertex::ng, lux::DifferentialGeometry::nn, lux::BidirVertex::ns, lux::DifferentialGeometry::p, lux::BidirVertex::p, lux::Light::Sample_L(), lux::SWCSpectrum::ToXYZ(), and lux::BidirVertex::wi.
Referenced by lux::BidirIntegrator::Li().
static bool getEnvironmentLight | ( | const TsPack * | tspack, | |
const Scene * | scene, | |||
const BidirIntegrator & | bidir, | |||
vector< BidirVertex > & | eyePath, | |||
int | length, | |||
float | directWeight, | |||
vector< SWCSpectrum > & | Le, | |||
vector< float > & | weight, | |||
int & | nrContribs | |||
) | [static] |
Definition at line 580 of file integrators/bidirectional.cpp.
References lux::AbsDot(), lux::BidirVertex::bsdf, lux::DistanceSquared(), evalPath(), lux::Light::group, lux::Light::IsEnvironmental(), lux::Light::Le(), lux::Scene::lights, lux::BidirVertex::ng, lux::BidirVertex::ns, lux::BidirVertex::p, p, lux::TsPack::time, lux::Ray::time, and lux::BidirVertex::wo.
Referenced by lux::BidirIntegrator::Li().
static bool getLight | ( | const TsPack * | tspack, | |
const Scene * | scene, | |||
const BidirIntegrator & | bidir, | |||
vector< BidirVertex > & | eyePath, | |||
int | nEye, | |||
vector< BidirVertex > & | lightPath, | |||
int | nLight, | |||
float | lightDirectPdf, | |||
SWCSpectrum * | Ll, | |||
float * | weight | |||
) | [static] |
Definition at line 678 of file integrators/bidirectional.cpp.
References evalPath().
Referenced by lux::BidirIntegrator::Li().
static bool getLightHit | ( | const TsPack * | tspack, | |
const Scene * | scene, | |||
const BidirIntegrator & | bidir, | |||
vector< BidirVertex > & | eyePath, | |||
int | length, | |||
vector< SWCSpectrum > & | Le, | |||
vector< float > & | weight | |||
) | [static] |
Definition at line 558 of file integrators/bidirectional.cpp.
References evalPath().
Referenced by lux::BidirIntegrator::Li().
static bool visible | ( | const TsPack * | tspack, | |
const Scene * | scene, | |||
const Point & | P0, | |||
const Point & | P1, | |||
float * | pdf, | |||
float * | pdfR, | |||
SWCSpectrum * | f | |||
) | [static] |
Definition at line 311 of file integrators/bidirectional.cpp.
References lux::VisibilityTester::SetSegment(), lux::VisibilityTester::TestOcclusion(), and lux::TsPack::time.
Referenced by evalPath(), main(), and lux::LuxGuiApp::ProcessCommandLine().
static float weightPath | ( | const vector< BidirVertex > & | eye, | |
int | nEye, | |||
int | eyeDepth, | |||
const vector< BidirVertex > & | light, | |||
int | nLight, | |||
int | lightDepth, | |||
float | pdfLightDirect, | |||
bool | isLightDirect | |||
) | [static] |
Definition at line 320 of file integrators/bidirectional.cpp.
References lux::BSDF_SPECULAR, cimg_library::cimg::max(), and p.
Referenced by evalPath().
const u_int passThroughLimit = 10000 [static] |
Definition at line 35 of file integrators/bidirectional.cpp.
Referenced by generateEyePath(), and generateLightPath().
DynamicLoader::RegisterSurfaceIntegrator<BidirIntegrator> r("bidirectional") [static] |