1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
// Copyright 2009 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include "rkcommon/math/vec.ih"
#define SCATTERING_SPECULAR_REFLECTION \
(1 << 0) /*!< perfect specular reflection */
#define SCATTERING_GLOSSY_REFLECTION \
(1 << 1) /*!< glossy reflection */
#define SCATTERING_DIFFUSE_REFLECTION \
(1 << 2) /*!< diffuse reflection */
#define SCATTERING_SPECULAR_TRANSMISSION \
(1 << 3) /*!< perfect specular transmission */
#define SCATTERING_GLOSSY_TRANSMISSION \
(1 << 4) /*!< glossy transmission */
#define SCATTERING_DIFFUSE_TRANSMISSION \
(1 << 5) /*!< diffuse transmission */
/*! diffuse reflections and transmissions */
#define SCATTERING_DIFFUSE \
(SCATTERING_DIFFUSE_REFLECTION | SCATTERING_DIFFUSE_TRANSMISSION)
/*! glossy reflections and transmissions */
#define SCATTERING_GLOSSY \
(SCATTERING_GLOSSY_REFLECTION | SCATTERING_GLOSSY_TRANSMISSION)
/*! perfect specular reflections and transmissions */
#define SCATTERING_SPECULAR \
(SCATTERING_SPECULAR_REFLECTION | SCATTERING_SPECULAR_TRANSMISSION)
/*! all possible reflections */
#define SCATTERING_REFLECTION \
(SCATTERING_DIFFUSE_REFLECTION | SCATTERING_GLOSSY_REFLECTION \
| SCATTERING_SPECULAR_REFLECTION)
/*! all possible transmissions */
#define SCATTERING_TRANSMISSION \
(SCATTERING_DIFFUSE_TRANSMISSION | SCATTERING_GLOSSY_TRANSMISSION \
| SCATTERING_SPECULAR_TRANSMISSION)
/*! all non-dirac types */
#define SCATTERING_SMOOTH (SCATTERING_DIFFUSE | SCATTERING_GLOSSY)
/*! no component set */
#define SCATTERING_NONE 0
/*! all components set */
#define SCATTERING_ALL (SCATTERING_REFLECTION | SCATTERING_TRANSMISSION)
OSPRAY_BEGIN_ISPC_NAMESPACE
typedef uint32 Scattering_Type;
struct Scattering_EvalRes
{
vec3f value; //!< radiance (multiplied by foreshortening factor for BSDFs)
float pdf;
};
// Note: the pdf of Dirac delta distributions is represented with inf. This is
// possible, because in weight we already cancel the Dirac delta (but still
// account for a changed pdf by e.g. discrete events such as component
// selection).
struct Scattering_SampleRes
{
vec3f weight; //!< radiance divided by pdf and multiplied by foreshortening
//!< factor for BSDFs
vec3f wi;
float pdf;
Scattering_Type type;
};
OSPRAY_END_ISPC_NAMESPACE
|