Unresolved Lambertian Sphere¶
-
template<IsSpectral TSpectral>
class UnresolvedLambertianSphere : public huira::UnresolvedObject<TSpectral>¶ Represents an unresolved sphere with Lambertian reflectance illuminated by a light source.
UnresolvedLambertianSphere models a spherical body with uniform Lambertian scattering. The apparent brightness depends on the phase angle between the light source, sphere, and observer, calculated using Lambert’s phase function. The reflected light is computed based on the sphere’s radius, albedo, and the incident irradiance.
- Template Parameters:
TSpectral – The spectral representation type.
Public Functions
-
UnresolvedLambertianSphere(units::Meter radius, InstanceHandle<TSpectral> light_instance, TSpectral albedo = TSpectral{1.f})¶
Constructs an UnresolvedLambertianSphere with specified properties.
Initializes a Lambertian sphere with a given radius, illuminating light source, and spectral albedo. The constructor validates that the provided light instance actually contains a Light object.
-
UnresolvedLambertianSphere(units::Meter radius, InstanceHandle<TSpectral> light_instance, float albedo)¶
Constructs an UnresolvedLambertianSphere with specified properties.
Initializes a Lambertian sphere with a given radius, illuminating light source, and spectral albedo. The constructor validates that the provided light instance actually contains a Light object.
-
virtual void resolve_irradiance(const Transform<float> &self_transform, const std::vector<LightInstance<TSpectral>> &lights) override¶
Resolves the spectral irradiance based on Lambertian sphere scattering.
Computes the apparent brightness of the sphere as seen by an observer at the origin. The calculation accounts for:
The incident irradiance from the light source
The sphere’s cross-sectional area and albedo
The Lambert phase function based on the phase angle
Inverse square law falloff to the observer
- Parameters:
self_transform – The world-space transform of the sphere.
lights – A vector of all light instances in the scene.
- Throws:
std::runtime_error – if the sphere’s light source is not found in the scene.
-
inline virtual std::string type() const override¶
Get the object’s type string.
- Returns:
std::string Type
-
void set_irradiance(const units::SpectralWattsPerMeterSquared<TSpectral> &spectral_irradiance)¶
Sets the spectral irradiance of the unresolved object.
Updates the object’s irradiance value. 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. 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.
This method provides a hook for future derived classes to implement time-varying irradiance. The default implementation assumes irradiance is constant once computed or set.
- Parameters:
time – The time at which to query irradiance (unused in default implementation).
- Returns:
The current spectral irradiance value.
-
inline virtual std::uint64_t id() const override¶
Get the object’s unique ID.
- Returns:
std::uint64_t ID
-
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::string get_info() const¶
Get a descriptive info string for the object.
- Returns:
std::string Info string
Protected Static Attributes
-
static std::uint64_t next_id_ = 0¶