39 #include "RixShading.h"
40 #include "RixShadingUtils.h"
41 #include "RixBxdfLobe.h"
101 enum RixBXEvaluateDomain
114 k_RixBXEmptyDomain = 0,
153 enum RixBXTransportTrait
155 k_RixBXDirectLighting = 1<<0,
156 k_RixBXIndirectLighting = 1<<1,
157 k_RixBXAnyLighting = k_RixBXDirectLighting | k_RixBXIndirectLighting
163 k_RixBXBothEndsInVolume = 0,
164 k_RixBXOriginOnBoundary = 1,
165 k_RixBXEndOnBoundary = 2,
166 k_RixBXBothEndsOnBoundary = 3
172 class RixIntegratorContext;
173 class RixLightingServices;
174 struct RtRayGeometry;
179 virtual int GetInterface()
const {
return k_RixBxdfFactory; }
183 virtual int Init(RixContext &ctx,
char const *pluginPath) = 0;
185 virtual void Finalize(RixContext &ctx) = 0;
221 k_ComputesInterior=0x10,
227 virtual int GetInstanceHints(RtConstPointer )
const
229 return k_TriviallyOpaque;
257 RtConstPointer instancedata) = 0;
258 virtual void EndScatter(
class RixBsdf *bsdf) = 0;
292 virtual void EndOpacity(
class RixOpacity *) {}
338 shadingCtx(sCtx), bxdfFactory(fact) {}
375 return k_RixSCInvalidDetail;
427 RtVector3 *sampleDirs,
429 RtFloat *forwardPdfs,
430 RtFloat *reversePdfs) = 0;
456 RtVector3
const *sampleDirs,
458 RtFloat *forwardPdfs,
459 RtFloat *reversePdfs) = 0;
469 RtVector3
const *sampleDirs,
471 RtFloat *forwardPdfs,
472 RtFloat *reversePdfs) = 0;
478 virtual void Release() {
if (bxdfFactory) bxdfFactory->EndScatter(
this); }
511 shadingCtx(sCtx), bxdfFactory(fact) {}
539 virtual bool GetOpacity(RtColorRGB *result) = 0;
541 virtual void Release() {
if (bxdfFactory) bxdfFactory->EndOpacity(
this); }
575 shadingCtx(sCtx), bxdfFactory(f), params(NULL) {}
581 virtual void SetParameters(
void const *subclassParams)
583 params = subclassParams;
597 virtual void Release() {
if(bxdfFactory) bxdfFactory->EndInterior(
this); }
617 return k_RixSCInvalidDetail;
620 virtual void GetNearestHits(RtInt numRays, RtRayGeometry
const *rays,
623 RixIntegratorContext &iCtx,
624 RixLightingServices *lightingServices,
630 IntegratorDelegate *lcb,
634 char const *subset=NULL,
635 bool isLightPath=
false,
636 RtHitSides hitSides=k_SidesBoth,
647 RixIntegratorContext &iCtx,
650 char const * =NULL) {}
678 RtRayGeometry
const *rays,
681 RixIntegratorContext &iCtx,
688 RtFloat * forwardPdf,
689 RtFloat * reversePdf,
691 RtFloat * forwardBoundaryPdf,
692 RtFloat * reverseBoundaryPdf,
693 RtColorRGB * densityCoefficient) {
695 NULL, NULL, numGrps, shadeGrps, NULL);
696 for (
int i = 0; i < numRays; ++i)
698 forwardPdf[i] = reversePdf[i] = crossPdf[i] =
699 forwardBoundaryPdf[i] = reverseBoundaryPdf[i] =
700 densityCoefficient[i].r = densityCoefficient[i].g =
701 densityCoefficient[i].b = 1.0f;
714 RtRayGeometry
const *rays,
716 RixIntegratorContext &iCtx,
717 RixBXRayFlags
const * ,
720 RtFloat * forwardPdf, RtFloat * reversePdf,
726 for (
int i = 0; i < numRays; ++i)
728 forwardPdf[i] = reversePdf[i] = crossPdf[i] = 1.0f;
753 #define RIX_BXDFPLUGINCREATE \
754 extern "C" PRMANEXPORT RixBxdfFactory *CreateRixBxdfFactory(const char *hint)
756 #define RIX_BXDFPLUGINDESTROY \
757 extern "C" PRMANEXPORT void DestroyRixBxdfFactory(RixBxdfFactory *bxdf)