RenderManAPI  24.0
RixShadingUtils.h File Reference
#include <algorithm>
#include <cassert>
#include <cmath>
#include <cstddef>
#include "RixInterfaces.h"
#include "RixShading.h"
#include "prmanapi.h"
#include "RiTypesHelper.h"
#include "RixPredefinedStrings.hpp"
#include <alloca.h>

Go to the source code of this file.

Namespaces

 RixConstants
 

Macros

#define F_PI   (3.14159265f)
 
#define F_TWOPI   (6.283185307f)
 
#define F_FOURPI   (12.56637061f)
 
#define F_INVPI   (0.318309886f)
 
#define F_INVPISQ   (0.1013211836f)
 
#define F_INVTWOPI   (0.15915494309f)
 
#define F_INVFOURPI   (0.0795774715f)
 
#define F_PIDIV2   (1.57079632679f)
 
#define F_PIDIV4   (0.785398163397f)
 
#define F_DEGTORAD   (0.017453292520f)
 
#define F_RADTODEG   (57.2957795131f)
 
#define F_INVLN2   (1.44269504089f)
 
#define F_INVLN4   (0.72134752f)
 
#define F_LOG2E   (1.44269504088896f)
 
#define F_SQRT2   (1.41421356237f)
 
#define F_MAXDIST   (1.0e10f)
 
#define F_SQRTMIN   (1.0842021721e-19f)
 
#define F_MINDIVISOR   (1.0e-6f)
 
#define ALMOSTZERO   0.005f
 
#define RixAlloca(s)   alloca(s)
 

Functions

PRMAN_INLINE unsigned int RixFindFirstSetBit (unsigned long long v)
 
PRMAN_INLINE float RixDegreesToRadians (float degrees)
 
PRMAN_INLINE float RixRadiansToDegrees (float rads)
 
template<typename T >
PRMAN_INLINERixSignum (T x)
 
PRMAN_INLINE int RixIsFinite (float x)
 
PRMAN_INLINE int RixIsFinite (RtFloat3 const &v)
 
PRMAN_INLINE float RixMin (float x, float y)
 
PRMAN_INLINE int RixMin (int x, int y)
 
PRMAN_INLINE float RixMax (float x, float y)
 
PRMAN_INLINE int RixMax (int x, int y)
 
PRMAN_INLINE float RixClamp (float x, float min, float max)
 
PRMAN_INLINE int RixClamp (int x, int min, int max)
 
PRMAN_INLINE float RixFractional (float x)
 
PRMAN_INLINE float RixMod (float x, float y)
 
PRMAN_INLINE void RixFresnelDielectric (float VdN, float eta, float *Kr)
 
PRMAN_INLINE void RixFresnelDielectric (const RtVector3 &Vn, const RtNormal3 &Nn, float eta, float *Kr, RtVector3 *Rn=NULL, RtVector3 *Tn=NULL)
 
PRMAN_INLINE void RixFresnelDielectric (RixShadingContext &sCtx, float eta, float *Kr, float *Kt, RtVector3 *R, RtVector3 *T)
 
PRMAN_INLINE void RixFresnelConductorApprox (float VdN, float eta, float kappa, float *Kr)
 
PRMAN_INLINE void RixFresnelConductor (float VdN, float eta, float kappa, float *Kr)
 
PRMAN_INLINE void RixFresnelConductor (const RtVector3 &Vn, const RtNormal3 &Nn, float eta, float kappa, float *Kr, RtVector3 *Rn=NULL)
 
PRMAN_INLINE void RixFresnelConductor (float VdN, RtColorRGB const &eta, RtColorRGB const &kappa, RtColorRGB *Kr)
 
PRMAN_INLINE void RixFresnelConductor (RtVector3 const &Vn, RtNormal3 const &Nn, RtColorRGB const &eta, RtColorRGB const &kappa, RtColorRGB *Kr, RtVector3 *Rn=NULL)
 
PRMAN_INLINE float RixSchlickFresnelWeight (float NdV)
 
PRMAN_INLINE RtVector3 RixReflect (const RtVector3 &Vn, const RtNormal3 &Nn)
 
PRMAN_INLINE RtVector3 RixReflect (RtVector3 const &Vn, RtVector3 const &Nn, float VdN)
 
PRMAN_INLINE int RixRefract (const RtVector3 &Vn, const RtNormal3 &Nn, float eta, RtVector3 &Tn)
 
PRMAN_INLINE RtNormal3 RixGetForwardFacingNormal (RtVector3 const &Vn, RtNormal3 const &Nn, float *VdotNf=NULL)
 
PRMAN_INLINE RtNormal3 RixGetBackwardFacingNormal (RtVector3 const &Vn, RtNormal3 const &Nn, float *VdotNb=NULL)
 
PRMAN_INLINE void RixCosDirectionalDistribution (const RtFloat2 &xi, const RtVector3 &n, const RtVector3 &t0, const RtVector3 &t1, RtVector3 &outDir, float &cosTheta)
 
PRMAN_INLINE void RixCosDirectionalDistribution (const RtFloat2 &xi, const RtVector3 &n, RtVector3 &outDir, float &cosTheta)
 
PRMAN_INLINE void RixUniformDirectionalDistribution (const RtFloat2 &xi, const RtVector3 &n, const RtVector3 &t0, const RtVector3 &t1, RtVector3 &outDir, float &cosTheta)
 
PRMAN_INLINE void RixUniformDirectionalDistribution (const RtFloat2 &xi, const RtVector3 &n, RtVector3 &outDir, float &cosTheta)
 
PRMAN_INLINE void RixUniformConeDistribution (const RtFloat2 &xi, const float coneAngle, const RtVector3 &n, const RtVector3 &t0, const RtVector3 &t1, RtVector3 &outDir, float &cosTheta)
 
PRMAN_INLINE void RixUniformConeDistribution (const RtFloat2 &xi, const float coneAngle, const RtVector3 &n, RtVector3 &outDir, float &cosTheta)
 
PRMAN_INLINE RtVector3 RixSphericalDistribution (const RtFloat2 &xi)
 
PRMAN_INLINE int RixChooseAndRemap (float &xi, int numThresholds, float *thresholds)
 
PRMAN_INLINE float RixTraceBias (const RtPoint3 &, const RtNormal3 &N, const RtVector3 &dir, float biasR, float biasT)
 
PRMAN_INLINE RtPoint3 RixApplyTraceBias (const RtPoint3 &org, const RtNormal3 &N, const RtVector3 &dir, const float biasR, const float biasT)
 
PRMAN_INLINE void RixSinCos (float phi, float *sinPhi, float *cosPhi)
 
PRMAN_INLINE RtVector3 RixSphericalDirection (float sinTheta, float cosTheta, float sinPhi, float cosPhi)
 
PRMAN_INLINE RtVector3 RixSphericalDirection (float sinTheta, float cosTheta, float phi)
 
PRMAN_INLINE RtVector3 RixChangeBasisFrom (RtVector3 const &in, RtVector3 const &X, RtVector3 const &Y, RtVector3 const &Z)
 
PRMAN_INLINE RtVector3 RixChangeBasis (RtVector3 const &in, RtVector3 const &X, RtVector3 const &Y, RtVector3 const &Z)
 
PRMAN_INLINE RtVector3 RixChangeBasisTo (RtVector3 const &in, RtVector3 const &X, RtVector3 const &Y, RtVector3 const &Z)
 
template<typename T >
PRMAN_INLINERixMix (const T &v0, const T &v1, float m)
 
template<typename T >
PRMAN_INLINERixSmoothMix (const T &x1, const T &x2, float t)
 
template<typename T >
PRMAN_INLINERixEaseInMix (const T &x1, const T &x2, float t)
 
template<typename T >
PRMAN_INLINERixEaseOutMix (const T &x1, const T &x2, float t)
 
PRMAN_INLINE float RixBoxStep (float min, float val)
 
PRMAN_INLINE float RixLinearStep (float min, float max, float val)
 
PRMAN_INLINE float RixSmoothStep (float min, float max, float val)
 
PRMAN_INLINE float RixGaussStep (float min, float max, float val)
 
PRMAN_INLINE float RixSolidAngle2Spread (float solidangle)
 
PRMAN_INLINE void RixComputeShadingBasis (RtNormal3 const &Nf, RtVector3 const &Tn, RtVector3 &TX, RtVector3 &TY)
 
PRMAN_INLINE void RixDebugBasis (RixShadingContext *sc, RtPoint3 &o, RtVector3 &x, RtVector3 &y, RtVector3 &z)
 
PRMAN_INLINE void RixShiftCtxInU (RixShadingContext *sCtx)
 
PRMAN_INLINE void RixShiftCtxInV (RixShadingContext *sCtx)
 
PRMAN_INLINE void RixBump (RixShadingContext const *sCtx, float const *disp, float const *dispU, float const *dispV, RtNormal3 *Nn)
 
PRMAN_INLINE int RixIsMatte (RixShadingContext const &sCtx)
 
PRMAN_INLINE int RixIsHoldout (RixShadingContext const &sCtx)
 
PRMAN_INLINE unsigned long RixImod (const unsigned long a, const unsigned long b)
 
PRMAN_INLINE float RixHash (const char *bufPtr, unsigned long range=65535)
 
PRMAN_INLINE RtColorRGB RixLerpRGB (RtColorRGB const &a, RtColorRGB const &b, float const mix)
 
PRMAN_INLINE void RixAdjustNormal (float const amount, RtVector3 const &Vn, RtVector3 const &Ngn, RtNormal3 &Nn)
 
PRMAN_INLINE RtFloat RixBumpShadowingFactor (RtNormal3 shadingNormal, RtNormal3 bumpNormal, RtVector3 Ln)
 
PRMAN_INLINE RtFloat RixProcPrimInstanceHash (RixRenderState *rstate)
 
PRMAN_INLINE float RixRayCurvatureToRoughnessSq (float multiplier, float curvature, float incidentRayRadius, float incidentRaySpread)
 
PRMAN_INLINE float RixMollifyRoughness (float roughness, float rayCurvatureRoughnessSq)
 

Macro Definition Documentation

◆ ALMOSTZERO

#define ALMOSTZERO   0.005f

◆ F_DEGTORAD

#define F_DEGTORAD   (0.017453292520f)

Referenced by RixDegreesToRadians().

◆ F_FOURPI

#define F_FOURPI   (12.56637061f)

◆ F_INVFOURPI

#define F_INVFOURPI   (0.0795774715f)

◆ F_INVLN2

#define F_INVLN2   (1.44269504089f)

◆ F_INVLN4

#define F_INVLN4   (0.72134752f)

◆ F_INVPI

#define F_INVPI   (0.318309886f)

◆ F_INVPISQ

#define F_INVPISQ   (0.1013211836f)

◆ F_INVTWOPI

#define F_INVTWOPI   (0.15915494309f)

◆ F_LOG2E

#define F_LOG2E   (1.44269504088896f)

◆ F_MAXDIST

#define F_MAXDIST   (1.0e10f)

◆ F_MINDIVISOR

#define F_MINDIVISOR   (1.0e-6f)

◆ F_PI

#define F_PI   (3.14159265f)

◆ F_PIDIV2

#define F_PIDIV2   (1.57079632679f)

◆ F_PIDIV4

#define F_PIDIV4   (0.785398163397f)

◆ F_RADTODEG

#define F_RADTODEG   (57.2957795131f)

Referenced by RixRadiansToDegrees().

◆ F_SQRT2

#define F_SQRT2   (1.41421356237f)

◆ F_SQRTMIN

#define F_SQRTMIN   (1.0842021721e-19f)

◆ F_TWOPI

◆ RixAlloca

#define RixAlloca (   s)    alloca(s)

Function Documentation

◆ RixAdjustNormal()

PRMAN_INLINE void RixAdjustNormal ( float const  amount,
RtVector3 const &  Vn,
RtVector3 const &  Ngn,
RtNormal3 Nn 
)

◆ RixApplyTraceBias()

PRMAN_INLINE RtPoint3 RixApplyTraceBias ( const RtPoint3 org,
const RtNormal3 N,
const RtVector3 dir,
const float  biasR,
const float  biasT 
)

References RixTraceBias().

◆ RixBoxStep()

PRMAN_INLINE float RixBoxStep ( float  min,
float  val 
)

◆ RixBump()

◆ RixBumpShadowingFactor()

PRMAN_INLINE RtFloat RixBumpShadowingFactor ( RtNormal3  shadingNormal,
RtNormal3  bumpNormal,
RtVector3  Ln 
)

References RixClamp(), RixMax(), and RixMin().

◆ RixChangeBasis()

PRMAN_INLINE RtVector3 RixChangeBasis ( RtVector3 const &  in,
RtVector3 const &  X,
RtVector3 const &  Y,
RtVector3 const &  Z 
)

References RixChangeBasisFrom().

◆ RixChangeBasisFrom()

PRMAN_INLINE RtVector3 RixChangeBasisFrom ( RtVector3 const &  in,
RtVector3 const &  X,
RtVector3 const &  Y,
RtVector3 const &  Z 
)

Referenced by RixChangeBasis().

◆ RixChangeBasisTo()

PRMAN_INLINE RtVector3 RixChangeBasisTo ( RtVector3 const &  in,
RtVector3 const &  X,
RtVector3 const &  Y,
RtVector3 const &  Z 
)

◆ RixChooseAndRemap()

PRMAN_INLINE int RixChooseAndRemap ( float &  xi,
int  numThresholds,
float *  thresholds 
)

◆ RixClamp() [1/2]

PRMAN_INLINE float RixClamp ( float  x,
float  min,
float  max 
)

◆ RixClamp() [2/2]

PRMAN_INLINE int RixClamp ( int  x,
int  min,
int  max 
)

◆ RixComputeShadingBasis()

PRMAN_INLINE void RixComputeShadingBasis ( RtNormal3 const &  Nf,
RtVector3 const &  Tn,
RtVector3 TX,
RtVector3 TY 
)

◆ RixCosDirectionalDistribution() [1/2]

PRMAN_INLINE void RixCosDirectionalDistribution ( const RtFloat2 xi,
const RtVector3 n,
const RtVector3 t0,
const RtVector3 t1,
RtVector3 outDir,
float &  cosTheta 
)

◆ RixCosDirectionalDistribution() [2/2]

PRMAN_INLINE void RixCosDirectionalDistribution ( const RtFloat2 xi,
const RtVector3 n,
RtVector3 outDir,
float &  cosTheta 
)

◆ RixDebugBasis()

◆ RixDegreesToRadians()

PRMAN_INLINE float RixDegreesToRadians ( float  degrees)

References F_DEGTORAD.

◆ RixEaseInMix()

template<typename T >
PRMAN_INLINE T RixEaseInMix ( const T &  x1,
const T &  x2,
float  t 
)

◆ RixEaseOutMix()

template<typename T >
PRMAN_INLINE T RixEaseOutMix ( const T &  x1,
const T &  x2,
float  t 
)

◆ RixFindFirstSetBit()

◆ RixFractional()

PRMAN_INLINE float RixFractional ( float  x)

Referenced by RixHslCorrect(), and RixHsvCorrect().

◆ RixFresnelConductor() [1/4]

PRMAN_INLINE void RixFresnelConductor ( float  VdN,
float  eta,
float  kappa,
float *  Kr 
)

References RixFresnelDielectric().

Referenced by RixFresnelConductor().

◆ RixFresnelConductor() [2/4]

PRMAN_INLINE void RixFresnelConductor ( const RtVector3 Vn,
const RtNormal3 Nn,
float  eta,
float  kappa,
float *  Kr,
RtVector3 Rn = NULL 
)

◆ RixFresnelConductor() [3/4]

PRMAN_INLINE void RixFresnelConductor ( float  VdN,
RtColorRGB const &  eta,
RtColorRGB const &  kappa,
RtColorRGB Kr 
)

◆ RixFresnelConductor() [4/4]

PRMAN_INLINE void RixFresnelConductor ( RtVector3 const &  Vn,
RtNormal3 const &  Nn,
RtColorRGB const &  eta,
RtColorRGB const &  kappa,
RtColorRGB Kr,
RtVector3 Rn = NULL 
)

References RixFresnelConductor().

◆ RixFresnelConductorApprox()

PRMAN_INLINE void RixFresnelConductorApprox ( float  VdN,
float  eta,
float  kappa,
float *  Kr 
)

References RixFresnelDielectric().

Referenced by RixFresnelConductor().

◆ RixFresnelDielectric() [1/3]

PRMAN_INLINE void RixFresnelDielectric ( float  VdN,
float  eta,
float *  Kr 
)

◆ RixFresnelDielectric() [2/3]

PRMAN_INLINE void RixFresnelDielectric ( const RtVector3 Vn,
const RtNormal3 Nn,
float  eta,
float *  Kr,
RtVector3 Rn = NULL,
RtVector3 Tn = NULL 
)

◆ RixFresnelDielectric() [3/3]

PRMAN_INLINE void RixFresnelDielectric ( RixShadingContext sCtx,
float  eta,
float *  Kr,
float *  Kt,
RtVector3 R,
RtVector3 T 
)

◆ RixGaussStep()

PRMAN_INLINE float RixGaussStep ( float  min,
float  max,
float  val 
)

References RixBoxStep().

◆ RixGetBackwardFacingNormal()

PRMAN_INLINE RtNormal3 RixGetBackwardFacingNormal ( RtVector3 const &  Vn,
RtNormal3 const &  Nn,
float *  VdotNb = NULL 
)

◆ RixGetForwardFacingNormal()

PRMAN_INLINE RtNormal3 RixGetForwardFacingNormal ( RtVector3 const &  Vn,
RtNormal3 const &  Nn,
float *  VdotNf = NULL 
)

◆ RixHash()

PRMAN_INLINE float RixHash ( const char *  bufPtr,
unsigned long  range = 65535 
)

References RixImod().

◆ RixImod()

PRMAN_INLINE unsigned long RixImod ( const unsigned long  a,
const unsigned long  b 
)

Referenced by RixHash().

◆ RixIsFinite() [1/2]

PRMAN_INLINE int RixIsFinite ( float  x)

◆ RixIsFinite() [2/2]

PRMAN_INLINE int RixIsFinite ( RtFloat3 const &  v)

References RixIsFinite().

◆ RixIsHoldout()

PRMAN_INLINE int RixIsHoldout ( RixShadingContext const &  sCtx)

◆ RixIsMatte()

PRMAN_INLINE int RixIsMatte ( RixShadingContext const &  sCtx)

◆ RixLerpRGB()

PRMAN_INLINE RtColorRGB RixLerpRGB ( RtColorRGB const &  a,
RtColorRGB const &  b,
float const  mix 
)

References RixClamp().

◆ RixLinearStep()

PRMAN_INLINE float RixLinearStep ( float  min,
float  max,
float  val 
)

References RixBoxStep().

◆ RixMax() [1/2]

PRMAN_INLINE float RixMax ( float  x,
float  y 
)

◆ RixMax() [2/2]

PRMAN_INLINE int RixMax ( int  x,
int  y 
)

◆ RixMin() [1/2]

PRMAN_INLINE float RixMin ( float  x,
float  y 
)

◆ RixMin() [2/2]

PRMAN_INLINE int RixMin ( int  x,
int  y 
)

◆ RixMix()

template<typename T >
PRMAN_INLINE T RixMix ( const T &  v0,
const T &  v1,
float  m 
)

◆ RixMod()

PRMAN_INLINE float RixMod ( float  x,
float  y 
)

◆ RixMollifyRoughness()

PRMAN_INLINE float RixMollifyRoughness ( float  roughness,
float  rayCurvatureRoughnessSq 
)

◆ RixProcPrimInstanceHash()

PRMAN_INLINE RtFloat RixProcPrimInstanceHash ( RixRenderState rstate)

◆ RixRadiansToDegrees()

PRMAN_INLINE float RixRadiansToDegrees ( float  rads)

References F_RADTODEG.

◆ RixRayCurvatureToRoughnessSq()

PRMAN_INLINE float RixRayCurvatureToRoughnessSq ( float  multiplier,
float  curvature,
float  incidentRayRadius,
float  incidentRaySpread 
)

◆ RixReflect() [1/2]

PRMAN_INLINE RtVector3 RixReflect ( const RtVector3 Vn,
const RtNormal3 Nn 
)

◆ RixReflect() [2/2]

PRMAN_INLINE RtVector3 RixReflect ( RtVector3 const &  Vn,
RtVector3 const &  Nn,
float  VdN 
)

◆ RixRefract()

PRMAN_INLINE int RixRefract ( const RtVector3 Vn,
const RtNormal3 Nn,
float  eta,
RtVector3 Tn 
)

◆ RixSchlickFresnelWeight()

PRMAN_INLINE float RixSchlickFresnelWeight ( float  NdV)

◆ RixShiftCtxInU()

◆ RixShiftCtxInV()

◆ RixSignum()

template<typename T >
PRMAN_INLINE T RixSignum ( x)

◆ RixSinCos()

PRMAN_INLINE void RixSinCos ( float  phi,
float *  sinPhi,
float *  cosPhi 
)

Referenced by RixSphericalDirection().

◆ RixSmoothMix()

template<typename T >
PRMAN_INLINE T RixSmoothMix ( const T &  x1,
const T &  x2,
float  t 
)

◆ RixSmoothStep()

PRMAN_INLINE float RixSmoothStep ( float  min,
float  max,
float  val 
)

References RixBoxStep().

◆ RixSolidAngle2Spread()

PRMAN_INLINE float RixSolidAngle2Spread ( float  solidangle)

◆ RixSphericalDirection() [1/2]

PRMAN_INLINE RtVector3 RixSphericalDirection ( float  sinTheta,
float  cosTheta,
float  sinPhi,
float  cosPhi 
)

Referenced by RixSphericalDirection().

◆ RixSphericalDirection() [2/2]

PRMAN_INLINE RtVector3 RixSphericalDirection ( float  sinTheta,
float  cosTheta,
float  phi 
)

◆ RixSphericalDistribution()

PRMAN_INLINE RtVector3 RixSphericalDistribution ( const RtFloat2 xi)

References F_TWOPI, RtFloat2::x, and RtFloat2::y.

◆ RixTraceBias()

PRMAN_INLINE float RixTraceBias ( const RtPoint3 ,
const RtNormal3 N,
const RtVector3 dir,
float  biasR,
float  biasT 
)

Referenced by RixApplyTraceBias().

◆ RixUniformConeDistribution() [1/2]

PRMAN_INLINE void RixUniformConeDistribution ( const RtFloat2 xi,
const float  coneAngle,
const RtVector3 n,
const RtVector3 t0,
const RtVector3 t1,
RtVector3 outDir,
float &  cosTheta 
)

References F_TWOPI, RtFloat2::x, and RtFloat2::y.

Referenced by RixUniformConeDistribution().

◆ RixUniformConeDistribution() [2/2]

PRMAN_INLINE void RixUniformConeDistribution ( const RtFloat2 xi,
const float  coneAngle,
const RtVector3 n,
RtVector3 outDir,
float &  cosTheta 
)

◆ RixUniformDirectionalDistribution() [1/2]

PRMAN_INLINE void RixUniformDirectionalDistribution ( const RtFloat2 xi,
const RtVector3 n,
const RtVector3 t0,
const RtVector3 t1,
RtVector3 outDir,
float &  cosTheta 
)

◆ RixUniformDirectionalDistribution() [2/2]

PRMAN_INLINE void RixUniformDirectionalDistribution ( const RtFloat2 xi,
const RtVector3 n,
RtVector3 outDir,
float &  cosTheta 
)