39 template<
class SceneType,
class Vec3>
44 template<
class Vec3,
class SceneType>
51 template<
class Vec3,
class SceneType>
55 template<
class SceneType>
58 template<
class SceneType,
class OnISsReadyCallback>
71 template<
class SceneType,
class Vec3>
81 template<
class Vec3,
class SceneType>
84 using Intersection =
typename SceneType::Intersection;
97 static constexpr float offset = 0.001f;
107 template<
class Vec3,
class SceneType>
114 if (path.Nodes.size() - 1 != newImageSources.size())
127 using Intersection =
typename SceneType::Intersection;
137 static constexpr float offset = 0.001f;
150 template<
class SceneType>
151 inline void SceneInterface::AccumulateMaterialAbsorption(
const SceneType& scene, std::span<const int> surfaces,
EnergyBands& outEnergyLoss)
154 for (
int surfaceId : surfaces)
157 if (scene.GetMaterialAbsorption(surfaceId, materialAbsorption))
158 outEnergyLoss += materialAbsorption;
162 template<
class SceneType,
class OnISsReadyCallback>
163 inline void SceneInterface::ReconstructImageSources(
const SceneType& scene, std::span<const int> pathNodes,
const OnISsReadyCallback& callback)
165 using Vec3 =
typename SceneType::Vec3;
167 const auto surfaces = pathNodes.subspan(0, pathNodes.size() - 1);
168 const Vec3 source = scene.GetSourcePosition(pathNodes.front());
169 const Vec3 receiver = scene.GetReceiverPosition(pathNodes.back());
176 for (
const int Tjd : surfaces | std::views::drop(1))
178 auto imageSource = ReflectPoint(scene, IS.
back(), Tjd);
181 if (imageSource.has_value())
194 callback(std::span<const Vec3>(IS), receiver);
#define JPL_ASSERT(inExpression,...)
Main assert macro, usage: JPL_ASSERT(condition, message) or JPL_ASSERT(condition)
Definition ErrorReporting.h:76
A very experimental scene interface for specular ray tracing.
Definition SceneInterface.h:35
static constexpr std::size_t cMaxOrder
Definition SceneInterface.h:37
static void AccumulateMaterialAbsorption(const SceneType &scene, std::span< const int > surfaces, EnergyBands &outEnergyLoss)
Definition SceneInterface.h:151
static void ReconstructImageSources(const SceneType &scene, std::span< const int > pathNodes, const OnISsReadyCallback &callback)
Definition SceneInterface.h:163
static std::optional< Vec3 > ReflectPoint(const SceneType &scene, const Vec3 &point, int surfaceId)
Definition SceneInterface.h:72
static bool ValidatePath(const SceneType &scene, std::span< const int > triCache, std::span< const Vec3 > imageSources, const Vec3 &receiver)
Definition SceneInterface.h:82
Definition StaticArray.h:35
constexpr JPL_INLINE reference back() noexcept
Definition StaticArray.h:95
constexpr JPL_INLINE void push_back(const T &value)
Definition StaticArray.h:145
constexpr JPL_INLINE size_type size() const
Definition StaticArray.h:77
Definition AcousticMaterial.h:36
JPL_INLINE simd min(const simd &a, const simd &b) noexcept
Element-wise min.
Definition SIMD.h:1813
Definition SpecularPath.h:57
Minimal 4-wide 32-bit float vector implementation for SIMD.
Definition SIMD.h:60
static constexpr std::size_t size() noexcept
Get number of element of the vector.
Definition SIMD.h:97