File: Scattering.ih

package info (click to toggle)
ospray 3.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 10,040 kB
  • sloc: cpp: 80,569; ansic: 951; sh: 805; makefile: 171; python: 69
file content (75 lines) | stat: -rw-r--r-- 2,867 bytes parent folder | download | duplicates (2)
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