RenderMan API  23.0
PxrGeoAovs.h
Go to the documentation of this file.
1 /*
2 # ------------------------------------------------------------------------------
3 #
4 # Copyright (c) 1986-2019 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 pxrgeoaovs_h
38 #define pxrgeoaovs_h
39 
40 #include "RixIntegrator.h"
41 #include "RixPredefinedStrings.hpp"
42 #include "RixBxdf.h"
43 #include "RixShading.h"
44 #include "RixShadingUtils.h"
45 
46 namespace PxrGeoAOV
47 {
48 // NOTE: The order of PxrGeoAovIds and s_aovNames MUST match.
49 // Moreover, __Pworld must be listed BEFORE __depth, so we may
50 // be able to reuse __Pworld's Y component in __depth.
51 
53 {
54  k_Pworld = RixShadingContext::k_numBuiltinVars, // the ones before are defined in
55  // RixShadingContext::BuiltinVar
65 };
66 
67 // The order of all of the built in vars must match the order and content of
68 // RixShadingContext::BuiltinVar
69 static const RtUString s_aovNames[k_numGeoAovs] = {RtUString("P"),
70  RtUString("PRadius"),
71  RtUString("Po"),
72  RtUString("Nn"),
73  RtUString("Ngn"),
74  RtUString("Non"),
75  RtUString("Tn"),
76  RtUString("Vn"),
77  RtUString("VLen"),
78  RtUString("curvature"),
79  RtUString("incidentRaySpread"),
80  RtUString("incidentRayRadius"),
81  RtUString("incidentLobeSampled"),
82  RtUString("mpSize"),
83  RtUString("biasR"),
84  RtUString("biasT"),
85  RtUString("u"),
86  RtUString("v"),
87  RtUString("w"),
88  RtUString("du"),
89  RtUString("dv"),
90  RtUString("dw"),
91  RtUString("dPdu"),
92  RtUString("dPdv"),
93  RtUString("dPdw"),
94  RtUString("dPdtime"),
95  RtUString("time"),
96  RtUString("id"),
97  RtUString("id2"),
98  RtUString("outsideIOR"),
99  RtUString("Oi"),
100  RtUString("lpeState"),
101  RtUString("launchShadingCtxId"),
102  RtUString("motionFore"),
103  RtUString("motionBack"),
104  RtUString("curvature_u"),
105  RtUString("curvature_v"),
106  RtUString("dPcameradtime"),
107  RtUString("wavelength"),
108  RtUString("Naon"),
109  RtUString("__Pworld"),
110  RtUString("__Nworld"),
111  RtUString("__depth"),
112  RtUString("__st"),
113  RtUString("__Pref"),
114  RtUString("__WPref"),
115  RtUString("__Nref"),
116  RtUString("__WNref"),
117  RtUString("__faceindex")};
118 
119 // Geometric AOV output can be entirely disabled by emitting:
120 // Option "user" "int disableIntegratorAOVs" [1]
121 //
122 // If you want your integrator to support this option, you need to explicitely
123 // use that function to check its value.
124 //
125 inline bool disableIntegratorAOVs(RixContext& ctx, RixChannelId*& aovIdList)
126 {
128  RtInt count = 0, value = 0;
130  const static RtUString US_USER_DISABLEINTEGRATORAOVS("user:disableIntegratorAOVs");
131  RtInt ret = rstate->GetOption(
132  US_USER_DISABLEINTEGRATORAOVS, &value, sizeof(RtInt), &type, &count);
133  if (ret == 0 && count == 1 && value == 1)
134  {
135  aovIdList = NULL;
136  return true;
137  }
138  return false;
139 }
140 
141 // This method should be called in RenderBegin as this is a one-time operation.
142 // If our AOVs have been requested, their channel ids will be stored in
143 // aovIdList. If not, aovIdList will be NULL to signal the fact that there is
144 // nothing to output.
145 //
147 {
148  if (!aovIdList)
149  {
150  aovIdList = new RixChannelId[k_numGeoAovs];
151  }
152 
153  // set all channels to un-requested
154  for (int i = 0; i < k_numGeoAovs; i++) aovIdList[i] = k_InvalidChannelId;
155 
156  // Get displays
157  RtInt numDisplays = env.numDisplays;
158  RixDisplayChannel const* displayChannels = env.displays;
159 
160  int const entries = sizeof( s_aovNames ) / sizeof( s_aovNames[ 0 ] );
161  // If the line immediately following fails to compile, it likely means that
162  // the table above is out of sync with RixShadingContext::BuiltinVar.
163  // Change the magic number 9 when adding another geoaov
164  static_assert(entries == RixShadingContext::k_numBuiltinVars + 9,
165  "s_aovNames out of sync with RixShadingContext::BuiltinVar");
166 
167  // parse the channels
168  int numRequestedAOVs = 0;
169  for (int dc = 0; dc < numDisplays; ++dc)
170  {
171  for (int n = 0; n < k_numGeoAovs; n++)
172  {
173  if (displayChannels[dc].channel == s_aovNames[n])
174  {
175  // store the channel id in the correct aov slot
176  aovIdList[n] = displayChannels[dc].id;
177  ++numRequestedAOVs;
178  break;
179  }
180  }
181  }
182 
183  // no requested AOVs : de-allocate and set to NULL.
184  // This is an early out signal.
185  if (!numRequestedAOVs)
186  {
187  delete[] aovIdList;
188  aovIdList = NULL;
189  }
190 }
191 
192 // Returns true if we need temp float memory.
193 //
194 inline bool NeedTempFloat(RixChannelId* aovIdList)
195 {
196  assert(aovIdList != NULL);
197  return (aovIdList[k_Pworld] != k_InvalidChannelId && aovIdList[k_depth] != k_InvalidChannelId);
198 }
199 
200 //
201 inline void Splat(
202  RtInt numShadingContexts,
203  RixShadingContext const** sctxs,
204  RixDisplayServices* dspsvc,
205  RtFloat3* aovValue,
206  RtFloat* savedFloat,
207  RixChannelId* aovIdList,
208  RixBXLobeTraits const* lobesWanted = NULL,
209  RtUString coordinateSystem = Rix::k_camera)
210 {
211  // we are NEVER expecting aovIdList == NULL
212  // as it is our signal to skip this function.
213  assert(aovIdList != NULL);
214  assert(aovValue != NULL);
215 
216  // we get multiple shading contexts : go through them one by one.
217  for (int g = 0; g < numShadingContexts; g++)
218  {
219  RixShadingContext const& sctx = *sctxs[g];
220 
221  // no geometry hit : move along
222  if (!sctx.HasHits()) continue;
223 
224  if (RixIsMatte(sctx) > 0) continue;
225 
226  // Should only write for 'camera hits' during integration.
227  // Camera hits are normally the first hits, or for volumes,
228  // the first scattering event.
229  int* rayDepths = new int[sctx.numPts];
230  bool write = false;
231  if (sctx.GetProperty(k_RayDepth, rayDepths))
232  {
233  if (rayDepths[0] == 0)
234  {
235  RixBxdf& bxdf = *(sctx.GetBxdf());
236  if (!bxdf.GetAllLobeTraits().GetContinuation())
237  {
238  write = true;
239  }
240  }
241  }
242  else
243  {
244  write = true;
245  }
246  delete[] rayDepths;
247 
248  if (!write) continue;
249 
250  for (RtInt d = 0; d < k_numGeoAovs; d++)
251  {
252  if (aovIdList[d] != k_InvalidChannelId)
253  {
255  {
256  switch (d)
257  {
258  // Sometimes need to be transformed as Points
261  {
262  RtFloat3 const* p;
264 
265  if (coordinateSystem)
266  {
267  // we need to operate on copies
268  memcpy(aovValue, p, sctx.numPts * sizeof(RtFloat3));
269  // transform copy to specified space
270  sctx.Transform(
273  coordinateSystem,
274  aovValue);
275  p = aovValue;
276  }
277 
278  for (int i = 0; i < sctx.numPts; i++)
279  {
280  if (lobesWanted && !lobesWanted[i].GetValid())
281  {
282  // Currently only single scattered volumes would
283  // have a non-NULL lobesWanted sent into this call, where
284  // lobesWanted set to none suggests no scattering event
285  // occurred and we do not want to splat.
286  continue;
287  }
288  dspsvc->Write(
289  aovIdList[d], sctx.integratorCtxIndex[i], (RtColorRGB)p[i]);
290  }
291  break;
292  }
293 
294  // Sometimes need to be transformed as Vectors
300  {
301  RtFloat3 const* p;
303 
304  if (coordinateSystem)
305  {
306  // we need to operate on copies
307  memcpy(aovValue, p, sctx.numPts * sizeof(RtFloat3));
308  // transform copy to specified space
309  sctx.Transform(
312  coordinateSystem,
313  aovValue);
314  p = aovValue;
315  }
316 
317  for (int i = 0; i < sctx.numPts; i++)
318  {
319  if (lobesWanted && !lobesWanted[i].GetValid())
320  {
321  // Currently only single scattered volumes would
322  // have a non-NULL lobesWanted sent into this call, where
323  // lobesWanted set to none suggests no scattering event
324  // occurred and we do not want to splat.
325  continue;
326  }
327  dspsvc->Write(
328  aovIdList[d], sctx.integratorCtxIndex[i], (RtColorRGB)p[i]);
329  }
330  break;
331  }
332 
335  {
336  RtFloat3 const* p;
338 
339  if (coordinateSystem)
340  {
341  // we need to operate on copies
342  memcpy(aovValue, p, sctx.numPts * sizeof(RtFloat3));
343  // transform copy to specified space
344  sctx.Transform(
347  coordinateSystem,
348  aovValue);
349  p = aovValue;
350  }
351 
352  for (int i = 0; i < sctx.numPts; i++)
353  {
354  if (lobesWanted && !lobesWanted[i].GetValid())
355  {
356  // Currently only single scattered volumes would
357  // have a non-NULL lobesWanted sent into this call, where
358  // lobesWanted set to none suggests no scattering event
359  // occurred and we do not want to splat.
360  continue;
361  }
362  dspsvc->Write(
363  aovIdList[d], sctx.integratorCtxIndex[i], (RtColorRGB)p[i]);
364  }
365  break;
366  }
367 
368  // Sometimes need to be transformed as Normals
373  {
374  RtFloat3 const* p;
376 
377  if (coordinateSystem)
378  {
379  // we need to operate on copies
380  memcpy(aovValue, p, sctx.numPts * sizeof(RtFloat3));
381  // transform copy to specified space
382  sctx.Transform(
385  coordinateSystem,
386  aovValue);
387  p = aovValue;
388  }
389 
390  for (int i = 0; i < sctx.numPts; i++)
391  {
392  if (lobesWanted && !lobesWanted[i].GetValid())
393  {
394  // Currently only single scattered volumes would
395  // have a non-NULL lobesWanted sent into this call, where
396  // lobesWanted set to none suggests no scattering event
397  // occurred and we do not want to splat.
398  continue;
399  }
400  dspsvc->Write(
401  aovIdList[d], sctx.integratorCtxIndex[i], (RtColorRGB)p[i]);
402  }
403  break;
404  }
405 
406  // No transforms ever needed
410  {
411  RtFloat3 const* p;
413  for (int i = 0; i < sctx.numPts; i++)
414  {
415  if (lobesWanted && !lobesWanted[i].GetValid())
416  {
417  // Currently only single scattered volumes would
418  // have a non-NULL lobesWanted sent into this call, where
419  // lobesWanted set to none suggests no scattering event
420  // occurred and we do not want to splat.
421  continue;
422  }
423  dspsvc->Write(
424  aovIdList[d], sctx.integratorCtxIndex[i], (RtColorRGB)p[i]);
425  }
426  break;
427  }
428 
447  {
448  RtFloat const* p;
450  for (int i = 0; i < sctx.numPts; i++)
451  {
452  dspsvc->Write(aovIdList[d], sctx.integratorCtxIndex[i], p[i]);
453  }
454  break;
455  }
460  {
461  int numDisplays;
462  RixDisplayChannel const* displays;
463  dspsvc->GetDisplayChannels(&numDisplays, &displays);
464  bool asInt = false;
465  for (int i = 0; i < numDisplays; i++)
466  {
467  if (displays[i].id == aovIdList[d])
468  {
469  asInt = (displays[i].type == RixDisplayChannel::k_IntegerChannel);
470  break;
471  }
472  }
473  RtInt const* p;
475  if (asInt)
476  for (int i = 0; i < sctx.numPts; i++)
477  dspsvc->Write(aovIdList[d], sctx.integratorCtxIndex[i], p[i]);
478  else
479  for (int i = 0; i < sctx.numPts; i++)
480  dspsvc->Write(
481  aovIdList[d],
482  sctx.integratorCtxIndex[i],
483  static_cast<float>(p[i]));
484  break;
485  }
487  {
488  // Undefined to write a pointer to an AOV.
489  assert(true == false);
490  break;
491  }
492  default: break;
493  }
494  }
495  else
496  {
497  switch (d)
498  {
499  case k_Pworld:
500  {
501  // Get P in current space
502  RtFloat3 const* tmpP;
504 
505  // we can not transform the original P : we must operate
506  // on a copy.
507  memcpy(aovValue, tmpP, sctx.numPts * sizeof(RtFloat3));
508 
509  // transform copy to world space
510  sctx.Transform(
512 
513  // if __depth has also been requested, save Y position
514  // in world space
515  for (int i = 0; i < sctx.numPts; i++)
516  {
517  dspsvc->Write(
518  aovIdList[d], sctx.integratorCtxIndex[i], (RtColorRGB)aovValue[i]);
519  if (aovIdList[k_depth] != k_InvalidChannelId)
520  savedFloat[i] = aovValue[i][1];
521  }
522  break;
523  }
524  case k_Nworld:
525  {
526  // Get Nn in current space
527  RtFloat3 const* tmpN;
529 
530  // we can not transform the original N : we must operate
531  // on a copy.
532  memcpy(aovValue, tmpN, sctx.numPts * sizeof(RtFloat3));
533 
534  sctx.Transform(
536 
537  for (int i = 0; i < sctx.numPts; i++)
538  {
539  dspsvc->Write(
540  aovIdList[d],
541  sctx.integratorCtxIndex[i],
542  (RtColorRGB)(aovValue[i]));
543  }
544  break;
545  }
546  case k_depth:
547  {
548  int* rayTrueDepths = new int[sctx.numPts];
549  bool haveTrueDepths = sctx.GetProperty(k_RayTrueDepth, rayTrueDepths);
550  RtFloat3 const* tmpP = nullptr;
551  RixIntegratorContext *iCtx = nullptr;
552  if (haveTrueDepths)
553  {
555  iCtx = sctx.GetIntegratorContext();
556  }
557  // depth from camera
558  RtFloat const* tmpf;
560  RtFloat3 const* Nn;
562  RtFloat3 const* Vn;
564 
565  // Y position in world space
566  bool PworldNotComputed = (aovIdList[k_Pworld] == k_InvalidChannelId);
567  if (PworldNotComputed)
568  {
570 
571  // we can not transform the original P : we must
572  // operate on a copy.
573  memcpy(aovValue, tmpP, sctx.numPts * sizeof(RtFloat3));
574 
575  // transform copy to world space
576  sctx.Transform(
579  Rix::k_world,
580  aovValue);
581  }
582  RtColorRGB depth;
583  for (int i = 0; i < sctx.numPts; i++)
584  {
585  float VLen;
586  // If the true depth of the shading
587  // context is not zero, VLen might not be
588  // the actual desired camera depth, it may
589  // only be the distance to the previous
590  // hit. Here we recompute an actual
591  // distance from the hit point to the
592  // origin of the camera ray.
593  if (haveTrueDepths && rayTrueDepths[i] != 0)
594  {
595  VLen = RtVector3(tmpP[i] - iCtx->primaryRays[sctx.integratorCtxIndex[i]].origin).Length();
596  }
597  else
598  {
599  VLen = tmpf[i];
600  }
601  if (PworldNotComputed)
602  {
603  depth = RtColorRGB(VLen, aovValue[i][1], AbsDot(Nn[i], Vn[i]));
604  }
605  else
606  {
607  depth = RtColorRGB(VLen, savedFloat[i], AbsDot(Nn[i], Vn[i]));
608  }
609  dspsvc->Write(aovIdList[d], sctx.integratorCtxIndex[i], depth);
610  }
611  delete[] rayTrueDepths;
612  break;
613  }
614  case k_st:
615  {
616  RtFloat2 const* st;
617  RtFloat2 defaultST(0.0f, 0.0f);
618  sctx.GetPrimVar(Rix::k_st, defaultST, &st);
619  for (int i = 0; i < sctx.numPts; i++)
620  {
621  dspsvc->Write(
622  aovIdList[d],
623  sctx.integratorCtxIndex[i],
624  RtColorRGB(st[i].x, st[i].y, 0.f));
625  }
626  break;
627  }
628  case k_Pref:
629  case k_WPref:
630  case k_Nref:
631  case k_WNref:
632  {
633  RtFloat3 const* p;
634  RixSCDetail pDetail = sctx.GetPrimVar(s_aovNames[d], RtFloat3(0.0f), &p);
635  if (pDetail == k_RixSCVarying)
636  {
637  // we need to operate on copies
638  memcpy(aovValue, p, sctx.numPts * sizeof(RtFloat3));
639 
646  if (d == k_Pref || d == k_WPref)
648  else
650 
651  sctx.Transform(interp, Rix::k_current, Rix::k_object, aovValue, NULL);
652  p = aovValue;
653 
654  for (int i = 0; i < sctx.numPts; i++)
655  {
656  dspsvc->Write(
657  aovIdList[d], sctx.integratorCtxIndex[i], (RtColorRGB)p[i]);
658  }
659  }
660  break;
661  }
662  case k_faceindex:
663  {
664  float const* p = nullptr;
665  sctx.GetPrimVar(Rix::k_faceindex, 0.0f, &p);
666  if (p)
667  {
668  int numDisplays;
669  RixDisplayChannel const* displays;
670  dspsvc->GetDisplayChannels(&numDisplays, &displays);
671  bool asInt = false;
672  for (int i = 0; i < numDisplays; i++)
673  {
674  if (displays[i].id == aovIdList[d])
675  {
676  asInt = (displays[i].type == RixDisplayChannel::k_IntegerChannel);
677  break;
678  }
679  }
680  for (int i = 0; i < sctx.numPts; i++)
681  {
682  if (asInt)
683  dspsvc->Write(aovIdList[d], sctx.integratorCtxIndex[i],
684  static_cast<int>(p[i]));
685  else
686  dspsvc->Write(aovIdList[d], sctx.integratorCtxIndex[i], p[i]);
687  }
688  }
689  break;
690  }
691  } // switch
692  } // else
693  } // if requested aov
694  } // iterate over aov list
695  } // iterate over shading contexts
696 }
697 
698 } // namespace PxrGeoAOV
699 
700 #endif
Attribute "identifier" "id2" (type int)
Definition: RixShading.h:906
PRMANAPI const RtUString k_camera
"camera"
virtual RixIntegratorContext * GetIntegratorContext() const =0
Instantaneous P velocity relative to the camera (type RtFloat3)
Definition: RixShading.h:915
PRMAN_INLINE bool GetContinuation() const
Definition: RixBxdfLobe.h:1003
Micropolygon size; 0 for non-tessellated surfaces (type float)
Definition: RixShading.h:888
Normalized shading tangent (type RtFloat3)
Definition: RixShading.h:881
Undisplaced P (type RtFloat3)
Definition: RixShading.h:877
pxrcore::ColorRGB RtColorRGB
virtual RixSCDetail GetPrimVar(const RtUString name, RixSCType *type, int *arraylen) const =0
Id for RixRenderState interface.
int * integratorCtxIndex
Definition: RixShading.h:784
PRMANAPI const RtUString k_faceindex
"__faceindex"
Local principal surface curvature in u dir (type float)
Definition: RixShading.h:913
Local principal surface curvature in v dir (type float)
Definition: RixShading.h:914
PRMANAPI const RtUString k_current
"current"
RixBxdf * GetBxdf() const
Definition: RixShading.h:688
Attribute "identifier" "id" (type int)
Definition: RixShading.h:905
Ray footprint (radius) in V (type float)
Definition: RixShading.h:896
Opacity (type RtFloat3)
Definition: RixShading.h:908
Normalized shading normal (type RtFloat3)
Definition: RixShading.h:878
float RtFloat
Definition: ri.h:54
Instantaneous P velocity relative to the world (type RtFloat3)
Definition: RixShading.h:903
bool HasHits() const
Definition: RixShading.h:679
Normalized undisplaced N (type RtFloat3)
Definition: RixShading.h:880
RixSCDetail
Definition: RixShading.h:376
Backward 2D raster-space motion vector (type RtFloat3)
Definition: RixShading.h:912
virtual int GetOption(RtUString const name, void *result, int resultLength, Type *resultType, int *resultCount)=0
enum RixDisplayChannel::ChannelType type
PRMANAPI const RtUString k_st
"st"
Ray footprint (radius) in U (type float)
Definition: RixShading.h:894
RtRayGeometry * primaryRays
The primary camera rays.
Surface derivative in U (type RtFloat3)
Definition: RixShading.h:900
virtual bool Write(RixChannelId id, int iCtxIndex, float const value)=0
Surface derivative in W (type RtFloat3)
Definition: RixShading.h:902
Bias to apply for transmitted rays (type float)
Definition: RixShading.h:890
Radius of incident ray at P (type float)
Definition: RixShading.h:886
An interface for discovering the current state of the renderer.
RixBXLobeSampled id of incident rays (type int)
Definition: RixShading.h:887
Local mean surface curvature (type float)
Definition: RixShading.h:884
Forward 2D raster-space motion vector (type RtFloat3)
Definition: RixShading.h:911
Normalized view vector, points away from shading points (type RtFloat3)
Definition: RixShading.h:882
void Splat(RtInt numShadingContexts, RixShadingContext const **sctxs, RixDisplayServices *dspsvc, RtFloat3 *aovValue, RtFloat *savedFloat, RixChannelId *aovIdList, RixBXLobeTraits const *lobesWanted=NULL, RtUString coordinateSystem=Rix::k_camera)
Definition: PxrGeoAovs.h:201
int const numDisplays
Display state (unmutable).
pxrcore::UString RtUString
Normalized analytical undisplaced N (type RtFloat3)
Definition: RixShading.h:917
virtual int Transform(TransformInterpretation interp, const RtUString fromSpace, const RtUString toSpace, RtFloat3 *var, float *radius=NULL) const =0
Shading time, normalized between shutter open and close (type float)
Definition: RixShading.h:904
Surface V parameterization (type float)
Definition: RixShading.h:892
Parent ray shading context serialization (type int)
Definition: RixShading.h:910
Ray footprint (radius) in W (type float)
Definition: RixShading.h:898
PRMANAPI const RtUString k_object
"object"
Length of view vector (type float)
Definition: RixShading.h:883
PRMAN_INLINE int RixIsMatte(RixShadingContext const &sCtx)
pxrcore::Float3 RtFloat3
Definition: RiTypesHelper.h:68
virtual void GetDisplayChannels(int *numDisplays, RixDisplayChannel const **displays)=0
Surface W parameterization (type float)
Definition: RixShading.h:893
bool disableIntegratorAOVs(RixContext &ctx, RixChannelId *&aovIdList)
Definition: PxrGeoAovs.h:125
bool NeedTempFloat(RixChannelId *aovIdList)
Definition: PxrGeoAovs.h:194
Spread of incident ray (type float): how much the ray radius increased for each unit distance the ray...
Definition: RixShading.h:885
Incident index of refraction (type float)
Definition: RixShading.h:907
virtual bool GetProperty(RayProperty, void const *) const
Definition: RixShading.h:1033
Bias to apply for reflected rays (type float)
Definition: RixShading.h:889
RtPoint3 origin
Surface U parameterization (type float)
Definition: RixShading.h:891
Shading position (type RtFloat3)
Definition: RixShading.h:874
RixChannelId id
Definition: RixIntegrator.h:70
unsigned int RixChannelId
Definition: RixIntegrator.h:55
PRMAN_INLINE RixBXLobeTraits GetAllLobeTraits()
Definition: RixBxdf.h:520
Surface derivative in V (type RtFloat3)
Definition: RixShading.h:901
virtual RixInterface * GetRixInterface(RixInterfaceId id) const =0
Current LPE State (type RixLPEState)
Definition: RixShading.h:909
PRMANAPI const RtUString k_world
"world"
void GetChannelIds(RixIntegratorEnvironment &env, RixChannelId *&aovIdList)
Definition: PxrGeoAovs.h:146
Normalized geometric normal (type RtFloat3)
Definition: RixShading.h:879
RixDisplayChannel const *const displays
virtual void GetBuiltinVar(BuiltinVar, int const **var) const =0
int RtInt
Definition: ri.h:55
RtFloat3 RtVector3
Definition: RiTypesHelper.h:71