RenderManAPI  24.0
RixShadingBuiltin.h
Go to the documentation of this file.
1 /*
2 # ------------------------------------------------------------------------------
3 #
4 # Copyright (c) 2020 Pixar. All rights reserved.
5 #
6 # The information in this file (the "Software") is provided for the exclusive
7 # use of the software licensees of Pixar ("Licensees"). Licensees have the
8 # right to incorporate the Software into other products for use by other
9 # authorized software licensees of Pixar, without fee. Except as expressly
10 # permitted herein, the Software may not be disclosed to third parties, copied
11 # or duplicated in any form, in whole or in part, without the prior written
12 # permission of Pixar.
13 #
14 # The copyright notices in the Software and this entire statement, including the
15 # above license grant, this restriction and the following disclaimer, must be
16 # included in all copies of the Software, in whole or in part, and all permitted
17 # derivative works of the Software, unless such copies or derivative works are
18 # solely in the form of machine-executable object code generated by a source
19 # language processor.
20 #
21 # PIXAR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
22 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL PIXAR BE
23 # LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
24 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
25 # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
26 # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. IN NO CASE WILL
27 # PIXAR'S TOTAL LIABILITY FOR ALL DAMAGES ARISING OUT OF OR IN CONNECTION WITH
28 # THE USE OR PERFORMANCE OF THIS SOFTWARE EXCEED $50.
29 #
30 # Pixar
31 # 1200 Park Ave
32 # Emeryville CA 94608
33 #
34 # ------------------------------------------------------------------------------
35 */
36 
37 #ifndef RixBuiltinShading_h
38 #define RixBuiltinShading_h
39 
40 #include <cstddef> // for NULL
41 #include "RixBxdf.h" // for RixBXTransportTrait, etc
42 #include "RixBxdfLobe.h" // for RixBXLobeWeights (ptr only), etc
43 #include "RixShading.h" // for RixSCDetail, etc
44 #include "RiTypesHelper.h" // for RtVector3, etc
45 
48 class RixRNG;
49 struct RtRayGeometry;
50 
51 // Subsurface scattering using diffusion approximations:
52 // Burley normalized or three-lobe parameterization
54 {
55 public:
57  RixShadingContext const* sCtx,
58  RixBxdfFactory* f,
59  void* _instanceData)
60  : RixVolumeIntegrator(sCtx, f, _instanceData)
61  {
62  }
63  struct Params
64  {
66  : _version(4),
67  dmfp(NULL),
68  mfp(NULL),
69  bumpNormal(NULL),
71  followTopology(0.0f)
72  {
73  }
74 
75  int const _version; // always first in the struct
76 
77  // Parameterization #1 (used by simple/PxrSubsurface):
78  // (only set one of *dmfp or *mfp; set the other one to NULL)
80  RixSCDetail albedoDetail; // is albedo uniform or varying?
81  RtColorRGB const* dmfp; // rgb diffuse mean free path lengths
82  RixSCDetail dmfpDetail; // is dmfp uniform or varying?
83  RtColorRGB const* mfp; // rgb mean free path -- alternative to dmfp
84  RixSCDetail mfpDetail; // is mfp uniform or varying?
85 
86  // Parameterization #2 (used by PxrSkin and PxrLMSubsurface):
87  RtColorRGB const *color1, *color2, *color3; // 3 colors
89  float const *weight1, *weight2, *weight3; // 3 weights
91  float const *dmfp1, *dmfp2, *dmfp3; // 3 diff. mean free path lengths
93 
94  float unitLength;
95 
96  RtVector3 const* bumpNormal; // for bump-mapped normals
97 
98  int continuationRays; // shoot sss continuation rays?
99 
100  float followTopology; // decrease sss in concave regions?
101 
102  // future parameters will appear here.
103 
104  char _reserved[32]; // always last in the struct
105  };
106  virtual void GetNearestHits(
107  int nRays,
108  RtRayGeometry const* rays,
109  RixRNG* rng,
110  RixBXLobeTraits const& lobesWanted,
111  RixIntegratorContext& iCtx,
112  RixLightingServices* lightingServices,
113  IntegratorDelegate* lcb,
114  int* numShadingCtxs,
115  RixShadingContext const** shadingCtxs,
116  RtUString const subset = US_NULL,
117  RtUString const excludeSubset = US_NULL,
118  bool isLightPath = false,
119  RtHitSides hitSides = k_SidesBoth,
120  bool isPrimary = false) = 0;
121 
122 protected:
124  virtual ~RixSSDiffusion() {}
125 };
126 
127 // Subsurface scattering as brute-force volume scattering
129 {
130 public:
132  RixShadingContext const* sCtx,
133  RixBxdfFactory* f,
134  void* _instanceData)
135  : RixVolumeIntegrator(sCtx, f, _instanceData)
136  {
137  }
138  struct Params
139  {
141  : _version(1),
142  dmfp(NULL),
143  bumpNormal(NULL)
144  {
145  }
146 
147  int const _version; // always first in the struct
148 
149  // Main parameters: albedo, dmfp, ior, g
151  RixSCDetail albedoDetail; // is albedo uniform or varying?
152  RtColorRGB const* dmfp; // rgb diffuse mean free path lengths
153  RixSCDetail dmfpDetail; // is dmfp uniform or varying?
154  float const* ior; // index of refraction
155  RixSCDetail iorDetail; // is ior uniform or varying?
156  float const* g; // scattering mean cosine (anisotropy)
157  RixSCDetail gDetail; // is g uniform or varying?
158 
159  // Additional parameters:
160  float diffuseSwitch; // distance for switch between diffuse and sss (ignored: not used for ptsss)
161  float bias;
162  int disableAlbedoInversion; // (obsolete or debug only?)
166  float unitLength; // multiplier on dmfp values
167 
168  RtVector3 const* bumpNormal; // for bump-mapped normals
169 
170  // future parameters will appear here.
171 
172  char _reserved[32]; // always last in the struct
173  };
174  virtual void GetNearestHits(
175  int nRays,
176  RtRayGeometry const* rays,
177  RixRNG* rng,
178  RixBXLobeTraits const& lobesWanted,
179  RixIntegratorContext& iCtx,
180  RixLightingServices* lightingServices,
181  IntegratorDelegate* lcb,
182  int* numShadingCtxs,
183  RixShadingContext const** shadingCtxs,
184  RtUString const subset = US_NULL,
185  RtUString const excludeSubset = US_NULL,
186  bool isLightPath = false,
187  RtHitSides hitSides = k_SidesBoth,
188  bool isPrimary = false) = 0;
189 
190 protected:
192  virtual ~RixSSPathTraced() {}
193 };
194 
195 class RixNullBxdf : public RixBxdf
196 {
197 public:
199  virtual void GetAllLobeTraits(RixBXLobeTraits*) = 0;
200  virtual int GetNumLobes() = 0;
201 
202  virtual void GenerateSample(
203  RixBXTransportTrait transportTrait,
204  RixBXLobeTraits const* lobesWanted,
205  RixRNG* rng,
206  RixBXLobeSampled* lobeSampled,
207  RtVector3* directions,
208  RixBXLobeWeights& weights,
209  float* forwardPdfs,
210  float* reversePdfs,
211  RtColorRGB* compTrans = NULL) = 0;
212 
213  virtual void EvaluateSample(
214  RixBXTransportTrait transportTrait,
215  RixBXLobeTraits const* lobesWanted,
216  RixRNG* rng,
217  RixBXLobeTraits* lobesEvaluated,
218  RtVector3 const* directions,
219  RixBXLobeWeights& weights,
220  float* forwardPdfs,
221  float* reversePdfs) = 0;
222 
223  virtual void EvaluateSamplesAtIndex(
224  RixBXTransportTrait transportTrait,
225  RixBXLobeTraits const& lobesWanted,
226  RixRNG* rng,
227  int index,
228  int nSamples,
229  RixBXLobeTraits* lobesEvaluated,
230  RtVector3 const* directions,
231  RixBXLobeWeights& weights,
232  float* forwardPdfs,
233  float* reversePdfs) = 0;
234 
235 private:
236  // no parameters..
237  virtual ~RixNullBxdf() {}
238 };
239 
240 // RixLambertBxdf and RixDirac may go here...
241 
242 #endif
#define US_NULL
Definition: RiTypesHelper.h:683
All-inlined interface for generating sample points for use by Monte Carlo integration and multiple-im...
Definition: RixRNG.h:59
RixSCDetail dmfpDetail
Definition: RixShadingBuiltin.h:153
Definition: RixBxdf.h:264
RixShadingContext is analogous to a RenderMan grid - it is a group of 1 or more points that may be sh...
Definition: RixShading.h:663
RixSCDetail color2Detail
Definition: RixShadingBuiltin.h:88
int const _version
Definition: RixShadingBuiltin.h:147
RtVector3 const * bumpNormal
Definition: RixShadingBuiltin.h:168
float const * weight1
Definition: RixShadingBuiltin.h:89
Params()
Definition: RixShadingBuiltin.h:65
float internalReflectionsEta
Definition: RixShadingBuiltin.h:165
RtUString subset
Definition: RixShadingBuiltin.h:163
RixBXEvaluateDomain
The RixBxdf interface is a shading plugin responsible for creating a RixBxdf from the the ShadingCont...
Definition: RixBxdf.h:121
pxrcore::ColorRGB RtColorRGB
Definition: RiTypesHelper.h:520
RixSCDetail dmfp3Detail
Definition: RixShadingBuiltin.h:92
float followTopology
Definition: RixShadingBuiltin.h:100
RixSCDetail weight1Detail
Definition: RixShadingBuiltin.h:90
RtColorRGB const * color1
Definition: RixShadingBuiltin.h:87
virtual void GetNearestHits(int nRays, RtRayGeometry const *rays, RixRNG *rng, RixBXLobeTraits const &lobesWanted, RixIntegratorContext &iCtx, RixLightingServices *lightingServices, IntegratorDelegate *lcb, 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)=0
RtColorRGB const * dmfp
Definition: RixShadingBuiltin.h:152
Params()
Definition: RixShadingBuiltin.h:140
int disableAlbedoInversion
Definition: RixShadingBuiltin.h:162
RtColorRGB const * dmfp
Definition: RixShadingBuiltin.h:81
float const * dmfp2
Definition: RixShadingBuiltin.h:91
virtual void GenerateSample(RixBXTransportTrait transportTrait, RixBXLobeTraits const *lobesWanted, RixRNG *rng, RixBXLobeSampled *lobeSampled, RtVector3 *directions, RixBXLobeWeights &weights, float *forwardPdfs, float *reversePdfs, RtColorRGB *compTrans=NULL)=0
Bxdf is expected to generate a sample direction and lobe weights for each point in the ShadingContext...
RixSCDetail weight3Detail
Definition: RixShadingBuiltin.h:90
RixSCDetail mfpDetail
Definition: RixShadingBuiltin.h:84
Definition: RixIntegrator.h:615
RixSCDetail
RixSCDetail enumerates the valid sizing qualifiers for SC parameters.
Definition: RixShading.h:432
char _reserved[32]
Definition: RixShadingBuiltin.h:104
Definition: RixShadingBuiltin.h:128
virtual void EvaluateSamplesAtIndex(RixBXTransportTrait transportTrait, RixBXLobeTraits const &lobesWanted, RixRNG *rng, int index, int nSamples, RixBXLobeTraits *lobesEvaluated, RtVector3 const *directions, RixBXLobeWeights &weights, float *forwardPdfs, float *reversePdfs)=0
float const * weight3
Definition: RixShadingBuiltin.h:89
float const * dmfp1
Definition: RixShadingBuiltin.h:91
This struct represents the characteristics of just one lobe of a bxdf.
Definition: RixBxdfLobe.h:63
RtColorRGB const * mfp
Definition: RixShadingBuiltin.h:83
RtVector3 const * bumpNormal
Definition: RixShadingBuiltin.h:96
Definition: RixBxdfLobe.h:428
Definition: RixIntegrator.h:234
RtHitSides
Definition: RixShading.h:99
RixSCDetail albedoDetail
Definition: RixShadingBuiltin.h:151
RixSCDetail albedoDetail
Definition: RixShadingBuiltin.h:80
virtual ~RixSSPathTraced()
for internal use only.
Definition: RixShadingBuiltin.h:192
virtual RixBXEvaluateDomain GetEvaluateDomain()=0
Definition: RixBxdf.h:769
int continuationRays
Definition: RixShadingBuiltin.h:98
RixSCDetail dmfp1Detail
Definition: RixShadingBuiltin.h:92
Definition: RixShadingBuiltin.h:53
RixSSPathTraced(RixShadingContext const *sCtx, RixBxdfFactory *f, void *_instanceData)
Definition: RixShadingBuiltin.h:131
virtual void EvaluateSample(RixBXTransportTrait transportTrait, RixBXLobeTraits const *lobesWanted, RixRNG *rng, RixBXLobeTraits *lobesEvaluated, RtVector3 const *directions, RixBXLobeWeights &weights, float *forwardPdfs, float *reversePdfs)=0
Bxdf is expected to evaluate itself subject to the lobesWanted request.
float const * ior
Definition: RixShadingBuiltin.h:154
Definition: RixShadingBuiltin.h:63
RtColorRGB const * albedo
Definition: RixShadingBuiltin.h:150
bool resolveSelfIntersections
Definition: RixShadingBuiltin.h:164
RixBXTransportTrait
Definition: RixBxdf.h:248
RixSCDetail color3Detail
Definition: RixShadingBuiltin.h:88
PRMAN_INLINE RixBXLobeTraits GetAllLobeTraits()
Definition: RixBxdf.h:545
float const * g
Definition: RixShadingBuiltin.h:156
float const * dmfp3
Definition: RixShadingBuiltin.h:91
float unitLength
Definition: RixShadingBuiltin.h:166
float diffuseSwitch
Definition: RixShadingBuiltin.h:160
Definition: RixShadingBuiltin.h:195
Usage
Definition: RixLighting.h:142
virtual void GetNearestHits(int nRays, RtRayGeometry const *rays, RixRNG *rng, RixBXLobeTraits const &lobesWanted, RixIntegratorContext &iCtx, RixLightingServices *lightingServices, IntegratorDelegate *lcb, 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)=0
virtual ~RixSSDiffusion()
for internal use only.
Definition: RixShadingBuiltin.h:124
int const _version
Definition: RixShadingBuiltin.h:75
RixSCDetail iorDetail
Definition: RixShadingBuiltin.h:155
char _reserved[32]
Definition: RixShadingBuiltin.h:172
Definition: RixShadingBuiltin.h:138
RixSCDetail dmfpDetail
Definition: RixShadingBuiltin.h:82
RixSSDiffusion(RixShadingContext const *sCtx, RixBxdfFactory *f, void *_instanceData)
Definition: RixShadingBuiltin.h:56
This struct represents the characteristics of potentially several lobes of a bxdf in aggregate...
Definition: RixBxdfLobe.h:178
RixSCDetail gDetail
Definition: RixShadingBuiltin.h:157
pxrcore::UString RtUString
Definition: RiTypesHelper.h:682
float const * weight2
Definition: RixShadingBuiltin.h:89
float bias
Definition: RixShadingBuiltin.h:161
RtColorRGB const * albedo
Definition: RixShadingBuiltin.h:79
RixSCDetail dmfp2Detail
Definition: RixShadingBuiltin.h:92
RtFloat3 RtVector3
Definition: RiTypesHelper.h:72
Definition: RixShading.h:103
RixSCDetail color1Detail
Definition: RixShadingBuiltin.h:88
float unitLength
Definition: RixShadingBuiltin.h:94
virtual int GetNumLobes()=0
RtColorRGB const * color3
Definition: RixShadingBuiltin.h:87
RtColorRGB const * color2
Definition: RixShadingBuiltin.h:87
RixSCDetail weight2Detail
Definition: RixShadingBuiltin.h:90
Definition: RixBxdf.h:518