21 #ifndef LIB_LIGHTMETRICA_GENERALIZED_BSDF_H
22 #define LIB_LIGHTMETRICA_GENERALIZED_BSDF_H
25 #include "math.types.h"
26 #include "transportdirection.h"
34 enum GeneralizedBSDFType
41 DiffuseReflection = 1<<0,
42 DiffuseTransmission = 1<<1,
43 SpecularReflection = 1<<2,
44 SpecularTransmission = 1<<3,
45 GlossyReflection = 1<<4,
46 GlossyTransmission = 1<<5,
49 DeltaLightDirection = 1<<6,
50 NonDeltaLightDirection = 1<<7,
51 DeltaEyeDirection = 1<<8,
52 NonDeltaEyeDirection = 1<<9,
55 Diffuse = DiffuseReflection | DiffuseTransmission,
56 Specular = SpecularReflection | SpecularTransmission,
57 Glossy = GlossyReflection | GlossyTransmission,
58 Reflection = DiffuseReflection | SpecularReflection | GlossyReflection,
59 Transmission = DiffuseTransmission | SpecularTransmission | GlossyTransmission,
62 LightDirection = DeltaLightDirection | NonDeltaLightDirection,
63 EyeDirection = DeltaEyeDirection | NonDeltaEyeDirection,
66 AllEmitter = LightDirection | EyeDirection,
67 AllBSDF = Diffuse | Specular | Glossy,
68 All = AllEmitter | AllBSDF,
71 Delta = Specular | DeltaLightDirection | DeltaEyeDirection,
72 NonDelta = All & ~Delta
139 : type(result.sampledType)
140 , transportDir(query.transportDir)
150 , transportDir(transportDir)
250 #endif // LIB_LIGHTMETRICA_GENERALIZED_BSDF_H
Math::Vec3 wo
Sampled outgoing direction in world coordinates.
Definition: generalizedbsdf.h:112
Math::Vec3 wo
Outgoing direction in shading coordinates.
Definition: generalizedbsdf.h:128
Definition: generalizedbsdf.h:168
virtual Math::Vec3 EvaluateDirection(const GeneralizedBSDFEvaluateQuery &query, const SurfaceGeometry &geom) const =0
Definition: generalizedbsdf.h:80
Math::Vec3 wi
Input direction in world coordinates.
Definition: generalizedbsdf.h:87
Math::Vec3 weight[2]
Evaluated weights.
Definition: generalizedbsdf.h:113
Math::PDFEval pdf[2]
Evaluated PDFs.
Definition: generalizedbsdf.h:114
Math::PDFEval pdf
Evaluated PDF. We note that some BSDFs, the PDF cannot be explicitly evaluated.
Definition: generalizedbsdf.h:100
TransportDirection transportDir
Transport direction.
Definition: generalizedbsdf.h:126
virtual bool SampleAndEstimateDirectionBidir(const GeneralizedBSDFSampleQuery &query, const SurfaceGeometry &geom, GeneralizedBSDFSampleBidirResult &result) const =0
virtual bool SampleDirection(const GeneralizedBSDFSampleQuery &query, const SurfaceGeometry &geom, GeneralizedBSDFSampleResult &result) const =0
virtual Math::Vec3 SampleAndEstimateDirection(const GeneralizedBSDFSampleQuery &query, const SurfaceGeometry &geom, GeneralizedBSDFSampleResult &result) const =0
Math::Float uComp
Uniform random number for component selection.
Definition: generalizedbsdf.h:85
Definition: generalizedbsdf.h:95
Definition: surfacegeometry.h:36
int type
Requested BSDF type(s).
Definition: generalizedbsdf.h:83
virtual Math::PDFEval EvaluateDirectionPDF(const GeneralizedBSDFEvaluateQuery &query, const SurfaceGeometry &geom) const =0
Math::Vec2 sample
Uniform random numbers for sampling BSDF.
Definition: generalizedbsdf.h:84
int sampledType
Sampled BSDF type.
Definition: generalizedbsdf.h:98
virtual int BSDFTypes() const =0
Math::Vec3 wo
Sampled outgoing direction in world coordinates.
Definition: generalizedbsdf.h:99
int type
Requested BSDF type.
Definition: generalizedbsdf.h:125
Math::Vec3 wi
Input direction in shading coordinates.
Definition: generalizedbsdf.h:127
bool forced
Forces to evaluate values regardless of wi or wo. This is valid only when type is Specular...
Definition: generalizedbsdf.h:129
Definition: generalizedbsdf.h:108
int sampledType
Sampled BSDF type.
Definition: generalizedbsdf.h:111
Definition: generalizedbsdf.h:122
TransportDirection transportDir
Transport direction.
Definition: generalizedbsdf.h:86