1#ifndef _BBM_BSDFMODEL_H_
2#define _BBM_BSDFMODEL_H_
45 using DefTrue =
ArgDef(
true);
52#ifdef BBM_BSDF_ENABLE_FORWARD
57 #define BBM_BSDF_FORWARD \
58 BBM_FORWARD_CPP_ARGS_CONST(eval, bbm::arg<const Vec3d&, "in">, \
59 bbm::arg<const Vec3d&, "out">, \
60 bbm::arg<BsdfFlag, "component", bbm::detail::DefBsdfAll>, \
61 bbm::arg<bbm::unit_t, "unit", bbm::detail::DefUnitRad>, \
62 bbm::arg<Mask, "mask", bbm::detail::DefTrue>); \
63 BBM_FORWARD_CPP_ARGS_CONST(sample, bbm::arg<const Vec3d&, "out">, \
64 bbm::arg<const Vec2d&, "xi">, \
65 bbm::arg<BsdfFlag, "component", bbm::detail::DefBsdfAll>, \
66 bbm::arg<bbm::unit_t, "unit", bbm::detail::DefUnitRad>, \
67 bbm::arg<Mask, "mask", bbm::detail::DefTrue>); \
68 BBM_FORWARD_CPP_ARGS_CONST(pdf, bbm::arg<const Vec3d&, "in">, \
69 bbm::arg<const Vec3d&, "out">, \
70 bbm::arg<BsdfFlag, "component", bbm::detail::DefBsdfAll>, \
71 bbm::arg<bbm::unit_t, "unit", bbm::detail::DefUnitRad>, \
72 bbm::arg<Mask, "mask", bbm::detail::DefTrue>); \
73 BBM_FORWARD_CPP_ARGS_CONST(reflectance, bbm::arg<const Vec3d&, "out">, \
74 bbm::arg<BsdfFlag, "component", bbm::detail::DefBsdfAll>, \
75 bbm::arg<bbm::unit_t, "unit", bbm::detail::DefUnitRad>, \
76 bbm::arg<Mask, "mask", bbm::detail::DefTrue>); \
79 #define BBM_BSDF_FORWARD
89 std::ostream&
operator<<(std::ostream& s,
const BSDFMODEL& model)
#define ArgDef(value)
Helper Macro for creating the type of a lambda that returns a value.
Definition: arg.h:259
Default bsdf attribute types.
All BBM methods are defined to operate on a variety of value types and spectrum types....
Tools for easy creation of a constructors.
Enum for passing Isotropic or Anisotropic options to a BSDF.
Structure to hold a sampled direction and corresponding pdf.
bsdfmodel concept
Definition: bsdfmodel.h:33
Macros for checking if a class meets a concept.
Definition: aggregatebsdf.h:29
std::ostream & operator<<(std::ostream &s, const BSDF &bsdf)
Definition: bsdf_base.h:138
std::string toString(const T &)
toString alias
Definition: stringconvert.h:594
Helper structures and methods for storing precomputed compiled data.
Shading frame transformations.
Methods for handling spherical coordinates.
Light unit: Radiance or Importance.
Compile-time reflection of: