transparent BSDF
parent
ed46832262
commit
8f17ea1323
|
@ -0,0 +1,87 @@
|
|||
#include <mitsuba/render/bsdf.h>
|
||||
|
||||
MTS_NAMESPACE_BEGIN
|
||||
|
||||
/**
|
||||
* Ideal transparent BRDF
|
||||
*/
|
||||
class Transparent : public BSDF {
|
||||
public:
|
||||
Transparent(const Properties &props)
|
||||
: BSDF(props) {
|
||||
m_transmission = props.getSpectrum("transmission", Spectrum(0.8f));
|
||||
m_componentCount = 1;
|
||||
m_type = new unsigned int[m_componentCount];
|
||||
m_type[0] = EDeltaTransmission;
|
||||
m_combinedType = m_type[0];
|
||||
m_usesRayDifferentials = false;
|
||||
}
|
||||
|
||||
Transparent(Stream *stream, InstanceManager *manager)
|
||||
: BSDF(stream, manager) {
|
||||
m_transmission = Spectrum(stream);
|
||||
m_componentCount = 1;
|
||||
m_type = new unsigned int[m_componentCount];
|
||||
m_type[0] = EDeltaTransmission;
|
||||
m_combinedType = m_type[0];
|
||||
m_usesRayDifferentials = false;
|
||||
}
|
||||
|
||||
virtual ~Transparent() {
|
||||
delete[] m_type;
|
||||
}
|
||||
|
||||
void serialize(Stream *stream, InstanceManager *manager) const {
|
||||
BSDF::serialize(stream, manager);
|
||||
|
||||
m_transmission.serialize(stream);
|
||||
}
|
||||
|
||||
Spectrum getDiffuseReflectance(const Intersection &its) const {
|
||||
return Spectrum(0.0f);
|
||||
}
|
||||
|
||||
Spectrum f(const BSDFQueryRecord &bRec) const {
|
||||
return Spectrum(0.0f);
|
||||
}
|
||||
|
||||
Float pdf(const BSDFQueryRecord &bRec) const {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
inline void transmit(const Vector &wi, Vector &wo) const {
|
||||
wo = Vector(wi.x, wi.y, -wi.z);
|
||||
}
|
||||
|
||||
inline Spectrum sample(BSDFQueryRecord &bRec) const {
|
||||
Float pdf;
|
||||
return Transparent::sample(bRec, pdf);
|
||||
}
|
||||
|
||||
Spectrum sample(BSDFQueryRecord &bRec, Float &pdf) const {
|
||||
if (!(bRec.typeMask & m_combinedType))
|
||||
return Spectrum(0.0f);
|
||||
transmit(bRec.wi, bRec.wo);
|
||||
bRec.sampledComponent = 0;
|
||||
bRec.sampledType = EDeltaTransmission;
|
||||
pdf = std::abs(Frame::cosTheta(bRec.wo));
|
||||
return m_transmission;
|
||||
}
|
||||
|
||||
Float pdfDelta(const BSDFQueryRecord &bRec) const {
|
||||
return std::abs(Frame::cosTheta(bRec.wo));
|
||||
}
|
||||
|
||||
Spectrum fDelta(const BSDFQueryRecord &bRec) const {
|
||||
return m_transmission;
|
||||
}
|
||||
|
||||
MTS_DECLARE_CLASS()
|
||||
protected:
|
||||
Spectrum m_transmission;
|
||||
};
|
||||
|
||||
|
||||
MTS_IMPLEMENT_CLASS_S(Transparent, false, BSDF)
|
||||
MTS_EXPORT_PLUGIN(Transparent, "Transparent BRDF");
|
||||
MTS_NAMESPACE_END
|
Loading…
Reference in New Issue