Unresolved Object¶
-
template<IsSpectral TSpectral>
class UnresolvedObject : public huira::SceneObject<UnresolvedObject<TSpectral>>¶ Represents an unresolved object to be rendered.
UnresolvedObject serves as a base class for objects whose irradiance can be computed or updated based on the state of the scene. Subclasses can override resolve_irradiance() to implement custom irradiance computation logic. This base class assumes that the object’s spectral irradiance is constant and does not depend on any observer or light positions.
Irradiance is stored per temporal sample of the exposure interval: a single entry represents a constant value, while N entries are linearly interpolated across the resolved time range by get_irradiance().
- Template Parameters:
TSpectral – The spectral representation type.
Subclassed by huira::UnresolvedAsteroid< TSpectral >, huira::UnresolvedEmitter< TSpectral >, huira::UnresolvedLambertianSphere< TSpectral >
Public Functions
-
UnresolvedObject() = default¶
-
UnresolvedObject(const units::SpectralWattsPerMeterSquared<TSpectral> &spectral_irradiance)¶
Constructs an UnresolvedObject with specified spectral irradiance.
Creates an unresolved object and initializes its spectral irradiance value. The provided irradiance is validated to ensure all components are non-negative and finite.
- Parameters:
spectral_irradiance – The initial spectral irradiance in \(W \cdot m^{-2}\).
- Throws:
std::runtime_error – if the irradiance contains invalid values.
-
UnresolvedObject(const units::WattsPerMeterSquared &irradiance)¶
Constructs an UnresolvedObject from total irradiance.
Creates an unresolved object with a total irradiance value that is distributed across spectral bins proportionally to their wavelength widths.
- Parameters:
irradiance – The total irradiance in \(W \cdot m^{-2}\).
- Throws:
std::runtime_error – if the irradiance is negative, NaN, or infinite.
-
UnresolvedObject(const UnresolvedObject&) = delete¶
-
UnresolvedObject &operator=(const UnresolvedObject&) = delete¶
-
void set_irradiance(const units::SpectralWattsPerMeterSquared<TSpectral> &spectral_irradiance)¶
Sets the spectral irradiance of the unresolved object.
Updates the object’s irradiance value as a single constant entry. All spectral components must be non-negative, as negative irradiance is physically meaningless.
- Parameters:
spectral_irradiance – The new spectral irradiance value in \(W \cdot m^{-2}\).
- Throws:
std::runtime_error – if any irradiance component is negative.
-
void set_irradiance(const units::WattsPerMeterSquared &irradiance)¶
Sets the total irradiance of the unresolved object.
Updates the object’s irradiance by converting a total irradiance value (in watts per square meter) to the spectral representation, stored as a single constant entry. The total irradiance must be non-negative, as negative values are physically meaningless.
- Parameters:
irradiance – The new total irradiance value in \(W \cdot m^{-2}\).
- Throws:
std::runtime_error – if the total irradiance is negative, NaN, or infinite.
-
virtual TSpectral get_irradiance(Time time) const¶
Returns the spectral irradiance at a given time.
If the object holds a single (constant) irradiance entry, it is returned directly. Otherwise, the per-temporal-sample entries are linearly interpolated over the time range cached by set_resolved_irradiance_(). Times outside the range are clamped to the endpoints.
- Parameters:
time – The time at which to query irradiance.
- Returns:
The spectral irradiance value at the requested time.
-
virtual void resolve_irradiance(const std::vector<Transform<float>> &self_transforms, const std::vector<Time> ×, const SceneView<TSpectral> &scene_view, RandomSampler<float> &sampler)¶
Resolves the spectral irradiance from scene state.
This method provides a hook for subclasses to compute or update the object’s per-temporal-sample irradiance based on its transforms and the contents of the scene view (lights, occluders, indirect sources). It is called by SceneView after the acceleration structure has been built, so implementations may cast rays through the view. The default implementation does nothing, leaving the irradiance unchanged.
- Parameters:
self_transforms – Camera-relative transforms of this object, one per temporal sample.
times – Absolute times of the temporal samples (same size as self_transforms).
scene_view – The fully constructed scene view.
sampler – Random sampler for stochastic irradiance estimation.
-
inline virtual std::string type() const override¶
Get the object’s type string.
- Returns:
std::string Type
-
inline bool is_scene_owned() const¶
Check if the object is owned by the scene.
- Returns:
bool True if owned
-
inline void set_scene_owned(bool owned)¶
Set scene ownership flag.
- Parameters:
owned – True if owned
-
inline std::string name() const¶
Get the object’s name.
- Returns:
std::string Name
-
inline virtual std::uint64_t id() const¶
Get the object’s unique ID.
- Returns:
std::uint64_t ID
-
inline virtual std::string get_info() const¶
Get a descriptive info string for the object.
- Returns:
std::string Info string
Protected Functions
-
void set_resolved_irradiance_(std::vector<TSpectral> irradiances, const std::vector<Time> ×)¶
Stores resolved per-temporal-sample irradiances and their time range.
Validates the irradiance values and caches the time range endpoints used by get_irradiance() for interpolation.
irradiancesmust either contain a single (constant) entry, or exactly one entry per entry intimes.- Parameters:
irradiances – Resolved spectral irradiances, one per temporal sample (or a single constant entry).
times – Absolute times of the temporal samples.
- Throws:
std::runtime_error – if sizes are inconsistent or any value is invalid.