37 #ifndef RixIntegrator_h 38 #define RixIntegrator_h 58 static const RixChannelId k_InvalidChannelId = 2147483647;
128 int nChans,
RixChannelId const* ids,
int iCtxIndex,
float const value) = 0;
171 float const distance,
172 bool const isVolume =
true,
208 virtual int AddSample(
int iCtxIndex) = 0;
241 k_rtTransmission = 3,
267 uint32_t private0[5];
269 mutable uint16_t hitId;
297 this->shadingCtxIndex = _shadingCtxIndex;
301 bool const entering = Dot(Ngn[_shadingCtxIndex], this->direction) <= 0.f;
317 this->shadingCtxIndex = _shadingCtxIndex;
319 this->lobeSampled.
Set(
357 float rayOriginRadius,
358 float rayOriginSpread,
361 bool lightPath =
false)
363 float pdfSpread = 0.0f;
372 pdfSpread = 0.125f / sqrtf(fPdf);
389 float curvatureSpread = rayOriginSpread + 2.0f * curvature * rayOriginRadius;
390 newSpread = std::max(curvatureSpread, pdfSpread);
406 newSpread = std::max(rayOriginSpread, pdfSpread);
418 newSpread = rayOriginSpread;
422 if (!(newSpread <= 1.0f)) newSpread = 1.0f;
423 if (newSpread < -1.0f) newSpread = -1.0f;
424 assert(-1.0f <= newSpread && newSpread <= 1.0f);
426 this->raySpread = newSpread;
438 return wavelength != 0.0f ?
439 (int((wavelength - 380.0f) * (65534.0f / (780.0f - 380.0f)) + 0.5f) + 1) :
452 return encodedWavelength != 0 ?
453 (float(encodedWavelength - 1) * ((780.0f - 380.0f) / 65534.0f) + 380.0f) :
612 static const int k_MaxRaysPerBatch = 32768;
788 bool isLightPath =
false,
790 bool isPrimary =
false,
791 bool isVolume =
false,
792 bool stochasticMode =
true)
794 int nearestHitFlags =
803 raytype, nearestHitFlags, subset, excludeSubset, hitSides, numShadingCtxs, shadingCtxs);
820 bool isPrimary =
false,
821 bool isVolume =
false,
822 bool stochasticMode =
true)
824 int nearestHitFlags =
830 nearestHitFlags, subset, excludeSubset, hitSides, hits);
894 template <
class T> T*
New(
size_t nObjs)
897 return new (mem) T[nObjs];
980 for (
int i = 0; i < *numShadingCtxs; ++i)
985 for (
int j = 0; j < sCtx->
numPts; ++j)
991 Integrate(*numShadingCtxs, shadingCtxs, iCtx);
1067 void const* results)
1164 #define RIX_INTEGRATORFACTORYCREATE \ 1165 extern "C" PRMANEXPORT RixIntegratorFactory* CreateRixIntegratorFactory(const char* hint) 1167 #define RIX_INTEGRATORFACTORYDESTROY \ 1168 extern "C" PRMANEXPORT void DestroyRixIntegratorFactory(RixIntegratorFactory* factory) #define US_NULL
Definition: RiTypesHelper.h:683
PRMAN_INLINE bool GetReflect() const
Definition: RixBxdfLobe.h:680
Definition: RixIntegrator.h:480
All-inlined interface for generating sample points for use by Monte Carlo integration and multiple-im...
Definition: RixRNG.h:59
RixShadingContext is analogous to a RenderMan grid - it is a group of 1 or more points that may be sh...
Definition: RixShading.h:663
T * New(size_t nObjs)
Definition: RixIntegrator.h:894
virtual void GetNearestHits(int nRays, RtRayGeometry const *rays, RtHitPoint *hits, RtUString const subset=US_NULL, RtUString const excludeSubset=US_NULL, RtHitSides hitSides=k_SidesBoth, bool isPrimary=false, bool isVolume=false, bool stochasticMode=true)
Definition: RixIntegrator.h:812
virtual void Integrate(int numShadingCtxs, RixShadingContext const *shadingCtxs[], RixIntegratorContext &iCtx)=0
Integrate() is a secondary entry point for this class.
bool unused1
Max samples to be handled by manifold walking. Defaults to 0 (no manifold walk).
Definition: RixIntegrator.h:593
This class allows integrators to instrospect the rendering environment.
Definition: RixIntegrator.h:473
virtual bool Write(RixChannelId id, int iCtxIndex, float const value)=0
Write() is similar to Splat(), except that it overwrites the existing value instead of accumulating...
virtual void WriteDistance(int const iCtxIndex, float const distance, bool const isVolume=true, RixShadingContext const *sCtx=nullptr)=0
Overwrites the existing hit distance and information.
float dist
Geometric normal on hit.
Definition: RixIntegrator.h:462
uint16_t rayId
Index into the lauching shading context.
Definition: RixIntegrator.h:264
int manifoldWalkMaxSamples
Definition: RixIntegrator.h:595
Definition: RixIntegrator.h:490
RtRayGeometry * primaryRays
The primary camera rays.
Definition: RixIntegrator.h:625
PRMAN_INLINE bool GetSolidAngle() const
Definition: RixBxdfLobe.h:662
float maxDist
Minimum hit distance. Used only for primary rays.
Definition: RixIntegrator.h:256
enum RixDisplayChannel::ChannelStyle style
void InitTransmitOrigination(RixShadingContext const *sCtx, int _shadingCtxIndex)
InitTransmission() is analogous to InitOrigination() but should be used for transmission rays...
Definition: RixIntegrator.h:314
float * time
Shutter-normalized times associated with each ray.
Definition: RixIntegrator.h:630
pxrcore::ColorRGB RtColorRGB
Definition: RiTypesHelper.h:520
#define k_RixShadingVersion
Definition: RixShading.h:97
RtUString shadowExcludeSubset
Additional shadow exclusion subset.
Definition: RixIntegrator.h:598
char _reserved[15]
Definition: RixIntegrator.h:605
RixBXLobeSampled lobeSampled
See RayType for possible values.
Definition: RixIntegrator.h:260
virtual bool SplatMulti(int nChans, RixChannelId const *ids, int iCtxIndex, float const value)=0
The multi-channel version of Splat(), taking a list of channels to accumulate to. ...
Rix interfaces are obtained from an RixContext.
Definition: RixInterfaces.h:172
int cameraMediumPriority
Priority of the medium surrounding the camera. Defaults to 0.
Definition: RixIntegrator.h:585
SamplingModes
Indicates the sampling modes supported by the integrator.
Definition: RixIntegrator.h:477
RixShadingPlugin is the base class for RixBxdfFactory, RixDisplacementFactory, RixDisplayFilter, RixIntegrator, RixLightFilter, RixLightFactory, RixPattern, RixProjection, and RixSampleFilter.
Definition: RixShading.h:168
virtual bool GetProperty(RixIntegratorContext &iCtx, const int *rayIds, int nRays, RayProperty rayProperty, void const *results)
Allows for retrieving ray properties.
Definition: RixIntegrator.h:1062
Definition: RixIntegrator.h:79
int m_version
Interface version.
Definition: RixIntegrator.h:534
void SetRaySpread(RixBXLobeSampled lobe, float rayOriginRadius, float rayOriginSpread, float curvature, float fPdf, bool lightPath=false)
Computes ray spread for given reflection/transmission type, pdf, and surface curvature, using two approaches:
Definition: RixIntegrator.h:355
RixChannelId id
Definition: RixIntegrator.h:70
Definition: RixIntegrator.h:80
Definition: RixIntegrator.h:481
int numBootstrapIncrements
Used to request iterations which do not contribute to the final result.
Definition: RixIntegrator.h:574
virtual void SplatOpacity(RixChannelId id, int iCtxIndex, float const opacity)=0
Accumulates a given opacity value into the sample, which will be pixel-filtered and blended to create...
int numActiveRays
Size of the primaryRays array.
Definition: RixIntegrator.h:623
The RixVolumeServices interface allow the renderer to provide services that are useful for volume int...
Definition: RixVolume.h:208
RtFloat3 RtPoint3
Definition: RiTypesHelper.h:70
virtual RixDisplayServices * GetDisplayServices(int version=1) const =0
uint16_t groupingId
Used for ray-tracing bias calculation.
Definition: RixIntegrator.h:466
Definition: RixIntegrator.h:615
virtual void DiscardIteration(bool redo=false)=0
Cancels the results of any calls made to Splat(), SplatMulti(), and Write() during this invocation of...
int maxIntegrateSize
Integration state.
Definition: RixIntegrator.h:544
RixIntegratorFactory()
Definition: RixIntegrator.h:1158
LightingModes
Indicates the lighting modes supported by the integrator.
Definition: RixIntegrator.h:488
uint16_t unused
Attribute "grouping" "id" from the hit geometry.
Definition: RixIntegrator.h:467
virtual ~RixDisplayServices()
Definition: RixIntegrator.h:231
virtual int AddSample(int iCtxIndex)=0
Creates and adds a new sample.
Indicates if the rays should not hit any volumes.
Definition: RixIntegrator.h:645
virtual RixVolumeServices * GetVolumeServices(int version=1) const =0
~RixIntegratorContext() override
Definition: RixIntegrator.h:901
float filterSize
(u,v) coordinates of the hit.
Definition: RixIntegrator.h:464
Definition: RixIntegrator.h:479
Definition: RixIntegrator.h:240
int numRays
Unique identifier for integrator context.
Definition: RixIntegrator.h:619
Indicates if the caller wants the method to return 'empty' shading contexts for ray misses...
Definition: RixIntegrator.h:642
Definition: RixIntegrator.h:608
virtual void RenderEnd(RixContext &ctx)=0
float opacityThreshold
Data for internal use.
Definition: RixIntegrator.h:268
virtual void DestroyIntegrator(RixIntegrator const *integrator)=0
virtual bool Splat(RixChannelId id, int iCtxIndex, float const value)=0
Accumulates a value into a given display channel for a given path sample.
int maxShadingCtxSize
The maximum number of points that a shading context will encapsulate.
Definition: RixIntegrator.h:548
virtual void WriteOpacity(RixChannelId id, int iCtxIndex, float const value)=0
Overwrites the current opacity value into the sample, which will be pixel-filtered and blended to cre...
Definition: RixIntegrator.h:640
PRMAN_INLINE bool GetTransmit(bool *entering=NULL) const
Definition: RixBxdfLobe.h:686
This struct represents the characteristics of just one lobe of a bxdf.
Definition: RixBxdfLobe.h:63
virtual void * Allocate(size_t nObjs, size_t objSize, MemCategory)=0
bool wantsTransmission
Expresses whether integrator has a non trivial GetTransmission() method.
Definition: RixIntegrator.h:587
virtual RixIntegratorEnvironment const & GetEnv(int version=1) const =0
Definition: RixIntegrator.h:484
RtUString channel
Definition: RixIntegrator.h:84
virtual void GetBuiltinVar(BuiltinVar, int const **var) const =0
RixDisplayChannel const *const displays
Definition: RixIntegrator.h:556
virtual void GetTransmission(int nRays, RtRayGeometry const *rays, RtColorRGB *transmissions, RtColorRGB *volumeEmissions, RtUString const subset, RtUString const excludeSubset, RixIntegratorContext &iCtx)
The GetTransmission() method will only be called if the integrator has set the wantsTransmission fiel...
Definition: RixIntegrator.h:1025
Definition: RiTypesHelper.h:82
float raySpread
Ray direction.
Definition: RixIntegrator.h:251
RixLPEState * lpeState
User-provided index in the ray bundle.
Definition: RixIntegrator.h:265
Definition: RixIntegrator.h:234
T * Allocate(size_t nObjs)
Definition: RixIntegrator.h:888
Definition: RixShading.h:114
RtHitSides
Definition: RixShading.h:99
Definition: RixIntegrator.h:73
RixParameterList exposes the non-varying values that are associated with the definition or editing of...
Definition: RixShading.h:575
bool unused2
Definition: RixIntegrator.h:594
NearestHitFlags
Definition: RixIntegrator.h:638
float cameraMediumIOR
If the camera is inside a non-trivial participating medium, this is the IOR of the medium...
Definition: RixIntegrator.h:583
Definition: RixIntegrator.h:82
int numPts
numPts is the number of shading points.
Definition: RixShading.h:696
#define PRMAN_ALIGNED_16
Definition: prmanapi.h:109
bool wantsIncrementBarrier
Expresses whether integrator requires all threads to synchronize on each rendering increment...
Definition: RixIntegrator.h:565
bool usesLightingServices
Indicates if the integrator will make use of RixLightingServices.
Definition: RixIntegrator.h:591
MemCategory
Allocate() and New() are utility (fully inlined and templated) methods to assist with memory manageme...
Definition: RixIntegrator.h:881
RtPoint3 P
Definition: RixIntegrator.h:460
PRMAN_INLINE RixDisplayChannel const * GetDisplayChannel(RtUString name) const
Returns the first display channel with the corresponding name.
Definition: RixIntegrator.h:526
float originRadius
Ray origin.
Definition: RixIntegrator.h:248
RixBXLobeTraits lobesWanted
Camera state.
Definition: RixIntegrator.h:580
virtual void RenderBegin(RixContext &rCtx, RixIntegratorEnvironment &rixIntegratorEnv, RixParameterList const *rixParameterList)=0
RenderBegin() and RenderEnd()` bound a rendering session.
SamplingModes supportedSamplingModes
Deprecated.
Definition: RixIntegrator.h:550
int * integratorCtxIndex
integratorCtxIndex maps indices to varying ShadingContext entries to the index associated with Integr...
Definition: RixShading.h:846
int const numIncrements
Total number of increments. This is usually maxsamples.
Definition: RixIntegrator.h:571
virtual void Synchronize(RixContext &rCtx, RixSCSyncMsg rixSCSyncMsg, RixParameterList const *rixParameterList)
Synchronize() is used to occasionally deliver status information from the renderer.
Definition: RixIntegrator.h:932
RayType
Definition: RixIntegrator.h:236
float mpSize
Used for texture filtering.
Definition: RixIntegrator.h:465
Definition: RixIntegrator.h:81
virtual void GetDisplayChannels(int *numDisplays, RixDisplayChannel const **displays)=0
Gets a list of available display channels.
int const numRaysPerIncrement
(unmutable).
Definition: RixIntegrator.h:569
Definition: RixIntegrator.h:458
float time
Maximum hit distance.
Definition: RixIntegrator.h:257
Definition: RixIntegrator.h:243
RtFloat3 RtNormal3
Definition: RiTypesHelper.h:73
Definition: RixIntegrator.h:883
RixSCSyncMsg
RixSCSyncMsgs - are the possible states delivered through Synchronize methods.
Definition: RixShading.h:127
#define PRMAN_INLINE
Definition: prmanapi.h:99
uint16_t shadingCtxIndex
Associated primary ray index.
Definition: RixIntegrator.h:263
virtual RixRefCntPtr< RixLPE > GetRixLPE(int version=1) const =0
Multiple methods of RixDisplayServices require similar parameters:
Definition: RixIntegrator.h:97
Definition: RiTypesHelper.h:546
Usage
Definition: RixLighting.h:142
PRMAN_INLINE int RixIsFinite(float x)
Definition: RixShadingUtils.h:155
RixShadingContext::Id shadingCtxId
Characteristics of the BxDF lobe this ray samples.
Definition: RixIntegrator.h:261
ChannelType
Definition: RixIntegrator.h:76
RtVector3 direction
Radius of ray at its origin.
Definition: RixIntegrator.h:249
RtNormal3 Ng
Hit position.
Definition: RixIntegrator.h:461
RtPoint3 origin
Definition: RixIntegrator.h:247
Definition: RixIntegrator.h:74
struct RixShadingContext::Id shadingCtxId
uint16_t ignoreGroupingId
If non-zero: ignore geometry with the specified Attribute "grouping" "id".
Definition: RixIntegrator.h:280
enum RixDisplayChannel::ChannelType type
virtual void GetNearestHits(int nRays, RtRayGeometry const *rays, RixBXLobeTraits const &lobesWanted, RtRayGeometry::RayType rayType, int nearestHitFlags, RtUString const subset, RtUString const excludeSubset, RtHitSides hitSides, int *numShadingCtxs, RixShadingContext const **shadingCtxs)=0
This version of GetNearestHits() returns ray hits in the form of a list of RixShadingContext.
void InitOrigination(RixShadingContext const *sCtx, RtNormal3 const *Ngn, int _shadingCtxIndex)
InitOrigination() should be called after the ray geometry has been setup for calls to GetNearestHits(...
Definition: RixIntegrator.h:294
void CreateInstanceData(RixContext &rixCtx, RtUString const handle, RixParameterList const *instanceParams, InstanceData *instanceData) final
CreateInstanceData() is called once per plugin-instance.
Definition: RixIntegrator.h:1131
Definition: RixIntegrator.h:482
int GetInterface() const override
Definition: RixIntegrator.h:1124
~RixIntegratorFactory() override
Definition: RixIntegrator.h:1160
Length of view vector (type float)
Definition: RixShading.h:949
virtual void IntegrateRays(RixBXLobeTraits const &lobesWanted, int *numShadingCtxs, RixShadingContext const **shadingCtxs, RixIntegratorContext &iCtx)
IntegrateRays() is the primary entry point for this class.
Definition: RixIntegrator.h:960
uint16_t raytype
Shutter-normalized time of ray launch.
Definition: RixIntegrator.h:259
Definition: RixIntegrator.h:78
static PRMAN_INLINE uint16_t EncodeWavelength(float wavelength)
Converts a wavelenght (in nanometers) to a compact 16 bits representation of it.
Definition: RixIntegrator.h:436
RixIntegratorEnvironment()
Definition: RixIntegrator.h:494
Represents the LPE system state of a light transport path.
Definition: RixLPE.h:439
PRMAN_INLINE void Set(bool vDiscrete, bool vSpecular, bool vReflect, bool vContinuation, bool vUser, unsigned char vLpeId, unsigned char vLobeId, bool vThinShadowFlag=false)
Set all fields and also sets the valid bit to true.
Definition: RixBxdfLobe.h:829
virtual void ReleaseShadingContexts(int numShadingCtxs, RixShadingContext const **shadingCtxs)=0
ReleaseShadingContexts() must be called to release the shading contexts created via GetNearestHits()...
Note that the same channel name may appear multiple times within a list of RixDisplayChannels.
Definition: RixIntegrator.h:68
unsigned int RixChannelId
Definition: RixIntegrator.h:55
RtPoint2 uv
Distance to hit point. 0 means 'no hit'.
Definition: RixIntegrator.h:463
uint16_t flags
Internal hit id, zero means 'no hit.'.
Definition: RixIntegrator.h:272
bool lightingServicesManagesParticipatingMedia
This requests lighting services to multiply the weighted transmission value on the current shading co...
Definition: RixIntegrator.h:604
bool wantsEmptyIntegrate
Increment state.
Definition: RixIntegrator.h:561
This struct represents the characteristics of potentially several lobes of a bxdf in aggregate...
Definition: RixBxdfLobe.h:178
Rays should continue as continuations through semi-opaque surfaces rather than stochastically termina...
Definition: RixIntegrator.h:644
virtual RixIntegrator * CreateIntegrator(RixContext &rCtx, RtUString const handle, RixParameterList const *pList)=0
virtual void GetNearestHits(int nRays, RtRayGeometry const *rays, RixBXLobeTraits const &lobesWanted, bool wantsMisses, int *numShadingCtxs, RixShadingContext const **shadingCtxs, RtUString const subset=US_NULL, RtUString const excludeSubset=US_NULL, bool isLightPath=false, RtHitSides hitSides=k_SidesBoth, bool isPrimary=false, bool isVolume=false, bool stochasticMode=true)
Definition: RixIntegrator.h:778
RayProperty
There are a set of 'properties' of a ray the integrator could provide the bxdf that can potentially p...
Definition: RixShading.h:499
pxrcore::UString RtUString
Definition: RiTypesHelper.h:682
PRMAN_INLINE void SetEntering(bool entering)
Definition: RixBxdfLobe.h:785
virtual ~RixIntegrator()
Definition: RixIntegrator.h:1118
shadingCtxId is a unique identifier for this shading context.
Definition: RixShading.h:672
Definition: RixIntegrator.h:906
Definition: RixIntegrator.h:491
Definition: RixShading.h:101
Definition: RixShading.h:280
int integratorCtxId
Definition: RixIntegrator.h:618
int const numDisplays
Display state (unmutable).
Definition: RixIntegrator.h:555
static PRMAN_INLINE float DecodeWavelength(uint16_t encodedWavelength)
Converts from encoded 16 bits representation of wavelength to nanometers In both units 0 means "full ...
Definition: RixIntegrator.h:450
virtual bool SetProperty(RixIntegratorContext &iCtx, const int *rayIds, int nRays, RayProperty rayProperty, void const *values)
Allows for retrieving ray properties.
Definition: RixIntegrator.h:1101
virtual RixLightingServices * GetLightingServices(int version=1) const =0
RtFloat3 RtVector3
Definition: RiTypesHelper.h:72
Definition: RixShading.h:103
ChannelStyle
Definition: RixIntegrator.h:71
Indicates if the rays should not hit anything beyond the local volume.
Definition: RixIntegrator.h:643
LightingModes lightingRequirements
Deprecated.
Definition: RixIntegrator.h:552
Definition: RixIntegrator.h:239
Definition: RixIntegrator.h:1121
void SynchronizeInstanceData(RixContext &rixCtx, RtUString const handle, RixParameterList const *instanceParams, uint32_t const editHints, InstanceData *instanceData) final
SynchronizeInstanceData() will only be called if InstanceData::synchronizeHints was set to a non-zero...
Definition: RixIntegrator.h:1141
int16_t integratorCtxIndex
Shading context unique identifier.
Definition: RixIntegrator.h:262
#define PIXAR_ARGUSED(x)
Definition: prmanapi.h:170
uint16_t wavelength
Flags for internal use.
Definition: RixIntegrator.h:277
RixRNG * rngCtx
A pointer to single RixRNG object, properly configured for numRays samples.
Definition: RixIntegrator.h:627
Indicate if the ray should be considered as a primary ray or a continuation of one, uninterrupted from the camera or a light source.
Definition: RixIntegrator.h:641
virtual void GetTransmission(int nRays, RtRayGeometry const *rays, RtColorRGB *transmissions, RtColorRGB *volumeEmissions, RtUString const subset=US_NULL, RtUString const excludeSubset=US_NULL)=0
GetTransmission() can be invoked by an integrator to compute the transmittance between two points in ...